《串口通信实践》PPT课件.ppt

上传人:小飞机 文档编号:5456995 上传时间:2023-07-09 格式:PPT 页数:65 大小:2.30MB
返回 下载 相关 举报
《串口通信实践》PPT课件.ppt_第1页
第1页 / 共65页
《串口通信实践》PPT课件.ppt_第2页
第2页 / 共65页
《串口通信实践》PPT课件.ppt_第3页
第3页 / 共65页
《串口通信实践》PPT课件.ppt_第4页
第4页 / 共65页
《串口通信实践》PPT课件.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《《串口通信实践》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《串口通信实践》PPT课件.ppt(65页珍藏版)》请在三一办公上搜索。

1、7.串行通信实践,*,主要内容,7.1.物理层标准接口 7.1.1.DTE与DCE 7.1.2.典型的物理层标准接口(1)7.1.3.典型的物理层标准接口(2)7.2.RS-232串行通信技术 标准介绍 7.2.2.简单的串行通信协议的设计7.3.串行通信程序设计 控件介绍 7.3.2.使用开发串行口通信软件 7.3.3.使用VC+开发串行口通信软件,*,7.1.1.DTE与DCE,DTE(Data Terminal Equipment)又称数据终端设备,指数据输入、输出设备和传输控制器或者计算机等数据处理装置及其通信控制器。,DCE(Data Circuit-Terminating Equi

2、pment)又称数据电路终端设备,指自动呼叫设备、调制解调器(Modem)以及其它一些中间装置的集合。DTE的基本功能是产生、处理数据;DCE的基本功能是沿传输介质发送和接收数据。,*,7.1.2.典型的物理层标准接口(1),EIA RS-232C是由美国电子工业协会EIA在1969年颁布的串行物理接口标准。RS的意思是“推荐标准”232是标识号码后缀“C”则表示该推荐标准已被修改过的次数。EIA RS-232C接口标准是一种串行物理接口标准,提供了一个利用公共电话网络作为传输介质,并通过调制解调器将远程设备连接起来的技术标准;,*,EIA RS-232-C,1960年美国电子工业协会EIA提

3、出RS-232,1963年提出RS-232-A,1965年提出RS-232-B,1969年提出RS-232-C。用于DTE/DCE之间的接口。RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。目前在IBM PC机上的COM1、COM2接口,就是RS-232C接口。,*,EIA RS-232C用于控制DTE与DCE之间的通信,*,RS-232-C特性(1),机械特性连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-1

4、5和DB-9各种类型的连接器,其引脚的定义也各不相同。下面分别介绍DB-25、DB-9两种连接器。,*,RS-232-C:DB-25,(1)DB-25:PC和XT机采用DB-25型连接器。DB-25连接器定义了25根信号线,分为4组:异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,2220mA电流环信号 9个(12,13,14,15,16,17,19,23,24)空6个(9,10,11,18,21,25)保护地(PE)1个,作为设备接地端(1脚)DB-25型连接器的外形及信号线分配如左图所示。注意,20mA电流环信号仅IBM PC和IBM PC/XT机提供,至AT机及以

5、后,已不支持。,*,RS-232-C功能特性,DTE,TXD,RXD,RTS,CTS,DSR,SGND,DCD,PGND,DTR,RT,RxC,TxC,*,RS-232-C:DB-9,(2)DB-9连接器 在AT机及以后,不支持20mA电流环接口,使用DB-9连接器,作为提供多功能I/O卡或主板上COM1和COM2两个串行接口的连接器。它只提供异步通信的9个信号。DB-9型连接器的引脚分配与DB-25型引脚信号完全不同。因此,若与配接DB-9型连接器的DCE设备连接,必须使用专门的电缆线。电缆长度:在通信速率低于20kb/s时,RS-232C所直接连接的最大物理距离为15m(50英尺)。最大直

6、接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情况下,DTE和DCE之间最大传输距离为15m(50英尺)。可见这个最大的距离是在码元畸变小于4%的前提下给出的。,*,*,RS-232-C特性(2),电气特性EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定。在TxD和RxD上:逻辑1(MARK)=-3V-15V逻辑0(SPACE)=+315V在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压)+3V+15V信号无效(断开,OFF状态,负电压)=-3V-15V,图1显示了1488和1489的内部结构和引脚。,图

