第2章 串行接口通信.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 串行接口通信.ppt

串口通讯实例 1、基于两台PC,使用VCBCBDelphiVB is ok! 2、对于单片机和PC,使用QT等。 PC时间串口通讯 1、建立串口通信类 BOOL InitComm file://串口初始化,这里只给出关键步骤的代码,下同 { HANDLE m_hComm; COMMTIMEOUTS m_CommTimeouts; m_hComm = CreateFile(quot;COM1quot;, //在这里只使用串口1 GENERIC_READ | GENERIC_WRITE, //打开类型为可读写 0, //以独占模式打开串口 NULL, //不设置安全属性 OPEN_EXISTING, FILE_FLAG_OVERLAPPED, file://重叠I/O方式 0); if (m_hComm == INVALID_HANDLE_VALUE) //打开不成功 { return FALSE; } m_CommTimeouts.ReadIntervalTimeout = 1000; //进行超时设置,读者应根据自己的实际需要设置 m_CommTimeouts.ReadTotalTimeoutMultiplier = 500; m_CommTimeouts.ReadTotalTimeoutConstant = 5000; m_CommTimeouts.WriteTotalTimeoutMultiplier = 500; m_CommTimeouts.WriteTotalTimeoutConstant = 5000; if (!SetCommTimeouts(m_hComm, amp;m_CommTimeouts)) { CloseHandle(m_hComm); return FALSE; } PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT); //清缓冲 return TRUE; 2、监控线程处理通信事件 UINT CommThread(LPVOID pParam) //用于监控串口的工作者线程 {  BOOL bResult = FALSE;  if (m_hComm) //查看端口是否打开,这里m_hComm同上,在这里做了简化    PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT)   for (;;)//只要线程运行,就处于监视端口行为的无限循环   {    bResult = WaitCommEvent(m_hComm, Event, m_ov);     file://m_ov是OVERLAPPED类型的成员变量    if (!bResult)     { //进行出错处理}    else    {     Event = WaitForMultipleObjects(4, m_hEvent, FALSE, INFINITE);      file://无限等待设定的事件发生,数组m_hEvent根据需要定义了须响应的接收,发送,关闭端口事件和OVERLAPPED类型的hEvent事件     switch (Event)     { file://读写事件的响应处理过程,在此略}     }     return 0;  } } 3、串口初始化 //添加的对串口的初始化语句 if(m_cComm.get_PortOpen()) //如果发现串口本来是打开的,则关闭串口 m_cComm.put_PortOpen(FALSE); m_cComm.put_CommPort(1); //选择COM1端口 m_cComm.put_InputMode(1); //输入方式为二进制方式 m_cComm.put_InBufferSize(1024); //设置输入缓冲区 m_cComm.put_OutBufferSize(512); //设置输出缓冲区 m_cComm.put_Settings(Lquot;9600,n,8,1quot;);//波特率9600,无校验,8个数据位,1个停止位 if(!m_cComm.get_PortOpen()) { m_cComm.put_PortOpen(TRUE); //打开串口 m_cComm.put_RThreshold(1);

文档评论(0)

cai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档