串口通信详解.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
串口通信详解.ppt

实验一 串口通信 网络实验室 2014.10.15 基本概念 串口是计算机上一种非常通用的设备通信协议。RS-232是最常用的串口连接标准,基于RS-232的连接器有三种,分别为DB-9、DB-15、DB-25。大多数计算机包含两个基于DB-9的串口,一公一母。 串口按位(bit)发送和接收数据。串行端口的本质功能是作为CPU和串行设备之间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位;而在接收数据时,串行的位又被转换回字节数据。 利用9孔双母头串口线+MSComm控件编程实现双PC机串口通信 实验模型 串行通信数据格式 异步通讯双方没有同步信号,正确的收发依靠双方设置相同的波特率以及起止式异步协议。波特率是指每秒传送的二进制位数,单位是bps。一帧数据的结尾是高电平的空闲位,下一帧数据的开始是低电平的起始位。开始通信时,信号线为空闲即逻辑1,当检测到信号由1到0的跳变时,则认为这是起始位,接收方开始接受数据。 要使得通信双方能够正确的收发数据,就要匹配双方的串口参数,主要有:串口号、波特率、数据位、校验位、停止位等。 实验步骤 设置两个按钮的ID和标题: 在对话框中右击鼠标,选择类导向,在第二个选项卡中添加成员变量。将五个控件依次加入成员变量中,并修改名称。 最终各成员变量的ID、名称和类型如下表: MSComm控件 MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem),还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。 控件的主要属性和事件 Settings属性:设置串口的波特率 ,校验位,数据位,停止位 Out/InBufferSize 属性:发送/接收缓冲区的大小 InputMode属性:串口接收数据的模式 RThreshold属性:设置接受数据时产生OnComm 事件的阈值 PortOpen属性:设置端口的打开与关闭 In/Output属性:保存接受/发送的数据 OnComm事件:读缓冲区中的数据并显示 打开按钮函数OnBtnOpen() void CCommTestDlg::OnBtnOpen() { if(m_Comm1.GetPortOpen()) m_Comm1.SetPortOpen(FALSE);//关闭串口 m_Comm1.SetCommPort(1); //选择com1口 m_Comm1.SetInBufferSize(1024); //设置输入缓冲区的大小,单位是字节 m_Comm1.SetOutBufferSize(1024); //设置输出缓冲区的大小,单位是字节 m_Comm1.SetSettings("9600,n,8,1"); //设置串口参数:波特率9600,无校验位,8个数据位,1个停止位 m_Comm1.SetInputMode(1); //“1”表示以二进制方式检取数据,“0”表示以文本方式检取数据 m_Comm1.SetRThreshold(1); //“1”表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_Comm1.SetInputLen(0); //设置当前接收区数据长度为0 if( !m_Comm1.GetPortOpen()) m_Comm1.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannot open serial port");//报错 m_Comm1.GetInput();//先预读缓冲区以清除残留数据 UpdateData(false); } 发送按钮函数OnBtnSend() void CCommTestDlg::OnBtnSend() { UpdateData(TRUE); //读取编辑框内容 m_Comm1.SetOutput(COleVariant(m_EditTxData));//发送数据 } 接收数据事件函数 void CCommTestDlg::OnOnCommMscomm1() { VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; CString strtemp; if(m_Comm1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 {

文档评论(0)

三沙市的姑娘 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档