《串口通信》PPT课件

《串口通信》PPT课件

ID:38616300

大小:511.50 KB

页数:62页

时间:2019-06-16

上传者:U-145848
《串口通信》PPT课件_第1页
《串口通信》PPT课件_第2页
《串口通信》PPT课件_第3页
《串口通信》PPT课件_第4页
《串口通信》PPT课件_第5页
资源描述:

《《串口通信》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第三讲串口通信 主要内容1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程8/15/20212通信软件设计 1.串行通信的基本概念计算机系统中两个功能模块之间的信息交换有两种方式:并行通信与串行通信。串行通信:数据通过一根数据线进行发送和接收,其特征是把各个二进制位连成串,一位一位地传送。并行通信:数据的各位通过若干根数据线同时进行发送和接收。8/15/20213通信软件设计 1.1并行通信并行通信:在一些联络信号的控制下,一次将8位,16位或32位数据同时进行传送。并行通信中传输线数量没有限制,除了数据线外还应有通信联络控制线。完成并行通信的接口电路称为并行接口。优点:通信速率高,适用于近距离高速通信场合,如微机系统中CPU与存储器、I/O端口之间。缺点:数据线多,联络控制线也多,需要定时同步,通信成本高。随着通信距离的增加,干扰严重,通信质量下降。8/15/20214通信软件设计 1.2串行通信串行通信:一条信息的各位数据被逐位按顺序传送。数据的各位按照时间顺序依次传送,最少只需一根传输线即可完成,如8位数据分8次传送。发送方需要将数据按二进制位进行分解,一位、一位地分时经过单条数据线传送。接收方需要一位一位地从单条数据线上接收数据,并且将它们重新组装成一个数据。完成串行通信的接口电路称为串行接口。优点:所需数据线少,通信成本低,传输距离远,串行通讯的距离可以从几米到几千米。如交换机、路由器配置线,GPS接收机接口、电子地图接口(Winsock、网线传数据)。缺点:速度较慢。8/15/20215通信软件设计 1.3串行通信VS并行通信从理论上来说,并行通信的速率更高。从应用上看,无论从通信速度、造价还是通信质量上来看,现今的串行传输方式都比并行传输方式更胜一筹。例如:USB取代IEEE1284,SATA取代PATA,PCIExpress取代PCI。串行通信之所以被广泛采用,一个主要原因是可以在现有的电话网络上进行信息的远距离传输,只需增加Modem,便可以在电话网络上实现远程通信。并行传输技术遭遇发展困境。8/15/20216通信软件设计 主要内容1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程8/15/20217通信软件设计 2.1串行通信协议通信协议:指通信双方的一种约定。(在串行通信中,一根传输线上既传输数据信息又传送控制联络信息,所以需要一系列约定来识别信息流中,哪一部分是联络信号,哪一部分是数据信号。)在约定中对数据格式、同步方式、传送速度、传送步骤、检错方式以及控制字符作出统一的规定,通信双方必须共同遵守。串行通信协议中,需要解决以下问题:双方约定的发送与接收速率(波特率,即位/秒);约定采用的数据格式(帧格式);接收方怎样知道一批数据的开始、结束(即帧同步问题);接收方怎样从数据流中采样每位数据(位同步);接收方怎样判断接收数据的正确性(数据校验),如何处理收发错误;解决这些问题的方法大体有同步通信与异步通信两种。8/15/20218通信软件设计 异步通信以字符为单位传送数据。为了解决帧同步,每个字符都附加了一些控制信息,由4部分组成:1位起始位(低电平)、5~8位数据位、1位奇偶校验位、1~2位停止位(高电平)。异步通信的通信中两个字符的时间间隔是不固定的,而在同一字符中两个相邻位代码间的间隔是固定的。2.2异步通信8/15/20219通信软件设计 只要接收方检测到数据线上出现了由高电平向低电平的跳变,并且低电平能持续一段时间,就表明已经接收到一帧数据的开始。这时接收方就可以按照接收时钟从数据线上采样数据,直到接收到了停止位,表明接收完一帧数据。接收方还可以通过奇偶校验位判断数据传送过程中是否出现错误。2.2异步通信奇偶校验在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。8/15/202110通信软件设计 异步传送控制比较简单,对发送与接收时钟要求不很严格(发送和接收时钟可以不用同一个,所以不必传送时钟信号),不会造成错误累积,但是由于每个数据在传送时都要附加控制信息,约有20%的冗余。传送速率并不高,为50~9600波特之间。由于异步通信每次发送一个字符都加起始位及停止位,使其通信效率比较低,因此异步通信一般用在速率比较慢的场合。异步串行接口特别适合于使用普通电话线进行远距离数据通信。2.2异步通信8/15/202111通信软件设计 同步通信以数据块为单位传送数据,为了解决帧同步,在每一批数据流之前,附加同步信息(1~2个同步字符),最后以校验字符结束。如果在数据传送过程中,发生数据断流(即发送方没有数据可发送)应以同步字符填充。接收方检测到协议要求的1~2个同步字符后,就可以认为双方已经取得一致,之后就可以在严格的时钟控制下采样数据线接收数据。同步通信对双方的时钟要求很严格,并且容易造成错误累积。2.3同步通信8/15/202112通信软件设计 同步通信时发送时钟和接收时钟必须用同一个时钟信号以减少错误累积,所以,在发送数据的同时还需要将发送时钟信号发送给接收方作为接收时钟。同步通信可以根据校验字符判断所接收的一批字符是否在传送过程中出现错误。同步通信的传送速率较高(通常其传送速率为50~几百千波特)。在高速传送时,一般应采用同步协议。2.3同步通信8/15/202113通信软件设计 2.4串行通信传输方式串行通信的过程是将通信双方传输的数据序列变成电信号,在选定的通信线路上完成传递。通常,将通信传输方式分为信号传输方式和线路传输方式两种。信号传输方式是指按信号原样传输的基波传输或利用原信号调制成高频载波的载波传输。在近距离传输时,广泛使用的是按信号原样传输的基波传输方式。如RS-232,RS-485等通信方式。这种方式实现简单,但对通信距离有一定的限制。在远距离传输时,通常需要使用Modem。通过Modem,可以将原信号调制成为高频的模拟信号,然后通过电话网络,进行远距离传输。8/15/202114通信软件设计 2.4串行通信传输方式线路传输方式是指通信双方设备之间传送数据时,数据流的方向及对线路的使用方式,包括单工、半双工、全双工和多工方式传输。单工方式在传输线路上,数据只能按一个固定的方向传输。这种方式用途较窄,仅适用于一些简单的单向通信或数据传输的场合。半双工方式当使用同一根传输线既作为输入又作为输出时,虽然数据可以在两个方向上传送,但通信双方不能同时收发数据。全双工方式当数据的发送和接收分别由两根不同的传输线传输时,通信双方都能在同一时刻进行发送和接收操作。特别适用于那些不能有时间延迟的交互式应用系统。多工方式使用复用技术,将一个信道划分为若干个频带或时间片,从而使多路信号同时共享信道。使用复用器和集中器可以降低成本,提高传输效率。8/15/202115通信软件设计 2.5数据纠错和检错由于突发性干扰(电气干扰、天气干扰等)引起传输信号的误码,这将直接影响通信系统的可靠性。将如何发现传输中的错误叫做检错。当发现错误后,如何消除和纠正错误叫做纠错。在基本通信规程中,一般采用奇偶校验检错,以反馈重发方式纠错。在高级通信规程中,一般采用循环冗余校验CRC检错,以自动纠错方式纠错。要减小误码率,提高传输质量,首先,改善传输通道的电气特性,使误码率达到要求。其次,采用检错、纠错技术。8/15/202116通信软件设计 2.6传输速率与距离传输速率和距离是衡量串行通信的两个重要方面。波特率在并行通信中,传输速率以每秒传送的字节数(B/s)来表示。在串行通信中,以每秒传送的位数(bit/s)来表示。此时,可以使用波特率来表示数据传输的速率,即1波特=1bit/s。常用的标准波特率是110,300,1200,2400,4800,9600,19200等,波特率越高,传送速度越快。发送接收时钟在串行通信中,(二进制数据是以数字信号波形的形式出现的),连续的数字波形的定时发送和接收是在发送/接收时钟的控制下进行的。在发送数据时,发送器在发送时钟的有效沿(下降沿)作用下将移位寄存器的数据按位移位串行输出。在接收数据时,接收器在接收时钟的有效沿(上升沿)作用下对接收数据按位采样,并按位串行移入移位寄存器。发送/接收时钟的快慢将直接影响通信设备的发送/接收数据的速度。8/15/202117通信软件设计 2.6传输速率与距离传输距离与传输速率的关系串行接口或终端直接传送串行信息位流的最大距离与传送速率及传输线的电器特性有关传输距离随着传输速率的增加而减少。在实际应用中,对于远距离传送,一般都需要加入Modem。波特率(bps)1号电缆传输距离(英尺)2号电缆传输距离(英尺)1105000300030050003000120030003000240010005004800100025096002502508/15/202118通信软件设计 主要内容1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程8/15/202119通信软件设计 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的接口为孔式(母头)。8/15/202120通信软件设计 3.1连接器的机械特性8/15/202121通信软件设计 3.2串口通信基本接线方法9针串口(DB9)25针串口(DB25)针号功能说明缩写针号功能说明缩写1数据载波检测DCD8数据载波检测DCD2接收数据RXD3接收数据RXD3发送数据TXD2发送数据TXD4数据终端准备DTR20数据终端准备DTR5信号地GND7信号地GND6数据设备准备好DSR6数据准备好DSR7请求发送RTS4请求发送RTS8清除发送CTS5清除发送CTS9振铃指示DELL22振铃指示DELL8/15/202122通信软件设计 3.3状态线数据设备就绪(DataSetReady-DSR)——有效时(ON)状态,表明数据通信设备就绪,可以接收。数据终端就绪(DataTerminalReady-DTR)——有效时(ON)状态,表明数据终端设备准备就绪,可以接收。这两个信号有时连到电源上,上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。8/15/202123通信软件设计 3.4联络线请求发送(RequestToSend-RTS)——DTE准备向DCE发送数据,DTE使该信号有效(ON状态),通知DCE要发送数据给DCE了。清除发送(ClearToSend-CTS)——是对RTS的响应信号。当DCE已准备好接收DTE传来的数据时,使该信号有效,通知DTE开始发送数据。RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高。8/15/202124通信软件设计 3.5数据线接收数据(ReceivedData-RD或RXD)——DCE发送数据到DTE。终端接收串行数据。发送数据(TransmittedData-TD或TXD)——DTE发送数据到DCE。终端发送串行数据。8/15/202125通信软件设计 3.6地线及其余线路信号地(SignalGND)。载波信号检测(DataCarrierDetection-DCD)——通信设备接收到远程载波,用来表示DCE已接通通信链路,告知DTE准备接收数据。振铃指示(RingIndicator-RI)——当DCE收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知DTE,已被呼叫。通信设备通知终端,通信线路接通。8/15/202126通信软件设计 3.7计算机串口通信常用连接最简连接简单连接完全连接8/15/202127通信软件设计 主要内容1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程8/15/202128通信软件设计 串行通信程序可以用两种方法实现:使用API函数利用MSComm控件MSComm控件是微软公司开发的专门用于串行通信的控件。它是高级语言编写的串行通信程序和PC串口之间的桥梁。通过这个桥梁,使得开发串口通信程序的工作变得更容易。开发过程:设置控件的属性,然后添加控件的事件响应代码,就可以使串口按照要求工作。4.MSComm控件8/15/202129通信软件设计 4.1MSComm常用属性CommPort属性设置或获取串口通信使用的串口编号。使用如下两个函数来操作该属性:voidSetCommPort(shortnNewValue);//设置串口编号shortGetCommPort();//获取正在使用的串口编号其中,参数nNewValue可以设置为1—16的任何值(默认值为1),对应使用的串口号为COM1—COM16。注意:必须在打开端口之前设置CommPort的属性。Settings属性设置或者获取串行通信的通信参数:波特率,奇偶校验类型,数据位数,停止位数等4个参数。使用如下两个函数来操作该属性:voidSetSettings(LPCTSTRlpszNewValue);//设置通信参数CStringGetSettings();//获取当前串口通信参数8/15/202130通信软件设计 4.1MSComm常用属性其中lpszNewValue的格式如下:BBBB,P,D,SBBBB为波特率。通信线路的通信质量越高,可用的波特率也越高。P为奇偶检验类型,可用的类型如下表所示:奇偶校验类型含义E偶校验M标记校验N(默认值)无校验O奇校验S空格校验D为数据位数,可以取值为4,5,6,7和8(默认值)S为停止位数,可以取值为1,1.5,2。例如:myComm.SetSettings(“19200”,o,8,1);//设置myComm控件的通信参数,波特率为19200,奇校验,使用8位数据位,1位停止位。注意:通信双方的Settings参数设置必须相同,否则无法通信。8/15/202131通信软件设计 4.1MSComm常用属性PortOpen属性打开或者关闭串口。使用如下两个函数来操作该属性:voidSetPortOpen(BOOLbNewValue);//打开或关闭串口BOOLGetPortOpen();//读取端口的状态其中,bNewValue值为TRUE时打开串口,为FALSE时关闭串口。例如:myComm.SetPortOpen(TRUE);//打开串口注意:在使用串口之前应打开串口,退出串口通信时,应该关闭串口,以释放占用的资源。8/15/202132通信软件设计 4.1MSComm常用属性Input属性从输入缓冲区获取数据。使用如下函数来操作该属性:VARIANTGetInput();执行该函数后,返回并删除接收缓冲区中的数据。默认情况下读取缓冲区中的全部数据。若InputLen属性值大于0,则读取的字符数量由InputLen属性值决定。例如:VARIANTin1=myComm.GetInput();//将缓冲区中的内容读入in1变量中注意:VARIANT类型为MSComm控件定义的数据类型,需要经过处理才能转换为字符串或数值。8/15/202133通信软件设计 4.1MSComm常用属性Output属性向输出缓冲区写入数据,然后通过串口将数据发送出去。使用如下函数来操作该属性:voidSetOutput(constVARIANT&newValue);例如:CStringaa=“atr ”;myComm.SetOutput(COleVariant(aa));//将aa字符串内容写入输出缓冲区提示:使用SetOutput()函数写入输出缓冲区的内容必须是VARIANT类型的数据。8/15/202134通信软件设计 4.2与输入操作有关的属性InputLen属性当使用GetInput()函数从输入缓冲区中读取数据时,该属性决定了一次读取的字节数。该属性默认为0,则读取整个缓冲区中的内容。使用如下函数来操作该属性:voidSetInputLen(shortnNewValue);//设置从输入缓冲区中一次读取的字节数shortGetInputLen();//获取当前从输入缓冲区中一次读出的字节数例如:myComm.SetInputLen(0);8/15/202135通信软件设计 4.2与输入操作有关的属性InputMode属性设置或获取GetInput()函数从输入缓冲区中读取时的读取方式。使用如下函数来操作该属性:voidSetInputMode(longnNewValue);//设置从输入缓冲区中读取数据的方式longGetInputMode();//获取当前从输入缓冲区中读取数据的方式该属性为0(默认)时,表示以文本方式从输入缓冲区中读取数据;为1时,表示以二进制方式从输入缓冲区中读取数据。例如:myComm.SetInputMode(1);8/15/202136通信软件设计 4.2与输入操作有关的属性InBufferSize属性使用该属性来设置或读出输入缓冲区的大小。使用如下函数来操作该属性:voidSetInBufferSize(shortnNewValue);//设置输入缓冲区的大小shortGetInBufferSize();//获取输入缓冲区的大小该属性值默认值是1024,单位是字节,即输入缓冲区中可缓冲1024字节的数据。8/15/202137通信软件设计 4.2与输入操作有关的属性InBufferCount属性设置或获取当前输入缓冲区中可以读取的有效数据个数,以字节为单位。使用如下函数来操作该属性:shortGetInBufferCount();//获取当前输入缓冲区中待读取数据的个数voidSetInBufferCount(shortnNewValue);//设置当前输入缓冲区中待读取数据的个数使用SetInBufferCount()函数,参数nNewValue设为0时,可将输入缓冲区清空。除0以外的参数都将导致函数出错。8/15/202138通信软件设计 4.2与输入操作有关的属性RThreshold属性该属性代表一个阈值。当接收缓冲区中的字符数达到该阈值时,MSComm控件就会产生OnComm事件,并且CommEvent属性会被设置为CommEvReceive,即接收事件。使用如下函数来操作该属性:voidSetRThreshold(shortnNewValue);//设置接收缓冲区产生OnComm事件的阈值ShortGetRThreshold();//获取接收缓冲区产生OnComm事件的阈值若该值为0(默认值),则不论接收缓冲区中有多少个字符,都不会产生OnComm事件。例如:myComm.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件8/15/202139通信软件设计 4.2与输入操作有关的属性CommEvent属性当MSComm控件在运行时发生错误或产生各种事件,它会向应用程序报告错误或事件的类型,该属性值表示这些错误或事件的类型。使用如下函数来操作该属性:shortGetCommEvent();//获取当前事件的类型voidSetCommEvent(shortnNewValue);//设置事件的类型使用GetCommEvent()函数即可获取当前事件的类型号码。编程时根据该属性值来做出相应的操作。例如:if(myComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符if(myComm.GetCommEvent()==1)//事件值为1表示发送缓冲区内有字符8/15/202140通信软件设计 4.3与输出操作有关的属性OutBufferSize属性该属性值指示输出缓冲区的长度,以字节为单位。使用如下函数来操作该属性:voidSetOutBufferSize(shortnNewValue);//设置输出缓冲区的长度shortGetOutBufferSize();//获取当前输出缓冲区的长度8/15/202141通信软件设计 4.3与输出操作有关的属性OutBufferCount属性该属性值反映当前输出缓冲区中的有效可用字符个数。使用如下函数来操作该属性:shortGetOutBufferCount();//获取当前输出缓冲区中的字符个数voidSetOutBufferCount(shortnNewValue);//设置输出缓冲区中的字符个数注意:SetOutBufferCount(shortnNewValue)函数参数为0时,可以清空输出缓冲区。其余的参数值将导致该函数出错。8/15/202142通信软件设计 4.3与输出操作有关的属性SThreshold属性该属性值是一个阈值。当发送缓冲区中的字符数达到该阈值时,MSComm控件将产生OnComm事件,CommEvent属性值将被设为CommEvSend。使用如下函数来操作该属性:voidSetSThreshold(shortnNewValue);//设置发送缓冲区产生OnComm事件的阈值shortGetSThreshold();//获取发送缓冲区产生OnComm事件的阈值如果该阈值设为0(默认值),则发送缓冲区内容的变化不会产生发送事件。8/15/202143通信软件设计 4.4与传输控制有关的属性Handshaking属性该属性值用来确定串口通信时是否使用握手及采用何种握手方式。使用如下函数来操作该属性:voidSetHandshaking(longnNewValue);//设置握手方式longGetHandshaking();//获取当前握手方式根据nNewValue值的不同,握手方式如下所示:例如:myComm.SetHandshaking(3);//设置握手方式nNewValue值握手方式0(默认值)无握手1Xon/Xoff握手2RTS/CTS握手3RTS/CTS和Xon/Xoff握手8/15/202144通信软件设计 4.4与传输控制有关的属性流控制在串行通讯中的作用:解决丢失数据的问题。硬件流控制:硬件流控制常用的有RTS/CTS(请求发送/清除发送)流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。软件流控制:一般通过XON/XOFF来实现软件流控制。如果在串口通信中使用硬件握手信号,那么应该在程序中操作这些硬件握手信号。否则MSComm控件将按照无握手(默认配置)进行操作。8/15/202145通信软件设计 4.4与传输控制有关的属性DTREnable属性DTR(DataTerminalReady)数据终端准备就绪是反映计算机与其他设备通信时,计算机是否准备就绪的信号,是计算机发送至调制解调器的信号。使用如下函数来操作该属性:voidSetDTREnable(BOOLbNewValue);//设置DTR信号是否有效BOOLGetDTREnable();//获取DTR信号有效性该属性值为TRUE表示计算机准备就绪,等待数据传输,为FALSE表示计算机尚未就绪。8/15/202146通信软件设计 4.4与传输控制有关的属性RTSEnable属性RTS(RequestToSend)表示计算机向其他设备发出的请求发送数据的信号,一般是计算机发送至调制解调器的信号。使用如下函数来操作该属性:voidSetRTSEnable(BOOLbNewValue);//设置RTS信号是否有效BOOLGetRTSEnable();//获取RTS信号的有效性该属性值为TRUE表示计算机向其他设备发出数据发送请求信号,为FALSE表示未发出请求发送信号。8/15/202147通信软件设计 4.4与传输控制有关的属性DSRHolding属性DSR(DataSetReady)数据设备就绪是反映数据设备是否准备好的信号,是由调制解调器发送到相连计算机,指示做好操作准备。使用如下函数来操作该属性:voidSetDSRHolding(BOOLbNewValue);//设置DSR信号是否有效(不可用)BOOLGetDSRHolding();//获取DSR信号的有效性当数据设备准备就绪,该属性值为FALSE,否则为TRUE。8/15/202148通信软件设计 4.4与传输控制有关的属性CTSHolding属性CTS(ClearToSend)清除发送是反映计算机向与其通信的设备发出RTS请求发送信号后,通信设备对计算机的响应信号。使用如下函数来操作该属性:BOOLGetCTSHolding();//获取CTS信号的有效性voidSetCTSHolding(BOOLbNewValue);//设置CTS信号是否有效(不可用)若外部通信设备允许计算机发送数据,该属性值为TRUE,否则为FALSE。8/15/202149通信软件设计 4.4与传输控制有关的属性CDHolding属性CD(CarrierDetect)载波检测反映与计算机通信的设备线路上是否有载波,它是从调制解调器发送到相连计算机的一个信号,指示调制解调器正在联机,通过查询CD线的状态确定当前是否有传输。使用如下函数来操作该属性:BOOLGetCDHolding();//获取当前载波检测的有效性voidSetCDHolding(BOOLbNewValue);//设置载波检测是否有效(不可用)若通信线路上存在载波,该属性值为FALSE,否则为TRUE。8/15/202150通信软件设计 4.5OnComm事件MSComm控件只有一个事件,即OnComm事件。无论何时当CommEvent属性的值变化时,就会激发OnComm事件,这表明控件新发生了一个通信事件或一个错误。根据CommEvent属性值可以判断出发生了什么具体事件。通常OnComm事件的响应代码段内使用Switch函数根据CommEvent值来分别执行各种情况下的处理程序。8/15/202151通信软件设计 主要内容1.串行通信的基本概念2.串行通信协议3.串行接口标准4.MSComm控件5.使用MSComm控件编程8/15/202152通信软件设计 5.使用MSComm控件编程(1)创建工程打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest,并创建对话框界面如下,修改控件属性,并通过ClassWizard添加控制变量。8/15/202153通信软件设计 5.使用MSComm控件编程向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,将编辑框的“Properties”→“Styles”中把Miltiline和VerticalScroll属性选上。8/15/202154通信软件设计 5.使用MSComm控件编程再打开“ClassWizard”→“MemberViariables”选项卡,选择CSCommTestDlg类,为IDC_EDIT_RXDATA添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。m_strRXData和m_strTXData分别放入接收和发送的字符数据。8/15/202155通信软件设计 5.使用MSComm控件编程(2)插入MSComm控件选择“Project”→“AddToProject”→“ComponentsandControls…”→“RegisteredActiveXControls”→“MicrosoftCommunicationsControl,version6.0”,单击Insert按钮加入工程。把MSComm控件拖入界面,可修改其属性。打开“ClassWizard”→“MemberViariables”选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加CMSComm类型的控制变量m_ctrlComm注意:程序运行后,这个图标是看不到的。8/15/202156通信软件设计 5.使用MSComm控件编程(3)添加串口事件消息处理函数OnComm()打开“ClassWizard”→“MessageMaps”,选择类CSCommTestDlg,选择IDC_MSCOMM1,点击消息OnComm,单击AddFunction…修改函数名称为OnComm,点击OK按钮。这个函数是用来处理串口消息事件的。每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,该函数就会执行,在OnComm()函数加入相应的处理代码就能实现想要的功能了。8/15/202157通信软件设计 5.使用MSComm控件编程在OnComm()函数中加入如下代码:VARIANTvariant_inp;//用于存放从缓冲区获取的数据COleSafeArraysafearray_inp;//用于处理任意类型和维数的数组类LONGlen,k;    BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned.CStringstrtemp;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;k

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

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

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