7、中的左边是微机串行接口电路中的主芯片UART,它是TTL器件,右边是EIA-RS-232C连接器,要求EIA高电压。,*,远距离通信,远距离通信(传输距离大于15m的通信)的例子,故一般要加调制解调器MODEM,因此使用的信号线较多。1、采用Modem(DCE)和电话网通信时的信号连接:若在双方MODEM之间采用普通电话交换线进行通信,除了需要28号信号线外还要增加RI(22号)和DTR(20号)两个信号线进行联络,如图所示。2、采用专用电话线通信:在通信双方的MODEM之间采用电话线进行通信,则只要使用28号信号线进行联络与控制。不需要电话机、振铃信号RI和DTR信号,其信号线的连接如图那样

8、。,*,近距离通信,零Modem 的最简连线(3线制)图是零MODEM方式的最简单连接(即三线连接),图中的2号线与3号线交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。,*,*,7.1.3.典型的物理层标准接口(2),RS-232-C作为应用广泛的串行接口总线,有着明显的缺陷:速度慢:Vmax=20kb/s信息传输距离短:Lcable=15m使用非平衡发送器,电气性能不佳信号之间容易产生码间串扰推出了新的串行接口总线标准449/423/422/485以及USB

9、等,*,EIA RS-449/422-A/423-A,RS-232 C的数据传输不能超过20 Kbps,同时电缆最大长度不能超过15米。这大大限制了其应用能力。后来(1977年),EIA/TIA推出了一个新的标准:RS-449.如图所示。该标准的机械、功能和过程性由RS-449定义,电气接口由两个不同的标准定义。一个标准是RS-423 A,它与RS-232 C相似,所有的电路共享一个公共地,称为非平衡传输(unbalanced transmission)。另一个电气标准是RS-422 A,采用平衡传输(balanced transmission),无公共地。RS-422 A能在不超过60米长的

10、电缆上达到2Mbps的数据传输速率。,*,RS-449,RS449实际上是一个一体化的三个标准,它的机械、功能和过程特性接口由RS449定义,而电气特性接口由两个不同的标准定义:RS422A:用于平衡电路 V.11/X.27RS423A:用于非平衡电路 V.10/X.26RS449与RS232C相比:,*,增加了10条接口引脚,从表7.3可以看出传送速率高,传送距离长100kb/s1200m接口连接器采用37针和9针(安排辅助信道的管脚)接口管脚大致分为五大类:公共地数据控制定时线辅助信道,*,RS-423A/RS-422-A,RS449的两个子集,RS422采用平衡电路,RS423采用非平衡

11、电路负逻辑,且参考电平为地:1:-6v0:+6vRS422规定了差分平衡的电气接口,即在较长距离明显地提高数据传输速率100kb/s1000m10Mb/s10mR423规定了差分平衡的电气接口,*,RS-485,RS485是工业控制过程中的串行接口总线,它由RS422变型而来,实际上它们的差别在于:RS422全双工RS485半双工RS422采用两对平衡差分信号线,而RS485只需1对RS485更适合于多站互联,一个发送驱动器最多可连接32个负载设备,*,主要内容,7.1.物理层标准接口 7.1.1.DTE与DCE 7.1.2.典型的物理层标准接口(1)7.1.3.典型的物理层标准接口(2)7.

12、2.RS-232串行通信技术 标准介绍 7.2.2.简单的串行通信协议的设计7.3.串行通信程序设计 控件介绍 7.3.2.使用开发串行口通信软件 7.3.3.使用VC+开发串行口通信软件,*,7.2.RS-232串行通信技术,RS-232标准是目前常用的串行通信接口标准,它是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在020Kbps范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都做了明确规定。由于通信设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在计算机通信接口中广泛采用。,*,

13、标准介绍,1.RS-232C中的引脚定义,*,RS-232C标准介绍,举例 PC机与单片机之间的串行通信。,RS-232C与TTL转换:,EIA-RS-232C是用正负电压来表示逻辑状态的,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。,*,RS-232C与TTL/CMOS信号不能直接连接,必须通过接口电平

14、转换电平转换,否则TTL/CMOS电路毁坏!MC1488TTL RS-232CMC1499 RS-232CTTL常用的MAX232MC都集成了MC1488/MC1499两项功能,*,RS-232C标准介绍,左图显示了1488 和1489的内部结构和引脚。MC1488的引脚(2)、(4,5)、(9,10)和(12,13)接TTL输入。引脚3、6、8、11输出端口接EIA-RS-232C。MC1498的14的1、4、10、13脚接EIA输入,而3、6、8、11脚接TTL输出。具体连接方法如右图所示。,*,RS-232C标准介绍,3.RS-232C接口的电平转换,RS-232C电平采用负逻辑,即:逻

