欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《串口通信》PPT课件.ppt

    • 资源ID:5457000       资源大小:444.50KB        全文页数:62页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《串口通信》PPT课件.ppt

    第三讲 串口通信,2023/7/9,通信软件设计,第2页,主要内容,1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程,2023/7/9,通信软件设计,第3页,1.串行通信的基本概念,计算机系统中两个功能模块之间的信息交换有两种方式:并行通信与串行通信。串行通信:数据通过一根数据线进行发送和接收,其特征是把各个二进制位连成串,一位一位地传送。并行通信:数据的各位通过若干根数据线同时进行发送和接收。,2023/7/9,通信软件设计,第4页,1.1 并行通信,并行通信:在一些联络信号的控制下,一次将8位,16位或32位数据同时进行传送。并行通信中传输线数量没有限制,除了数据线外还应有通信联络控制线。完成并行通信的接口电路称为并行接口。优点:通信速率高,适用于近距离高速通信场合,如微机系统中CPU与存储器、I/O端口之间。缺点:数据线多,联络控制线也多,需要定时同步,通信成本高。随着通信距离的增加,干扰严重,通信质量下降。,2023/7/9,通信软件设计,第5页,1.2 串行通信,串行通信:一条信息的各位数据被逐位按顺序传送。数据的各位按照时间顺序依次传送,最少只需一根传输线即可完成,如8位数据分8次传送。发送方需要将数据按二进制位进行分解,一位、一位地分时经过单条数据线传送。接收方需要一位一位地从单条数据线上接收数据,并且将它们重新组装成一个数据。完成串行通信的接口电路称为串行接口。优点:所需数据线少,通信成本低,传输距离远,串行通讯的距离可以从几米到几千米。如交换机、路由器配置线,GPS接收机接口、电子地图接口(Winsock、网线传数据)。缺点:速度较慢。,2023/7/9,通信软件设计,第6页,1.3 串行通信VS并行通信,从理论上来说,并行通信的速率更高。从应用上看,无论从通信速度、造价还是通信质量上来看,现今的串行传输方式都比并行传输方式更胜一筹。例如:USB取代IEEE 1284,SATA取代PATA,PCI Express取代PCI。串行通信之所以被广泛采用,一个主要原因是可以在现有的电话网络上进行信息的远距离传输,只需增加Modem,便可以在电话网络上实现远程通信。并行传输技术遭遇发展困境。,2023/7/9,通信软件设计,第7页,主要内容,1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程,2023/7/9,通信软件设计,第8页,2.1 串行通信协议,通信协议:指通信双方的一种约定。(在串行通信中,一根传输线上既传输数据信息又传送控制联络信息,所以需要一系列约定来识别信息流中,哪一部分是联络信号,哪一部分是数据信号。)在约定中对数据格式、同步方式、传送速度、传送步骤、检错方式以及控制字符作出统一的规定,通信双方必须共同遵守。串行通信协议中,需要解决以下问题:双方约定的发送与接收速率(波特率,即位/秒);约定采用的数据格式(帧格式);接收方怎样知道一批数据的开始、结束(即帧同步问题);接收方怎样从数据流中采样每位数据(位同步);接收方怎样判断接收数据的正确性(数据校验),如何处理收发错误;解决这些问题的方法大体有同步通信与异步通信两种。,2023/7/9,通信软件设计,第9页,异步通信以字符为单位传送数据。为了解决帧同步,每个字符都附加了一些控制信息,由4部分组成:1位起始位(低电平)、58位数据位、1位奇偶校验位、12位停止位(高电平)。异步通信的通信中两个字符的时间间隔是不固定的,而在同一字符中两个相邻位代码间的间隔是固定的。,2.2 异步通信,2023/7/9,通信软件设计,第10页,只要接收方检测到数据线上出现了由高电平向低电平的跳变,并且低电平能持续一段时间,就表明已经接收到一帧数据的开始。这时接收方就可以按照接收时钟从数据线上采样数据,直到接收到了停止位,表明接收完一帧数据。接收方还可以通过奇偶校验位判断数据传送过程中是否出现错误。,2.2 异步通信,奇偶校验在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。,2023/7/9,通信软件设计,第11页,异步传送控制比较简单,对发送与接收时钟要求不很严格(发送和接收时钟可以不用同一个,所以不必传送时钟信号),不会造成错误累积,但是由于每个数据在传送时都要附加控制信息,约有20%的冗余。传送速率并不高,为509600波特之间。由于异步通信每次发送一个字符都加起始位及停止位,使其通信效率比较低,因此异步通信一般用在速率比较慢的场合。异步串行接口特别适合于使用普通电话线进行远距离数据通信。,2.2 异步通信,2023/7/9,通信软件设计,第12页,同步通信以数据块为单位传送数据,为了解决帧同步,在每一批数据流之前,附加同步信息(12个同步字符),最后以校验字符结束。如果在数据传送过程中,发生数据断流(即发送方没有数据可发送)应以同步字符填充。接收方检测到协议要求的12个同步字符后,就可以认为双方已经取得一致,之后就可以在严格的时钟控制下采样数据线接收数据。同步通信对双方的时钟要求很严格,并且容易造成错误累积。,2.3 同步通信,2023/7/9,通信软件设计,第13页,同步通信时发送时钟和接收时钟必须用同一个时钟信号以减少错误累积,所以,在发送数据的同时还需要将发送时钟信号发送给接收方作为接收时钟。同步通信可以根据校验字符判断所接收的一批字符是否在传送过程中出现错误。同步通信的传送速率较高(通常其传送速率为50几百千波特)。在高速传送时,一般应采用同步协议。,2.3 同步通信,2023/7/9,通信软件设计,第14页,2.4 串行通信传输方式,串行通信的过程是将通信双方传输的数据序列变成电信号,在选定的通信线路上完成传递。通常,将通信传输方式分为信号传输方式和线路传输方式两种。信号传输方式是指按信号原样传输的基波传输或利用原信号调制成高频载波的载波传输。在近距离传输时,广泛使用的是按信号原样传输的基波传输方式。如RS-232,RS-485等通信方式。这种方式实现简单,但对通信距离有一定的限制。在远距离传输时,通常需要使用Modem。通过Modem,可以将原信号调制成为高频的模拟信号,然后通过电话网络,进行远距离传输。,2023/7/9,通信软件设计,第15页,2.4 串行通信传输方式,线路传输方式是指通信双方设备之间传送数据时,数据流的方向及对线路的使用方式,包括单工、半双工、全双工和多工方式传输。单工方式 在传输线路上,数据只能按一个固定的方向传输。这种方式用途较窄,仅适用于一些简单的单向通信或数据传输的场合。半双工方式 当使用同一根传输线既作为输入又作为输出时,虽然数据可以在两个方向上传送,但通信双方不能同时收发数据。全双工方式 当数据的发送和接收分别由两根不同的传输线传输时,通信双方都能在同一时刻进行发送和接收操作。特别适用于那些不能有时间延迟的交互式应用系统。多工方式 使用复用技术,将一个信道划分为若干个频带或时间片,从而使多路信号同时共享信道。使用复用器和集中器可以降低成本,提高传输效率。,2023/7/9,通信软件设计,第16页,2.5 数据纠错和检错,由于突发性干扰(电气干扰、天气干扰等)引起传输信号的误码,这将直接影响通信系统的可靠性。将如何发现传输中的错误叫做检错。当发现错误后,如何消除和纠正错误叫做纠错。在基本通信规程中,一般采用奇偶校验检错,以反馈重发方式纠错。在高级通信规程中,一般采用循环冗余校验CRC检错,以自动纠错方式纠错。要减小误码率,提高传输质量,首先,改善传输通道的电气特性,使误码率达到要求。其次,采用检错、纠错技术。,2023/7/9,通信软件设计,第17页,2.6 传输速率与距离,传输速率和距离是衡量串行通信的两个重要方面。波特率在并行通信中,传输速率以每秒传送的字节数(B/s)来表示。在串行通信中,以每秒传送的位数(bit/s)来表示。此时,可以使用波特率来表示数据传输的速率,即1波特=1bit/s。常用的标准波特率是110,300,1200,2400,4800,9600,19200等,波特率越高,传送速度越快。发送接收时钟在串行通信中,(二进制数据是以数字信号波形的形式出现的),连续的数字波形的定时发送和接收是在发送/接收时钟的控制下进行的。在发送数据时,发送器在发送时钟的有效沿(下降沿)作用下将移位寄存器的数据按位移位串行输出。在接收数据时,接收器在接收时钟的有效沿(上升沿)作用下对接收数据按位采样,并按位串行移入移位寄存器。发送/接收时钟的快慢将直接影响通信设备的发送/接收数据的速度。,2023/7/9,通信软件设计,第18页,2.6 传输速率与距离,传输距离与传输速率的关系串行接口或终端直接传送串行信息位流的最大距离与传送速率及传输线的电器特性有关传输距离随着传输速率的增加而减少。在实际应用中,对于远距离传送,一般都需要加入Modem。,2023/7/9,通信软件设计,第19页,主要内容,1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程,2023/7/9,通信软件设计,第20页,3.串行接口标准,(1)RS-232C标准(2)RS-423A,422A,485标准(3)USB标准RS-232C标准(协议)的全称是EIA-RS-232C标准,定义是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。目前广泛地应用于计算机和终端或外设之间的近距离连接。,如何区别DTE与DCEDCE一方提供时钟,DTE不提供时钟,但它依靠DCE提供的时钟工作。比如PC机和MODEN之间的连接。PC机就是一个DTE,MODEN是一个DCE,DTE可以从硬件上区别它的接口为针式(公头),DCE的接口为孔式(母头)。,2023/7/9,通信软件设计,第21页,3.1 连接器的机械特性,2023/7/9,通信软件设计,第22页,3.2 串口通信基本接线方法,2023/7/9,通信软件设计,第23页,3.3 状态线,数据设备就绪(Data Set Ready-DSR)有效时(ON)状态,表明数据通信设备就绪,可以接收。数据终端就绪(Data Terminal Ready-DTR)有效时(ON)状态,表明数据终端设备准备就绪,可以接收。这两个信号有时连到电源上,上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。,2023/7/9,通信软件设计,第24页,3.4 联络线,请求发送(Request To Send-RTS)DTE准备向DCE发送数据,DTE使该信号有效(ON状态),通知DCE要发送数据给DCE了。清除发送(Clear To Send-CTS)是对RTS的响应信号。当DCE已准备好接收DTE传来的数据时,使该信号有效,通知DTE开始发送数据。RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高。,2023/7/9,通信软件设计,第25页,3.5 数据线,接收数据(Received Data-RD或RXD)DCE发送数据到DTE。终端接收串行数据。发送数据(Transmitted Data-TD或TXD)DTE发送数据到DCE。终端发送串行数据。,2023/7/9,通信软件设计,第26页,3.6 地线及其余线路,信号地(Signal GND)。载波信号检测(Data Carrier Detection-DCD)通信设备接收到远程载波,用来表示DCE已接通通信链路,告知DTE准备接收数据。振铃指示(Ring Indicator-RI)当DCE收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知DTE,已被呼叫。通信设备通知终端,通信线路接通。,2023/7/9,通信软件设计,第27页,3.7 计算机串口通信常用连接,2023/7/9,通信软件设计,第28页,主要内容,1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程,2023/7/9,通信软件设计,第29页,串行通信程序可以用两种方法实现:使用API 函数利用MSComm控件MSComm控件是微软公司开发的专门用于串行通信的控件。它是高级语言编写的串行通信程序和PC串口之间的桥梁。通过这个桥梁,使得开发串口通信程序的工作变得更容易。开发过程:设置控件的属性,然后添加控件的事件响应代码,就可以使串口按照要求工作。,4.MSComm控件,2023/7/9,通信软件设计,第30页,4.1 MSComm常用属性,CommPort属性设置或获取串口通信使用的串口编号。使用如下两个函数来操作该属性:void SetCommPort(short nNewValue);/设置串口编号 short GetCommPort();/获取正在使用的串口编号其中,参数nNewValue可以设置为116的任何值(默认值为1),对应使用的串口号为COM1COM16。注意:必须在打开端口之前设置CommPort的属性。Settings属性设置或者获取串行通信的通信参数:波特率,奇偶校验类型,数据位数,停止位数等4个参数。使用如下两个函数来操作该属性:void SetSettings(LPCTSTR lpszNewValue);/设置通信参数 CString GetSettings();/获取当前串口通信参数,2023/7/9,通信软件设计,第31页,4.1 MSComm常用属性,其中lpszNewValue的格式如下:BBBB,P,D,SBBBB为波特率。通信线路的通信质量越高,可用的波特率也越高。P为奇偶检验类型,可用的类型如下表所示:,D为数据位数,可以取值为4,5,6,7和8(默认值)S为停止位数,可以取值为1,1.5,2。例如:myComm.SetSettings(“19200”,o,8,1);/设置myComm控件的通信参数,波特率为19200,奇校验,使用8位数据位,1位停止位。注意:通信双方的Settings参数设置必须相同,否则无法通信。,2023/7/9,通信软件设计,第32页,4.1 MSComm常用属性,PortOpen属性打开或者关闭串口。使用如下两个函数来操作该属性:void SetPortOpen(BOOL bNewValue);/打开或关闭串口 BOOL GetPortOpen();/读取端口的状态其中,bNewValue值为TRUE时打开串口,为FALSE时关闭串口。例如:myComm.SetPortOpen(TRUE);/打开串口注意:在使用串口之前应打开串口,退出串口通信时,应该关闭串口,以释放占用的资源。,2023/7/9,通信软件设计,第33页,4.1 MSComm常用属性,Input属性从输入缓冲区获取数据。使用如下函数来操作该属性:VARIANT GetInput();执行该函数后,返回并删除接收缓冲区中的数据。默认情况下读取缓冲区中的全部数据。若InputLen属性值大于0,则读取的字符数量由InputLen属性值决定。例如:VARIANT in1=myComm.GetInput();/将缓冲区中的内容读入in1变量中注意:VARIANT类型为MSComm控件定义的数据类型,需要经过处理才能转换为字符串或数值。,2023/7/9,通信软件设计,第34页,4.1 MSComm常用属性,Output属性向输出缓冲区写入数据,然后通过串口将数据发送出去。使用如下函数来操作该属性:void SetOutput(const VARIANT/将aa字符串内容写入输出缓冲区提示:使用SetOutput()函数写入输出缓冲区的内容必须是VARIANT类型的数据。,2023/7/9,通信软件设计,第35页,4.2 与输入操作有关的属性,InputLen属性当使用GetInput()函数从输入缓冲区中读取数据时,该属性决定了一次读取的字节数。该属性默认为0,则读取整个缓冲区中的内容。使用如下函数来操作该属性:void SetInputLen(short nNewValue);/设置从输入缓冲区中一次读取的字节数 short GetInputLen();/获取当前从输入缓冲区中一次读出的字节数例如:myComm.SetInputLen(0);,2023/7/9,通信软件设计,第36页,4.2 与输入操作有关的属性,InputMode属性设置或获取GetInput()函数从输入缓冲区中读取时的读取方式。使用如下函数来操作该属性:void SetInputMode(long nNewValue);/设置从输入缓冲区中读取数据的方式 long GetInputMode();/获取当前从输入缓冲区中读取数据的方式该属性为0(默认)时,表示以文本方式从输入缓冲区中读取数据;为1时,表示以二进制方式从输入缓冲区中读取数据。例如:myComm.SetInputMode(1);,2023/7/9,通信软件设计,第37页,4.2 与输入操作有关的属性,InBufferSize属性使用该属性来设置或读出输入缓冲区的大小。使用如下函数来操作该属性:void SetInBufferSize(short nNewValue);/设置输入缓冲区的大小 short GetInBufferSize();/获取输入缓冲区的大小该属性值默认值是1024,单位是字节,即输入缓冲区中可缓冲1024字节的数据。,2023/7/9,通信软件设计,第38页,4.2 与输入操作有关的属性,InBufferCount属性设置或获取当前输入缓冲区中可以读取的有效数据个数,以字节为单位。使用如下函数来操作该属性:short GetInBufferCount();/获取当前输入缓冲区中待读取数据的个数 void SetInBufferCount(short nNewValue);/设置当前输入缓冲区中待读取数据的个数使用SetInBufferCount()函数,参数nNewValue设为0时,可将输入缓冲区清空。除0以外的参数都将导致函数出错。,2023/7/9,通信软件设计,第39页,4.2 与输入操作有关的属性,RThreshold属性该属性代表一个阈值。当接收缓冲区中的字符数达到该阈值时,MSComm控件就会产生OnComm事件,并且CommEvent属性会被设置为CommEvReceive,即接收事件。使用如下函数来操作该属性:void SetRThreshold(short nNewValue);/设置接收缓冲区产生OnComm事件的阈值 Short GetRThreshold();/获取接收缓冲区产生OnComm事件的阈值若该值为0(默认值),则不论接收缓冲区中有多少个字符,都不会产生OnComm事件。例如:myComm.SetRThreshold(1);/参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件,2023/7/9,通信软件设计,第40页,4.2 与输入操作有关的属性,CommEvent属性当MSComm控件在运行时发生错误或产生各种事件,它会向应用程序报告错误或事件的类型,该属性值表示这些错误或事件的类型。使用如下函数来操作该属性:short GetCommEvent();/获取当前事件的类型 void SetCommEvent(short nNewValue);/设置事件的类型使用GetCommEvent()函数即可获取当前事件的类型号码。编程时根据该属性值来做出相应的操作。例如:if(myComm.GetCommEvent()=2)/事件值为2表示接收缓冲区内有字符if(myComm.GetCommEvent()=1)/事件值为1表示发送缓冲区内有字符,2023/7/9,通信软件设计,第41页,4.3 与输出操作有关的属性,OutBufferSize属性该属性值指示输出缓冲区的长度,以字节为单位。使用如下函数来操作该属性:void SetOutBufferSize(short nNewValue);/设置输出缓冲区的长度 short GetOutBufferSize();/获取当前输出缓冲区的长度,2023/7/9,通信软件设计,第42页,4.3 与输出操作有关的属性,OutBufferCount属性该属性值反映当前输出缓冲区中的有效可用字符个数。使用如下函数来操作该属性:short GetOutBufferCount();/获取当前输出缓冲区中的字符个数 void SetOutBufferCount(short nNewValue);/设置输出缓冲区中的字符个数注意:SetOutBufferCount(short nNewValue)函数参数为0时,可以清空输出缓冲区。其余的参数值将导致该函数出错。,2023/7/9,通信软件设计,第43页,4.3 与输出操作有关的属性,SThreshold属性该属性值是一个阈值。当发送缓冲区中的字符数达到该阈值时,MSComm控件将产生OnComm事件,CommEvent属性值将被设为CommEvSend。使用如下函数来操作该属性:void SetSThreshold(short nNewValue);/设置发送缓冲区产生OnComm事件的阈值 short GetSThreshold();/获取发送缓冲区产生OnComm事件的阈值如果该阈值设为0(默认值),则发送缓冲区内容的变化不会产生发送事件。,2023/7/9,通信软件设计,第44页,4.4 与传输控制有关的属性,Handshaking属性该属性值用来确定串口通信时是否使用握手及采用何种握手方式。使用如下函数来操作该属性:void SetHandshaking(long nNewValue);/设置握手方式 long GetHandshaking();/获取当前握手方式 根据nNewValue值的不同,握手方式如下所示:例如:myComm.SetHandshaking(3);/设置握手方式,2023/7/9,通信软件设计,第45页,4.4 与传输控制有关的属性,流控制在串行通讯中的作用:解决丢失数据的问题。硬件流控制:硬件流控制常用的有RTS/CTS(请求发送/清除发送)流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。软件流控制:一般通过XON/XOFF来实现软件流控制。如果在串口通信中使用硬件握手信号,那么应该在程序中操作这些硬件握手信号。否则MSComm控件将按照无握手(默认配置)进行操作。,2023/7/9,通信软件设计,第46页,4.4 与传输控制有关的属性,DTREnable属性 DTR(Data Terminal Ready)数据终端准备就绪是反映计算机与其他设备通信时,计算机是否准备就绪的信号,是计算机发送至调制解调器的信号。使用如下函数来操作该属性:void SetDTREnable(BOOL bNewValue);/设置DTR信号是否有效 BOOL GetDTREnable();/获取DTR信号有效性该属性值为TRUE表示计算机准备就绪,等待数据传输,为FALSE表示计算机尚未就绪。,2023/7/9,通信软件设计,第47页,4.4 与传输控制有关的属性,RTSEnable属性RTS(Request To Send)表示计算机向其他设备发出的请求发送数据的信号,一般是计算机发送至调制解调器的信号。使用如下函数来操作该属性:void SetRTSEnable(BOOL bNewValue);/设置RTS信号是否有效 BOOL GetRTSEnable();/获取RTS信号的有效性该属性值为TRUE表示计算机向其他设备发出数据发送请求信号,为FALSE表示未发出请求发送信号。,2023/7/9,通信软件设计,第48页,4.4 与传输控制有关的属性,DSRHolding属性DSR(Data Set Ready)数据设备就绪是反映数据设备是否准备好的信号,是由调制解调器发送到相连计算机,指示做好操作准备。使用如下函数来操作该属性:void SetDSRHolding(BOOL bNewValue);/设置DSR信号是否有效(不可用)BOOL GetDSRHolding();/获取DSR信号的有效性当数据设备准备就绪,该属性值为FALSE,否则为TRUE。,2023/7/9,通信软件设计,第49页,4.4 与传输控制有关的属性,CTSHolding属性CTS(Clear To Send)清除发送是反映计算机向与其通信的设备发出RTS请求发送信号后,通信设备对计算机的响应信号。使用如下函数来操作该属性:BOOL GetCTSHolding();/获取CTS信号的有效性 void SetCTSHolding(BOOL bNewValue);/设置CTS信号是否有效(不可用)若外部通信设备允许计算机发送数据,该属性值为TRUE,否则为FALSE。,2023/7/9,通信软件设计,第50页,4.4 与传输控制有关的属性,CDHolding属性CD(Carrier Detect)载波检测反映与计算机通信的设备线路上是否有载波,它是从调制解调器发送到相连计算机的一个信号,指示调制解调器正在联机,通过查询CD线的状态确定当前是否有传输。使用如下函数来操作该属性:BOOL GetCDHolding();/获取当前载波检测的有效性 void SetCDHolding(BOOL bNewValue);/设置载波检测是否有效(不可用)若通信线路上存在载波,该属性值为FALSE,否则为TRUE。,2023/7/9,通信软件设计,第51页,4.5 OnComm事件,MSComm控件只有一个事件,即OnComm事件。无论何时当CommEvent属性的值变化时,就会激发OnComm事件,这表明控件新发生了一个通信事件或一个错误。根据CommEvent属性值可以判断出发生了什么具体事件。通常OnComm事件的响应代码段内使用Switch函数根据CommEvent值来分别执行各种情况下的处理程序。,2023/7/9,通信软件设计,第52页,主要内容,1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程,2023/7/9,通信软件设计,第53页,5.使用MSComm控件编程,(1)创建工程打开VC+6.0,建立一个基于对话框的MFC应用程序SCommTest,并创建对话框界面如下,修改控件属性,并通过ClassWizard添加控制变量。,2023/7/9,通信软件设计,第54页,5.使用MSComm控件编程,向主对话框中添加两个编辑框,一个用于接收显示数据 ID 为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID 为IDC_EDIT_TXDATA,将编辑框的“Properties”“Styles”中把 Miltiline和 Vertical Scroll 属性选上。,2023/7/9,通信软件设计,第55页,5.使用MSComm控件编程,再打开“ClassWizard”“Member Viariables”选项卡,选择CSCommTestDlg类,为 IDC_EDIT_RXDATA 添加 CString 变量m_strRXData,为 IDC_EDIT_TXDATA 添加 CString 变量m_strTXData。m_strRXData 和 m_strTXData 分别放入接收和发送的字符数据。,2023/7/9,通信软件设计,第56页,5.使用MSComm控件编程,(2)插入MSComm控件选择“Project”“Add To Project”“Components and Controls”“Registered ActiveX Controls”“Microsoft Communications Control,version 6.0”,单击Insert按钮加入工程。把MSComm控件拖入界面,可修改其属性。打开“ClassWizard”“Member Viariables”选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加CMSComm类型的控制变量m_ctrlComm注意:程序运行后,这个图标是看不到的。,2023/7/9,通信软件设计,第57页,5.使用MSComm控件编程,(3)添加串口事件消息处理函数OnComm()打开“ClassWizard”“Message Maps”,选择类 CSCommTestDlg,选择 IDC_MSCOMM1,点击消息OnComm,单击 Add Function修改函数名称为OnComm,点击OK按钮。这个函数是用来处理串口消息事件的。每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,该函数就会执行,在OnComm()函数加入相应的处理代码就能实现想要的功能了。,2023/7/9,通信软件设计,第58页,5.使用MSComm控件编程,在OnComm()函数中加入如下代码:VARIANT variant_inp;/用于存放从缓冲区获取的数据 COleSafeArray safearray_inp;/用于处理任意类型和维数的数组类 LONG len,k;BYTE rxdata2048;/设置BYTE数组 An 8-bit integerthat is not signed.CString strtemp;if(m_ctrlComm.GetCommEvent()=2)/事件值为2表示接收缓冲区内有字符 variant_inp=m_ctrlComm.GetInput();/读缓冲区 safearray_inp=variant_inp;/VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize();/返回一个一维的COleSafeArray对象中的元素个数,即得到有效数据长度 for(k=0;klen;k+)safearray_inp.GetElement(/更新编辑框内容,typedef unsigned long DWORD;typedef unsigned char BYTE;typedef unsigned short WORD;,Format指定输出格式,后面跟要输出的变量格式:%c 单个字符%d 十进制整数%f 十进制浮点数%o 八进制数%s 字符串%u 无符号十进制数%x 十六进制数%输出百分号%e 以指数形式输出实数%g 选用f与e格式中输出宽度较小的格式,不输出0%ld 输入输出long型数据%lf 输入输出double型数据%m 数据输出宽度为m%.n 输出小数位数为n,2023/7/9,通信软件设计,第59页,5.使用MSComm控件编程,(4)打开串口和设置串口参数在“打开串口”按钮的处理函数中添加如下代码:if(m_ctrlComm.GetPortOpen()m_ctrlComm.SetPortOpen(FALSE);m_ctrlComm.SetCommPort(1);/选择com1if(!m_ctrlComm.GetPortOpen()m_ctrlComm.SetPortOpen(TRUE);/打开串口elseAfxMessageBox(cannot open serial port);m_ctrlComm.SetSettings(9600,n,8,1);/波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputMode(1);/1表示以二进制方式读取数据m_ctrlComm.SetRThreshold(1);/参数1表示每当串口接收缓冲区中有多于或等于1个/字符时将引发一个接收数据的OnComm事件m_ctrlComm.SetInputLen(0);/设置当前接收区数据长度为0m_ctrlComm.GetInput();/先预读缓冲区以清除残留数据m_ctrlComm.SetHandshaking(0);/设置握手方式,2023/7/9,通信软件设计,第60页,5.使用MSComm控件编程,(5)发送数据在“发送”按钮的处理函数中添加如下代码:UpdateData(TRUE);/刷新数据m_ctrlComm.SetOutput(COleVariant(m_strTXData);/发送数据,2023/7/9,通信软件设计,第61页,5.使用MSComm控件编程,(6)关闭串口在“关闭串口”按钮的处理函数中添加如下代码:if(m_ctrlComm.GetPortOpen()m_ctrlComm.SetPortOpen(FALSE);,2023/7/9,通信软件设计,第62页,实验要求,上机内容按照示例,编写串口通信程序。给程序添加自动发送功能,每隔500ms自动发送指定内容。思考题将SetInputLen()的参数分别设为0,1,2,设置断点,观察是如何从接收缓冲区读取数据的。将SetRThreshold()的参数分别设为0,1,2,设置断点,观察触发接收事件的条件。将SetSThreshold()的参数分别设为0,1,设置断点,观察是数据能否发送出去,是否触发OnComm事件。,

    注意事项

    本文(《串口通信》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开