freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

api串口通信實(shí)例-展示頁(yè)

2025-06-29 06:55本頁(yè)面
  

【正文】 eFile(portname, //串口號(hào) ******************************************//* lishaoan 20090629 *****************************************************//* ******************************************************/include include實(shí)例2:/******************system(pause) 。open=openport(2)。 void}return FALSE。 0)。 OPEN_EXISTING, //通訊設(shè)備已存在 0, //通訊設(shè)備必須以獨(dú)占方式打開(kāi)hComm = CreateFile(portname, //串口號(hào) ******************************************//* lishaoan 20090629 *****************************************************//* ******************************************************/include include實(shí)例1:/******************異步,就是說(shuō),在進(jìn)行串口讀寫(xiě)操作時(shí),不用等到I/O操作完成后函數(shù)才返回,也就是說(shuō),異步可以更快得響應(yīng)用戶(hù)操作;同步,相反,響應(yīng)的I/O操作必須完成后函數(shù)才返回,否則阻塞線(xiàn)程。串口被成功打開(kāi)時(shí),返回其句柄,否則返回INVALID_HANDLE_value(0XFFFFFFFF)。 hTemplateFile指向一個(gè)模板文件的句柄,串口無(wú)模板可言,設(shè)為NULL。Win 9x下該參數(shù)被忽略;dwCreationDistribution定義文件創(chuàng)建方式, 對(duì)串口必須設(shè)為OPEN_EXISTING,表示打開(kāi)已經(jīng)存在的文件;dwFlagsAndAttributes為該文件指定定義文件屬性和標(biāo)志,這個(gè)程序中設(shè)為FILE_FLAG_OVERLAPPED,表示異步通信方式;因?yàn)榇锌诓恢С秩魏喂蚕砟J剑詃wShareMode必須設(shè)為0。用ENERIC_READ|GENERIC_WRITE則指定可對(duì)串口進(jìn)行讀寫(xiě)。當(dāng)用CreateFile打開(kāi)串口時(shí),這個(gè)參數(shù)可用“COM1”指定串口1,用“COM2”指定串口2,依此類(lèi)推。 HANDLE hTemplateFile )。 DWORD dwFlagsAndAttributes, 從字面上去理解,大家也可以發(fā)現(xiàn)CreateFile實(shí)際上表明Windows是把串口當(dāng)作一個(gè)文件來(lái)處理的,所以它也有文件那樣的緩沖區(qū)、句柄、讀寫(xiě)錯(cuò)誤等,不同的是,這個(gè)文件名字只有固定的幾個(gè)(一般為四個(gè)),而且始終存在(EXSITING),而且在調(diào)用CreateFile的時(shí)候請(qǐng)注意它的參數(shù)。第二節(jié)下面依次講述各個(gè)步驟的過(guò)程。 然后對(duì)串口進(jìn)行相應(yīng)的讀寫(xiě)操作,這時(shí)候用到ReadFile和WriteFile函數(shù); 對(duì)串口的參數(shù)進(jìn)行設(shè)置,其中比較重要的是波特率(BaudRate),數(shù)據(jù)寬度(BytesBits),奇偶校驗(yàn)(Parity),停止位(StopBits),當(dāng)然,重要的還有端口號(hào)(Port); 創(chuàng)建串口句柄,用CreateFile; API編寫(xiě)串口,過(guò)程一般是這樣的: 清空串口緩沖區(qū),退出所有相關(guān)操作 ClearCommError 返回最后重疊(異步)操作結(jié)果 PurgeComm 接收數(shù)據(jù) GetOverlappedResult 等待被監(jiān)控事件發(fā)生 WaitForMultipleObjects 設(shè)定被監(jiān)控事件 WaitCommEvent 設(shè)置通信超時(shí)參數(shù) SetCommMask 檢測(cè)通信超時(shí)設(shè)置 SetCommTimeouts 用字符串中的值來(lái)填充設(shè)備控制塊 GetCommTimeouts 檢測(cè)串口設(shè)置 SetCommState 作用 CreateFileAPI函數(shù)不僅提供了打開(kāi)和讀寫(xiě)通訊端口的操作方法,還提供了名目繁多的函數(shù)以支持對(duì)串行通訊的各種操作。第一節(jié) 實(shí)現(xiàn)串口通訊的函數(shù)及串口編程簡(jiǎn)介常用函數(shù)及作用下:函數(shù)名 打開(kāi)串口 GetCommState 設(shè)置串口 BuilderCommDCB 等待多個(gè)被監(jiān)測(cè)對(duì)象的結(jié)果 WriteFile 發(fā)送數(shù)據(jù) ReadFile 更新串口狀態(tài)結(jié)構(gòu)體,并清除所有串口硬件錯(cuò)誤 CloseHandle 關(guān)閉串行口用Windows API編寫(xiě)串口程序本身是有巨大優(yōu)點(diǎn)的,因?yàn)榭刂颇芰?huì)更強(qiáng),效率也會(huì)更高。 讀寫(xiě)結(jié)束后,要關(guān)閉串口句柄,用CloseFile。 創(chuàng)建串口句柄打開(kāi)串口CreateFile函數(shù)原型如下: HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition,lpFileName:指向一個(gè)以NULL結(jié)束的字符串,該串指定了要?jiǎng)?chuàng)建、打開(kāi)或截?cái)嗟奈募?、管道、通信源、磁盤(pán)設(shè)備或控制臺(tái)的名字。dwDesireAccess: 指定對(duì)文件訪(fǎng)問(wèn)的類(lèi)型,該參數(shù)可以為GENERIC_READ(指定對(duì)該文件的讀訪(fǎng)問(wèn)權(quán))或GENERIC_WRITE(指定該文件的寫(xiě)訪(fǎng)問(wèn)權(quán))兩個(gè)值之一或同時(shí)為為這兩個(gè)值。dwShareMode:指定此文件可以怎樣被共享。lpSecurityAttributes定義安全屬性,一般不用,可設(shè)為NULL。在 Windows 9x下該參數(shù)必須為NULL。上面說(shuō)到了異步,那什么是異步呢?異步是相對(duì)同步這個(gè)概念而言的。對(duì)于一些很簡(jiǎn)單的通訊程序來(lái)說(shuō),可以選擇同步,這樣可以省去很多錯(cuò)誤檢查,但是對(duì)于復(fù)雜一點(diǎn)的應(yīng)用程序,異步是最佳選擇。 includebool openport(char *portname)//打開(kāi)串口{HANDLE hComm。 GENERIC_READ | GENERIC_WRITE, //允許讀寫(xiě) 0, //無(wú)安全屬性FILE_FLAG_OVERLAPPED, //異步I/O //通訊設(shè)備不能用模板打開(kāi)if (hComm == INVALID_HANDLE_VALUE){CloseHandle(hComm)。}elsereturn true。 main(){bool open。if(open)printf(open port success)。}/************************** program end***************************************/ includebool openport(char *portname)//打開(kāi)串口{HANDLE hComm。 GENERIC_READ | GENERIC_WRITE, //允許讀寫(xiě) 0, //無(wú)安全屬性 0, //同步I/O //通訊設(shè)備不能用模板打開(kāi)if (hComm == INVALID_HANDLE_VALUE){CloseHandle(hComm)。}elsereturn true。 main(){bool open。if(open)printf(open port success)。}/************************** program end***************************************/在打開(kāi)通信設(shè)備句柄后,常常需要對(duì)串行口進(jìn)行一些初始化工作。DCB結(jié)構(gòu)包含了諸如波特率、每個(gè)字符的數(shù)據(jù)位數(shù)、奇偶校驗(yàn)和停止位數(shù)等信息。第一次打開(kāi)串口時(shí),串口設(shè)置為系統(tǒng)默認(rèn)值,函數(shù)GetCommState和SetCommState可用于檢索和設(shè)定端口設(shè)置的DCB(設(shè)備控制塊)結(jié)構(gòu),該結(jié)構(gòu)中BaudRate、ByteSize、StopBits和Parity字段含有串口波特率、數(shù)據(jù)位數(shù)、停止位和奇偶校驗(yàn)控制等信息。參數(shù)說(shuō)明: hFile:串口句柄 lpDCB:設(shè)備控制塊(Device Control Block)結(jié)構(gòu)地址。此處是與串口相關(guān)的參數(shù)。然后在需要設(shè)置的地方對(duì)dcb進(jìn)行設(shè)置。這里介紹數(shù)據(jù)結(jié)構(gòu)DCB:typedef struct _DCB { // dcb DWORD DCBlength。 //DCB結(jié)構(gòu)體大小 DWORD BaudRate。 //波特率 DWORD fBinary: 1。//是否進(jìn)行奇偶校驗(yàn) DWORD fOutxCtsFlow:1。 //DSR線(xiàn)上的硬件握手 DWORD fDtrControl:2。 DWORD fTXContinueOnXoff:1。 //是否使用XON/XOFF協(xié)議 DWORD fInX: 1。 DWORD fRtsControl:2。 WORD wReserved。 WORD XonLim。 //數(shù)據(jù)寬度,一般為8,有時(shí)候?yàn)? BYTE Parity。 //設(shè)置表示XOFF字符的字符,一般是采用0x13這個(gè)數(shù)值 char ErrorChar。 char EvtChar。 我們真正在串口編程中用到的數(shù)據(jù)成員沒(méi)有幾個(gè),在此僅介紹少數(shù)的幾個(gè)常用的參數(shù): DWORD BaudRate:串口波特率 DWORD fParity:為1的話(huà)激活奇偶校驗(yàn)檢查 DWORD Parity:校驗(yàn)方式,值0~4分別對(duì)應(yīng)無(wú)校驗(yàn)、奇校驗(yàn)、偶校驗(yàn)、校驗(yàn)置位、校驗(yàn)清零 DWORD ByteSize:一個(gè)字節(jié)的數(shù)據(jù)位個(gè)數(shù),范圍是5~8DWORD StopBits:停止位個(gè)數(shù),0~2分別對(duì)應(yīng)1位、2位停止位 然后再末尾調(diào)用SetCommState就可以了,還是比較方便的。SetCommState()用途:設(shè)置串口狀態(tài),包括常用的更改串口號(hào)、波特率、奇偶校驗(yàn)方式、數(shù)據(jù)位數(shù)等 原型:BOOL SetCommState(HANDLE hFile, LPDCB lpDCB)。要更改的串口參數(shù)包含在此結(jié)構(gòu)中。 SetCommMask()說(shuō)明:用途:設(shè)置串口通信事件。參數(shù)說(shuō)明: hFile:串口句柄 dwEvtMask:準(zhǔn)備監(jiān)視的串口事件掩碼 該參數(shù)有如下信息掩碼位值: EV_BREAK:收到BREAK信號(hào) EV_CTS:CTS(clear to send)線(xiàn)路發(fā)生變化 EV_DSR:DST(Data Set Ready)線(xiàn)路發(fā)生變化 EV_ERR:線(xiàn)路狀態(tài)錯(cuò)誤,包括了CE_FRAME\CE_OVERRUN\CE_RXPARITY 3鐘錯(cuò)誤。 EV_RLSD:CD(Carrier Detect)線(xiàn)路信號(hào)發(fā)生變化。 EV_RXFLAG:使用SetCommState()函數(shù)設(shè)置的DCB結(jié)構(gòu)中的等待字符已被傳入輸入緩沖區(qū)中。還有,串口因?yàn)槭荌/O操作,可能會(huì)產(chǎn)生錯(cuò)誤,這時(shí)候需要用SetCommTimeouts()設(shè)置超時(shí)限制,以避免阻塞現(xiàn)象。SetCommTimeouts()BOOL SetCommTimeouts( hCommDev, lpctmo );Lpctmo指向包含新的超時(shí)參數(shù)的COMMTIMEOUTS結(jié)構(gòu)。DWORD ReadTotalTimeoutMultiplier。DWORD WriteTotalTimeoutMultiplier。}COMMTIMEOUTS, LPCOMMTIMEOUTS。在ReadFile操作其間,收到第一個(gè)字符時(shí)開(kāi)始計(jì)算時(shí)間。0值表示不用間隔限時(shí)。ReadTotalTimeoutMultiplier:以毫秒為單位指定一個(gè)乘數(shù),該乘數(shù)用來(lái)計(jì)算讀操作的總限時(shí)時(shí)間。ReadTotalTimeoutConstant:以毫秒為單位指定一個(gè)常數(shù),用于計(jì)算讀操作的總限時(shí)時(shí)間。ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant成員的值為0表示讀操作不使用限時(shí)時(shí)間。舉例:COMMTIMEOUTS timeouts。 =MAXDWORD。 =0。 =0。 =50。 =2000。 SetCommTimeouts(m_hCom, amp。 這里將ReadIntervalTimeout設(shè)置為最大字節(jié)數(shù),.ReadTotalTimeoutConstant和ReadTotalTimeoutMultiplier都設(shè)置為0,表示不設(shè)置讀操作超時(shí),也就是說(shuō)讀操作瞬間完成,不進(jìn)行
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1