串口vc編程步驟及程序

串口vc編程步驟及程序

ID:34430282

大?。?9.92 KB

頁(yè)數(shù):13頁(yè)

時(shí)間:2019-03-06

串口vc編程步驟及程序_第1頁(yè)
串口vc編程步驟及程序_第2頁(yè)
串口vc編程步驟及程序_第3頁(yè)
串口vc編程步驟及程序_第4頁(yè)
串口vc編程步驟及程序_第5頁(yè)
資源描述:

《串口vc編程步驟及程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、1.添加C++類CCESeries下面是CCESeries.h文件的內(nèi)容:#pragmaonce//定義串口接收數(shù)據(jù)函數(shù)類型//這是一個(gè)回調(diào)函數(shù),執(zhí)行該函數(shù)時(shí),表示串口接收到了數(shù)據(jù)。typedefvoid(CALLBACK*ONSERIESREAD)(void*pOwner/*父對(duì)象指針*/,BYTE*buf/*接收到的緩沖區(qū)*/,DWORDdwBufLen/*接收到的緩沖區(qū)長(zhǎng)度*/);classCCESeries{public:CCESeries(void);//CCESeries類的構(gòu)造函數(shù)~CCESeries(void);//CCESeries類的析構(gòu)

2、函數(shù)public://打開(kāi)串口BOOLOpenPort(void*pOwner,/*指向父指針*/UINTportNo=1,/*串口號(hào)*/UINTbaud=9600,/*波特率*/UINTparity=NOPARITY,/*奇偶校驗(yàn)*/UINTdatabits=8,/*數(shù)據(jù)位*/UINTstopbits=0/*停止位*/);//關(guān)閉串口voidClosePort();//同步寫(xiě)入數(shù)據(jù)BOOLWriteSyncPort(constBYTE*buf,DWORDbufLen);//設(shè)置串口讀取、寫(xiě)入超時(shí)BOOLSetSeriesTimeouts(COMMTIMEO

3、UTSCommTimeOuts);//得到串口是否打開(kāi)BOOLGetComOpened();private://串口讀線程函數(shù),該函數(shù)被定義成私有靜態(tài)。staticDWORDWINAPIReadThreadFunc(LPVOIDlparam);private://關(guān)閉讀線程,當(dāng)使用完串口后,便調(diào)用這個(gè)函數(shù)退出串口數(shù)據(jù)接收線程。voidCloseReadThread();private://已打開(kāi)的串口句柄//HANDLEm_hComm;//讀線程句柄HANDLEm_hReadThread;//讀線程ID標(biāo)識(shí)DWORDm_dwReadThreadID;//讀線

4、程退出事件HANDLEm_hReadCloseEvent;BOOLm_bOpened;//串口是否打開(kāi)void*m_pOwner;//指定父對(duì)象指針public:ONSERIESREADm_OnSeriesRead;//串口讀取回調(diào)函數(shù)HANDLEm_hComm;};2.下面是CCESeries.cpp文件的內(nèi)容:#include"StdAfx.h"#include"CESeries.h"http://構(gòu)造函數(shù),將m_hComm初始化為無(wú)效的句柄CCESeries::CCESeries(){//初始化內(nèi)部變量m_hComm=INVALID_HANDLE_VALUE;m

5、_OnSeriesRead=NULL;m_bOpened=0;}//析構(gòu)函數(shù),檢測(cè)如果串口是打開(kāi)的,則關(guān)閉串口CCESeries::~CCESeries(){if(m_bOpened){//關(guān)閉串口ClosePort();}}//串口讀線程函數(shù),該線程用于異步接收串口數(shù)據(jù)。大家應(yīng)仔細(xì)理解該線程的具體實(shí)現(xiàn)過(guò)程,//該線程通過(guò)循環(huán)調(diào)用WaitCommEvent函數(shù)來(lái)檢測(cè)串口狀態(tài),當(dāng)發(fā)現(xiàn)有數(shù)據(jù)時(shí),調(diào)用//ReadFile函數(shù)讀取數(shù)據(jù),并觸發(fā)回調(diào)函數(shù),由此實(shí)現(xiàn)串口數(shù)據(jù)的實(shí)時(shí)異步讀取。DWORDCCESeries::ReadThreadFunc(LPVOIDlpara

6、m){CCESeries*ceSeries=(CCESeries*)lparam;DWORDevtMask;BYTE*readBuf=NULL;//讀取的字節(jié)DWORDactualReadLen=0;//實(shí)際讀取的字節(jié)數(shù)DWORDwillReadLen;DWORDdwReadErrors;COMSTATcmState;//清空緩沖,并檢查串口是否打開(kāi)。ASSERT(ceSeries->m_hComm!=INVALID_HANDLE_VALUE);//清空串口PurgeComm(ceSeries->m_hComm,PURGE_RXCLEAR

7、PURGE_TXC

8、LEAR);SetCommMask(ceSeries->m_hComm,EV_RXCHAR

9、EV_CTS

10、EV_DSR);while(TRUE){if(WaitCommEvent(ceSeries->m_hComm,&evtMask,0)){SetCommMask(ceSeries->m_hComm,EV_RXCHAR

11、EV_CTS

12、EV_DSR);//表示串口收到字符if(evtMask&EV_RXCHAR){ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);willReadLen=cmSta

13、te.cbInQue;if(willReadLen<

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。