15、辑“0”:+5+15V逻辑“1”:515V,RS-232C不能和TTL电平直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏,实际应用时必须注意!,常用的电平转换集成电路除了上面所介绍的传输线驱动器MC1488和传输线接收器MC1489。另一种常用的电平转换电路是MAX232,MAX232芯片可完成TTLEIA双向电平转换。图为MAX232引脚图。,*,7.2.2.简单的串行通信协议的设计,PC和单片机最简单的连接是零调制三线经济型。下图给出了采用MAX232芯片的PC和单片机串行通信接口电路,与PC相连采用9芯标准插座。,2.PC通信软件,1.单片机通信软件,MCS-51通过中断方式接

16、收PC发送的数据,并回送。单片机串行口工作在方式1,晶振为6MHz,波特率2400,定时器T1按方式2工作,经计算定时器预置值为0F3H,SMOD=1。,参考程序,PC方面的通信程序可以用汇编语言编写,也可以用其他高级语言例如VB、VC来编写。,汇编语言编写的参考程序,*,RS232C传送波形图,以传送字符x和y为例,说明RS232C信号传送波形图。编码方法:非归零二电平码(NRZ-L),负逻辑传送方法:异步传送模式1为起始位2位停止位差错控制:奇校验,*,例题;传X=58H=0101 1000,异步通信中,停止位和空闲位的电平与逻辑“1”的电平相同,在负逻辑中,为低电平,Time,起始位(逻

17、辑值“0”),停止位,奇偶校验位,*,传Y=59H=0101 1001,*,主要内容,7.1.物理层标准接口 7.1.1.DTE与DCE 7.1.2.典型的物理层标准接口(1)7.1.3.典型的物理层标准接口(2)7.2.RS-232串行通信技术 标准介绍 7.2.2.简单的串行通信协议的设计7.3.串行通信程序设计 控件介绍 7.3.2.使用开发串行口通信软件 7.3.3.使用VC+开发串行口通信软件,*,控件介绍,在Windows环境下,串口是系统资源的一部分。应用程序要使用串口进行通信,必须在使用前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。在Window

18、s的系统函数中,均包含了支持通信中断的功能。对串口通信而言,Windows为相应的串口设备开放了用户定义的输出缓冲区和输入缓冲区,应用程序只能对输入/输出缓冲区进行操作,数据进出串口的操作均由系统后台完成。以接收为例,系统每接收一个字符就产生一个低级的硬件中断,系统的串口驱动程序将接收到的字符送入输入缓冲区,此时应用程序就可以通过访问输入缓冲区得到接收到的字符信息。,*,Windows为用户提供了两种方式实现串口通信。,使用Windows的API应用程序接口使用串口通信控件,*,使用Windows的API应用程序接口,在Windows中,串口是以文件的形式被打开和访问的。串口和串口通信驱动需要

19、使用设备控制块(Device Control Block,DCB)进行配置。应用程序使用API函数CreateFile打开串口,ReadFile读串口,CreateEvent建立事件对象和CloseHandle关闭串口。,*,7.3.2.使用串口通信控件,针对串口通信,微软公司专门提供了MSComm控件,使用该控件进行串口通信设计是十分方便的,程序员不必花时间去了解较为复杂的API函数。通过简单修改控件的属性和使用控件提供的方法,就可以实现对串口的配置、完成串口接收和发送数据。使用串口通信控件进行串口程序开发极为方便,如果不需要对串口进行高级控制一般多选择使用MSComm控件进行开发。下面介绍

20、在VB下使用MSComm控件进行计算机实验室温控系统串口程序开发。,*,MSComm控件的属性及通信方法,(1)MSComm控件的通信方法。MSComm控件提供了两种处理通信的方式:事件驱动方式和查询方式。(2)MSComm控件的属性与常数。,CommPort属性。设置并返回通信端口号。端口号的范围为116,但如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。RThreshold属性。设置返回要接收的字符数。接收字符后,如果RThreshold属性被设置为0(默认值),则不产生OnComm事件,如果RThreshold被设成n,则接收缓冲区收到n个

