串口vc编程步骤及程序

串口vc编程步骤及程序

ID:34430282

大小:29.92 KB

页数:13页

时间:2019-03-06

串口vc编程步骤及程序_第1页
串口vc编程步骤及程序_第2页
串口vc编程步骤及程序_第3页
串口vc编程步骤及程序_第4页
串口vc编程步骤及程序_第5页
资源描述:

《串口vc编程步骤及程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1.添加C++类CCESeries下面是CCESeries.h文件的内容:#pragmaonce//定义串口接收数据函数类型//这是一个回调函数,执行该函数时,表示串口接收到了数据。typedefvoid(CALLBACK*ONSERIESREAD)(void*pOwner/*父对象指针*/,BYTE*buf/*接收到的缓冲区*/,DWORDdwBufLen/*接收到的缓冲区长度*/);classCCESeries{public:CCESeries(void);//CCESeries类的构造函数~CCESeries(void);//CCESeries类的析构

2、函数public://打开串口BOOLOpenPort(void*pOwner,/*指向父指针*/UINTportNo=1,/*串口号*/UINTbaud=9600,/*波特率*/UINTparity=NOPARITY,/*奇偶校验*/UINTdatabits=8,/*数据位*/UINTstopbits=0/*停止位*/);//关闭串口voidClosePort();//同步写入数据BOOLWriteSyncPort(constBYTE*buf,DWORDbufLen);//设置串口读取、写入超时BOOLSetSeriesTimeouts(COMMTIMEO

3、UTSCommTimeOuts);//得到串口是否打开BOOLGetComOpened();private://串口读线程函数,该函数被定义成私有静态。staticDWORDWINAPIReadThreadFunc(LPVOIDlparam);private://关闭读线程,当使用完串口后,便调用这个函数退出串口数据接收线程。voidCloseReadThread();private://已打开的串口句柄//HANDLEm_hComm;//读线程句柄HANDLEm_hReadThread;//读线程ID标识DWORDm_dwReadThreadID;//读线

4、程退出事件HANDLEm_hReadCloseEvent;BOOLm_bOpened;//串口是否打开void*m_pOwner;//指定父对象指针public:ONSERIESREADm_OnSeriesRead;//串口读取回调函数HANDLEm_hComm;};2.下面是CCESeries.cpp文件的内容:#include"StdAfx.h"#include"CESeries.h"//构造函数,将m_hComm初始化为无效的句柄CCESeries::CCESeries(){//初始化内部变量m_hComm=INVALID_HANDLE_VALUE;m

5、_OnSeriesRead=NULL;m_bOpened=0;}//析构函数,检测如果串口是打开的,则关闭串口CCESeries::~CCESeries(){if(m_bOpened){//关闭串口ClosePort();}}//串口读线程函数,该线程用于异步接收串口数据。大家应仔细理解该线程的具体实现过程,//该线程通过循环调用WaitCommEvent函数来检测串口状态,当发现有数据时,调用//ReadFile函数读取数据,并触发回调函数,由此实现串口数据的实时异步读取。DWORDCCESeries::ReadThreadFunc(LPVOIDlpara

6、m){CCESeries*ceSeries=(CCESeries*)lparam;DWORDevtMask;BYTE*readBuf=NULL;//读取的字节DWORDactualReadLen=0;//实际读取的字节数DWORDwillReadLen;DWORDdwReadErrors;COMSTATcmState;//清空缓冲,并检查串口是否打开。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<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。