21、字符时MSComm控件产生OnComm事件。CTSHolding属性。确定是否通过查询Clear To Send(CTS)线的状态发送数据。该属性在设计时无效,在运行时为只读。,*,MSComm控件的属性,SThreshold属性。设置并返回传输缓冲区中允许的最小字符数。若SThreshold属性被设置为0(默认值)时,数据传输不会产生OnComm事件。而当SThreshold属性被设为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。CDHolding属性。通过查询Carrier Detect(CD)线的状态确定是否有传输。该属性在设计时无效,在运行时为只读。DSRHoldin

22、g属性。确定Data Set Read(DSR)线的状态。该属性在设计时无效,在运行时为只读。Settings属性。设置返回波特率、奇偶校验、数据位、停止位参数。当端口打开时,如果属性值非法,则MSComm控件产生错误380(非法属性值)。,*,各个属性值间用逗号隔开,其中BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。其默认值为“9600,N,8,1”。,Settings属性的设置由4个设置组成,格式如下:,InputLen属性。设置并返回Input属性从接收缓冲区中读取的字符数。InputLen 属性的默认值是0。设置InputLen为0时,使用Input将使MSComm控件读

23、取缓冲区中全部的内容。,MSComm控件的属性,*,MSComm控件的常数,Handshake常数。Handshake常数如表所示。,OnComm常数。OnComm常数如表所示,*,MSComm控件的常数,Error常数。Error常数如表所示。,*,MSComm控件的常数,InputMode常数。InputMode常数如表所示。,*,MSComm控件的常数,(3)错误消息(MS Comm控件)。表列出MSComm控件可以捕获的错误。,*,MSComm控件的常数,*,使用VB开发串行口通信软件,用户界面设计初始化程序 发送数据 接收数据 其他工作,使用VB开发串行通信程序的详细步骤。,*,用户

24、界面设计,添加控件,最终完成界面,添加用户界面,新工程界面,新建工程,*,用户界面设计,修改界面上各控件的属性如下表所示。,*,初始化程序,程序的初始化部分主要完成对串口的设置工作,包括串口的选择、波特率及帧结构设置、打开串口以及发送和接收触发器的时间控制等。此外,在程序运行前,还应进行清除发送和接收缓冲区的工作。这部分工作是在窗体载入的时候完成的,因此应将初始化代码放在Form_Load()函数中添加如下代码,这样就完成了程序的初始化工作。,*,初始化程序,初始化代码Private Sub Form_Load()MSComm.CommPort=2 设置串口2 MSComm.Settings=

25、9600,N,8,1 波特率9600bps,无校验,8位数据,1位停止位 MSComm.InputLen=0 读取接收缓冲区的所有字符 MSComm.InBufferSize=1024 设置接收缓冲区为1024字节 MSComm.OutBufferSize=512 设置发送缓冲区为512字节 MSComm.PortOpen=True 打开串口 MSComm.SThreshold=0 不触发发送事件 MSComm.RThreshold=1 每一个字符到接收缓冲区都触发接收事件 MSComm.InBufferCount=0 清除发送缓冲区数据 MSComm.OutBufferCount=0 清除接

26、收缓冲区数据 Text_SEND.Text=清空发送文本框 Text_RECV.Text=清空接收文本框End Sub,*,发送数据,本例中,发送数据的过程是通过单击发送数据按钮来完成的。程序应完成下面的工作:(1)单击发送数据按钮,程序检查发送文本框中的内容是否为空,如果为空,则终止发送命令,警告后返回。(2)检测串口是否处于打开状态,如串口关闭,则打开串口。(3)将发送文本框中的内容送入MSComm的发送缓冲区,等待数据发送。,*,发送数据,双击发送数据部分,添加Button_Send_Click()函数,其代码如下:发送数据Private Sub Button_SEND_Click()D

27、im x As String If Text_SEND.Text=Then 发送数据不能为空 x=MsgBox(发送数据不能为空,16)Exit Sub End If If Not MSComm.PortOpen Then 保证串口打开 MSComm.PortOpen=True End If MSComm.Output=Text_SEND.Text+Chr$(13)发送数据 For i=1 To 20000000 延时 NextEnd Sub,*,接收数据,接收数据部分使用了事件响应方式。当串口收到数据使得数据缓冲区的内容超过1字节时就会引发comEvReceive事件。OnComm()函数负

28、责捕捉这一事件,并负责将发送缓冲区的内容送入输出文本框显示。OnComm()函数还对错误信息进行捕捉,当程序发生缓冲区溢出之类的错误时,由程序员负责将缓冲区清空。,*,接收数据,要实现上述功能,首先要双击MSComm控件创建OnComm(),并输入代码:接收数据Private Sub MSComm_OnComm()Select Case MSComm.CommEvent 检验串口事件 错误处理 Case comEventOverrun 数据丢失 Text_SEND.Text=清空发送缓冲区 Text_RECV.Text=清空接收缓冲区 Text_SEND.SetFocus Exit Sub C

29、ase ComEventRxOver 接收缓冲区溢出 Text_SEND.Text=清空发送缓冲区 Text_RECV.Text=清空接收缓冲区 Text_SEND.SetFocus Exit Sub,*,接收数据,Case ComEventTxFull 发送缓冲区已满 Text_SEND.Text=清空发送缓冲区 Text_RECV.Text=清空接收缓冲区 Text_SEND.SetFocus Exit Sub 事件处理 Case ComEvReceive 接收缓冲区内有数据 Dim str As String str=MSComm.Input 从接收队列中读入字符串 Text_RECV.

30、Text=Text_RECV.Textstr 读出字符串送显 End SelectEnd Sub,*,其他工作,使用该软件实现通信效果的界面如图所示。,运行测试程序,*,7.3.3.使用VC+开发串行通信软件,用户界面设计初始化程序 发送数据 接收数据 其他工作,使用 Visual C+6.0(VC+6.0)开发串口通信软件的方法。,*,用户界面设计,新建工程步骤1,新建工程步骤2,建立新工程后界面,编辑程序界面,添加控件,最终完成界面,*,用户界面设计,修改程序界面用到的各个控件的属性后,要使用这些控件,还需要为其添加对应的变量。该项工作是使用ClassWizard面板来完成的。在Membe

31、r Variables选项卡中相应控件的Control ID,MFC单击Add Variables按钮为相应控件添加对应变量。,ClassWizard面板,添加控件对应变量,*,初始化程序,在VC中,需要将这部分代码添加到对话框类的InitPort中。,if(m_MSComm.GetPortOpen()/如果串口已打开,则关闭串口m_MSComm.SetPortOpen(FALSE);m_MSComm.SetCommPort(2);/选择COM2if(!m_MSComm.GetPortOpen()m_MSComm.SetPortOpen(TRUE);/打开串口elseAfxMessageBox

32、(serial port open error);m_MSComm.SetSettings(“9600,n,8,1”);/设置波特率9600,无 校验,8位数据位,1位停止位m_MSComm.SetRThreshold(1);/串口接收缓冲区中有多于或等于1 个字符时将产生接收数据的OnComm事件m_MSComm.SetInputLen(0);/设置当前接收区数据长度为0m_MSComm.GetInput();/预读缓冲区以清除残留数据,*,接收数据,当MSComm的接收缓冲区有字符时,程序会发送事件消息,OnComm()函数响应该消息并进行处理。由于MSComm类的GetInput()函数

33、返回的数据变量类型为Variant型,而编辑框对应的显示字符串是Cstring型,因此接收数据时,需要先进行类型转换。在VC中,转换过程如下:,OnComm()函数的完整代码,将Variant类型转换为ColeSafeArray类型;将ColeSafeArray类型转换为BYTE型数组;将BYTE型数组转换为Cstring变量。,*,发送数据,发送数据功能使用发送数据按钮对应函数Onsend()来实现。发送数据时,程序仅需要读出发送编辑框的内容,将其转化为发送程序需要的数据格式后,再使用C语言中的强制类型转换功能,将其转换为ColeVariant数据类型,由MSComm类的SetOutput(

34、)函数送入发送缓冲区即可。,发送函数OnSend()的源代码,*,其他工作,void CRS232_VCDlg:OnClr()/TODO:Add your control notification handler code herem_str_send=;/清空发送文本框m_str_recv=;/清空接收文本框UpdateData(FALSE);/更新文本框内容,清空按钮用于清除发送编辑框和接收编辑框中的已有内容,其相应函数OnClr的代码如下:,*,其他工作,运行测试程序,连接串口线,启动软件后,首先勾选十六进制发送/接收单选框,在发送文本框中添入数据“02 35 08 4A”的字符串,单击发送按钮。然后删除发送文本框中的内容,去掉十六进制发送/接收的勾选,再填入数据“Goodbye”,软件的测试效果如图所示。,*,THANK YOU!,*,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号