串口通信实践课件_第1页
串口通信实践课件_第2页
串口通信实践课件_第3页
串口通信实践课件_第4页
串口通信实践课件_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.串行通信实践*主要内容7.1.物理层标准接口

7.1.1.DTE与DCE7.1.2.典型的物理层标准接口(1)7.1.3.典型的物理层标准接口(2)7.2.

RS-232串行通信技术

7.2.1.RS-232C标准介绍

7.2.2.简单的串行通信协议的设计7.3.串行通信程序设计

7.3.1.MSComm控件介绍

7.3.2.使用开发串行口通信软件

7.3.3.使用VC++开发串行口通信软件

*7.1.1.DTE与DCEDTE(DataTerminalEquipment)又称数据终端设备,指数据输入、输出设备和传输控制器或者计算机等数据处理装置及其通信控制器。DCE(DataCircuit-TerminatingEquipment)又称数据电路终端设备,指自动呼叫设备、调制解调器(Modem)以及其它一些中间装置的集合。DTE的基本功能是产生、处理数据;DCE的基本功能是沿传输介质发送和接收数据。*7.1.2.典型的物理层标准接口(1)EIARS-232C是由美国电子工业协会EIA在1969年颁布的串行物理接口标准。RS的意思是“推荐标准”232是标识号码后缀“C”则表示该推荐标准已被修改过的次数。EIARS-232C接口标准是一种串行物理接口标准,提供了一个利用公共电话网络作为传输介质,并通过调制解调器将远程设备连接起来的技术标准;*EIARS-232C用于控制DTE与DCE之间的通信公共电话交换网DTE计算机DCEMODEMRS-232-C接口DTE计算机DCEMODEMRS-232-C接口*RS-232-C特性(1)机械特性连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。下面分别介绍DB-25、DB-9两种连接器。*RS-232-C功能特性DTETXDRXDRTSCTSDSRSGNDDCDPGNDDTRRTRxCTxC*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英尺)。

最大直接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情况下,DTE和DCE之间最大传输距离为15m(50英尺)。可见这个最大的距离是在码元畸变小于4%的前提下给出的。**RS-232-C特性(2)电气特性EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定。在TxD和RxD上:逻辑1(MARK)=-3V~-15V逻辑0(SPACE)=+3~+15V在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压)=+3V~+15V信号无效(断开,OFF状态,负电压)=-3V~-15V图1显示了1488和1489的内部结构和引脚。图中的左边是微机串行接口电路中的主芯片UART,它是TTL器件,右边是EIA-RS-232C连接器,要求EIA高电压。*远距离通信远距离通信(传输距离大于15m的通信)的例子,故一般要加调制解调器MODEM,因此使用的信号线较多。1、采用Modem(DCE)和电话网通信时的信号连接:若在双方MODEM之间采用普通电话交换线进行通信,除了需要2~8号信号线外还要增加RI(22号)和DTR(20号)两个信号线进行联络,如图所示。2、采用专用电话线通信:在通信双方的MODEM之间采用电话线进行通信,则只要使用2~8号信号线进行联络与控制。不需要电话机、振铃信号RI和DTR信号,其信号线的连接如图那样。

*近距离通信零Modem的最简连线(3线制)图是零MODEM方式的最简单连接(即三线连接),图中的2号线与3号线交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。

*7.1.3.典型的物理层标准接口(2)RS-232-C作为应用广泛的串行接口总线,有着明显的缺陷:速度慢:Vmax=20kb/s信息传输距离短:Lcable<=15m使用非平衡发送器,电气性能不佳信号之间容易产生码间串扰推出了新的串行接口总线标准449/423/422/485以及USB等*EIARS-449/422-A/423-ARS-232C的数据传输不能超过20Kbps,同时电缆最大长度不能超过15米。这大大限制了其应用能力。后来(1977年),EIA/TIA推出了一个新的标准:RS-449.如图所示。该标准的机械、功能和过程性由RS-449定义,电气接口由两个不同的标准定义。一个标准是RS-423A,它与RS-232C相似,所有的电路共享一个公共地,称为非平衡传输(unbalancedtransmission)。另一个电气标准是RS-422A,采用平衡传输(balancedtransmission),无公共地。RS-422A能在不超过60米长的电缆上达到2Mbps的数据传输速率。*增加了10条接口引脚,从表7.3可以看出传送速率高,传送距离长100kb/s 1200m接口连接器采用37针和9针(安排辅助信道的管脚)接口管脚大致分为五大类:公共地数据控制定时线辅助信道*RS-423A/RS-422-ARS449的两个子集,RS422采用平衡电路,RS423采用非平衡电路负逻辑,且参考电平为地:‘1’:-6v ‘0’:+6vRS422规定了差分平衡的电气接口,即在较长距离明显地提高数据传输速率100kb/s 1000m10Mb/s 10mR423规定了差分平衡的电气接口*RS-485RS485是工业控制过程中的串行接口总线,它由RS422变型而来,实际上它们的差别在于:RS422全双工 RS485半双工RS422采用两对平衡差分信号线,而RS485只需1对RS485更适合于多站互联,一个发送驱动器最多可连接32个负载设备*主要内容7.1.物理层标准接口

7.1.1.DTE与DCE7.1.2.典型的物理层标准接口(1)7.1.3.典型的物理层标准接口(2)7.2.

RS-232串行通信技术

7.2.1.RS-232C标准介绍

7.2.2.简单的串行通信协议的设计7.3.串行通信程序设计

7.3.1.MSComm控件介绍

7.3.2.使用开发串行口通信软件

7.3.3.使用VC++开发串行口通信软件

*7.2.RS-232串行通信技术

RS-232标准是目前常用的串行通信接口标准,它是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~20Kbps范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都做了明确规定。由于通信设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在计算机通信接口中广泛采用。*7.2.1.RS-232C标准介绍1.RS-232C中的引脚定义9针RS-232串口(DB9)25针RS-232串口(DB25)引脚简写功能说明引脚简写功能说明1CD载波侦测(CarrierDetect)8CD载波侦测(CarrierDetect)2RXD接收数据(Receive)3RXD接收数据(Receive)3TXD发送数据(Transmit)2TXD发送数据(Transmit)4DTR数据终端准备(DataTerminalReady)20DTR数据终端准备(DataTerminalReady)5GND地线(Ground)7GND地线(Ground)6DSR数据准备好(DataSetReady)6DSR数据准备好(DataSetReady)7RTS请求发送(RequestToSend)4RTS请求发送(RequestToSend)8CTS清除发送(ClearToSend)5CTS清除发送(ClearToSend)9RI振铃指示(RingIndicator)22RI振铃指示(RingIndicator)*RS-232C与TTL/CMOS信号不能直接连接,必须通过接口电平转换电平转换,否则TTL/CMOS电路毁坏!MC1488 TTLRS-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输出。具体连接方法如右图所示。*7.2.2.简单的串行通信协议的设计PC和单片机最简单的连接是零调制三线经济型。下图给出了采用MAX232芯片的PC和单片机串行通信接口电路,与PC相连采用9芯标准插座。2.PC通信软件1.单片机通信软件MCS-51通过中断方式接收PC发送的数据,并回送。单片机串行口工作在方式1,晶振为6MHz,波特率2400,定时器T1按方式2工作,经计算定时器预置值为0F3H,SMOD=1。参考程序PC方面的通信程序可以用汇编语言编写,也可以用其他高级语言例如VB、VC来编写。汇编语言编写的参考程序*RS232C传送波形图以传送字符‘x’和‘y’为例,说明RS232C信号传送波形图。编码方法:非归零二电平码(NRZ-L),负逻辑传送方法:异步传送模式1为起始位2位停止位差错控制:奇校验*例题;传‘X’=58H=01011000低位高位异步通信中,停止位和空闲位的电平与逻辑“1”的电平相同,在负逻辑中,为低电平Time起始位(逻辑值“0”)停止位奇偶校验位*传‘Y’=59H=01011001低位高位*主要内容7.1.物理层标准接口

7.1.1.DTE与DCE7.1.2.典型的物理层标准接口(1)7.1.3.典型的物理层标准接口(2)7.2.

RS-232串行通信技术

7.2.1.RS-232C标准介绍

7.2.2.简单的串行通信协议的设计7.3.串行通信程序设计

7.3.1.MSComm控件介绍

7.3.2.使用开发串行口通信软件

7.3.3.使用VC++开发串行口通信软件

*7.3.1.MSComm控件介绍

在Windows环境下,串口是系统资源的一部分。应用程序要使用串口进行通信,必须在使用前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。在Windows的系统函数中,均包含了支持通信中断的功能。对串口通信而言,Windows为相应的串口设备开放了用户定义的输出缓冲区和输入缓冲区,应用程序只能对输入/输出缓冲区进行操作,数据进出串口的操作均由系统后台完成。以接收为例,系统每接收一个字符就产生一个低级的硬件中断,系统的串口驱动程序将接收到的字符送入输入缓冲区,此时应用程序就可以通过访问输入缓冲区得到接收到的字符信息。*Windows为用户提供了两种方式实现串口通信。使用Windows的API应用程序接口使用串口通信控件*使用Windows的API应用程序接口

在Windows中,串口是以文件的形式被打开和访问的。串口和串口通信驱动需要使用设备控制块(DeviceControlBlock,DCB)进行配置。应用程序使用API函数CreateFile打开串口,ReadFile读串口,CreateEvent建立事件对象和CloseHandle关闭串口。*7.3.2.使用串口通信控件针对串口通信,微软公司专门提供了MSComm控件,使用该控件进行串口通信设计是十分方便的,程序员不必花时间去了解较为复杂的API函数。通过简单修改控件的属性和使用控件提供的方法,就可以实现对串口的配置、完成串口接收和发送数据。使用串口通信控件进行串口程序开发极为方便,如果不需要对串口进行高级控制一般多选择使用MSComm控件进行开发。下面介绍在VB下使用MSComm控件进行计算机实验室温控系统串口程序开发。*MSComm控件的属性及通信方法(1)MSComm控件的通信方法。MSComm控件提供了两种处理通信的方式:事件驱动方式和查询方式。(2)MSComm控件的属性与常数。

CommPort属性。设置并返回通信端口号。端口号的范围为1~16,但如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。RThreshold属性。设置返回要接收的字符数。接收字符后,如果RThreshold属性被设置为0(默认值),则不产生OnComm事件,如果RThreshold被设成n,则接收缓冲区收到n个字符时MSComm控件产生OnComm事件。CTSHolding属性。确定是否通过查询ClearToSend(CTS)线的状态发送数据。该属性在设计时无效,在运行时为只读。*MSComm控件的属性SThreshold属性。设置并返回传输缓冲区中允许的最小字符数。若SThreshold属性被设置为0(默认值)时,数据传输不会产生OnComm事件。而当SThreshold属性被设为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。CDHolding属性。通过查询CarrierDetect(CD)线的状态确定是否有传输。该属性在设计时无效,在运行时为只读。DSRHolding属性。确定DataSetRead(DSR)线的状态。该属性在设计时无效,在运行时为只读。Settings属性。设置返回波特率、奇偶校验、数据位、停止位参数。当端口打开时,如果属性值非法,则MSComm控件产生错误380(非法属性值)。*BBBBPDS

各个属性值间用逗号隔开,其中BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。其默认值为“9600,N,8,1”。Settings属性的设置由4个设置组成,格式如下:InputLen属性。设置并返回Input属性从接收缓冲区中读取的字符数。InputLen属性的默认值是0。设置InputLen为0时,使用Input将使MSComm控件读取缓冲区中全部的内容。MSComm控件的属性*MSComm控件的常数Handshake常数。

Handshake常数如表所示。OnComm常数。

OnComm常数如表所示常数值描述comNone0无握手comXonXoff1XOn/Xoff握手comRTS2Request-to-send/clear-to-send握手comRTSXOnXOff3Request-to-send和clear-to-send握手皆可常数值描述comEvSend1发送事件comEvReceive2接收事件comEvCTS3clear-to-send线变化comEvDSR4data-setready线变化comEvCD5carrierdetect线变化comEvRing6振铃检测comEvEOF7文件结束*MSComm控件的常数Error常数。Error常数如表所示。常数值描述comEventBreak1001接收到中断信号comEventCTSTO1002Clear-to-send超时comEventDSRTO1003Data-setready超时comEventFrame1004帧错误comEventOverrun1006端口超速comEventCDTO1007Carrierdetect超时comEventRxOver1008接收缓冲区溢出comEventRxParity1009Parity错误comEventTxFull1010传输缓冲区满comEventDCB1011检索端口设备控制块(DCB)时的意外错误*MSComm控件的常数InputMode常数。InputMode常数如表所示。常数值描述comInputModeText0(默认)通过Input属性以文本方式取回数据comInputModeBinary1通过Input属性以二进制方式检取回数据*MSComm控件的常数(3)错误消息(MSComm控件)。表列出MSComm控件可以捕获的错误。值描述常数380无效属性值comInvalidPropertyValue383属性为只读comSetNotSupported394属性为只读comGetNotSupported8000端口打开时操作不合法comPortOpen8001超时值必须大于8002无效端口号ComPortInvalid8003属性只在运行时有效8004属性在运行时为只读8005端口已经打开comPortAlreadyOpen8006设备标识符无效或不支持该标识符*MSComm控件的常数值描述常数8007不支持设备的波特率comPortAlreadyOpen8008指定的字节大小无效8009默认参数错误8010硬件不可用(被其他设备锁定)8011函数不能分配队列8012设备没有打开comNoOpen8013设备已经打开8014不能使用comm通知8015不能设置comm状态comSetCommStateFailed8016不能设置comm事件屏蔽8018仅当端口打开时操作才有效comPortNotOpen8019设备忙8020读comm设备错误comReadError8021为该端口检索设备控制块时的内部错误comDCBError*使用VB开发串行口通信软件用户界面设计初始化程序发送数据接收数据其他工作使用VB开发串行通信程序的详细步骤。*用户界面设计添加控件最终完成界面添加用户界面

新工程界面

新建工程*用户界面设计

修改界面上各控件的属性如下表所示。控件名称Name属性Caption属性FormRS232_VBRS232_VBLable1Lable1发送数据Lable2Lable2接收数据Text1Text_SENDText2Text_RECVCommand1Button_SEND发送数据Command2Button_SEND_C清空发送文本框Command3Button_RECV_C清空接收文本框MSComm1MSComm*初始化程序

程序的初始化部分主要完成对串口的设置工作,包括串口的选择、波特率及帧结构设置、打开串口以及发送和接收触发器的时间控制等。此外,在程序运行前,还应进行清除发送和接收缓冲区的工作。这部分工作是在窗体载入的时候完成的,因此应将初始化代码放在Form_Load()函数中添加如下代码,这样就完成了程序的初始化工作。*初始化程序'初始化代码PrivateSubForm_Load()

MSComm.CommPort=2 '设置串口2MSComm.Settings="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 '清除接收缓冲区数据

Text_SEND.Text="" '清空发送文本框

Text_RECV.Text="" '清空接收文本框EndSub*发送数据

本例中,发送数据的过程是通过单击[发送数据]按钮来完成的。程序应完成下面的工作:(1)单击[发送数据]按钮,程序检查发送文本框中的内容是否为空,如果为空,则终止发送命令,警告后返回。(2)检测串口是否处于打开状态,如串口关闭,则打开串口。(3)将发送文本框中的内容送入MSComm的发送缓冲区,等待数据发送。*发送数据

双击[发送数据]部分,添加Button_Send_Click()函数,其代码如下:'发送数据PrivateSubButton_SEND_Click()DimxAsStringIfText_SEND.Text=""Then'发送数据不能为空

x=MsgBox("发送数据不能为空",16)ExitSubEndIfIfNotMSComm.PortOpenThen'保证串口打开

MSComm.PortOpen=TrueEndIfMSComm.Output=Text_SEND.Text+Chr$(13)'发送数据

Fori=1To20000000'延时

NextEndSub*接收数据

接收数据部分使用了事件响应方式。当串口收到数据使得数据缓冲区的内容超过1字节时就会引发comEvReceive事件。OnComm()函数负责捕捉这一事件,并负责将发送缓冲区的内容送入输出文本框显示。OnComm()函数还对错误信息进行捕捉,当程序发生缓冲区溢出之类的错误时,由程序员负责将缓冲区清空。*接收数据

要实现上述功能,首先要双击MSComm控件创建OnComm(),并输入代码:'接收数据PrivateSubMSComm_OnComm()SelectCaseMSComm.CommEvent '检验串口事件

'错误处理

CasecomEventOverrun '数据丢失

Text_SEND.Text="" '清空发送缓冲区

Text_RECV.Text="" '清空接收缓冲区

Text_SEND.SetFocusExitSubCaseComEventRxOver ‘接收缓冲区溢出

Text_SEND.Text="" '清空发送缓冲区

Text_RECV.Text="" '清空接收缓冲区

Text_SEND.SetFocusExitSub

*接收数据CaseComEventTxFull '发送缓冲区已满

Text_SEND.Text="" '清空发送缓冲区

Text_RECV.Text="" '清空接收缓冲区

Text_SEND.SetFocusExitSub'事件处理

CaseComEvReceive '接收缓冲区内有数据

DimstrAsStringstr=MSComm.Input '从接收队列中读入字符串

Text_RECV.Text=Text_RECV.Textstr'读出字符串送显

EndSelectEndSub*其他工作使用该软件实现通信效果的界面如图所示。运行测试程序*7.3.3.使用VC++开发串行通信软件用户界面设计初始化程序发送数据接收数据其他工作

使用VisualC++6.0(VC++6.0)开发串口通信软件的方法。*用户界面设计新建工程步骤1新建工程步骤2建立新工程后界面编辑程序界面添加控件最终完成界面*用户界面设计

修改程序界面用到的各个控件的属性后,要使用这些控件,还需要为其添加对应的变量。该项工作是使用ClassWizard面板来完成的。在[MemberVariables]选项卡中相应控件的ControlID,MFC单击[AddVariables]按钮为相应控件添加对应变量。ClassWizard面板添加控件对应变量*初始化程序在VC中,需要将这部分代码添加到对话框类的InitPort中。if(m_MSComm.GetPortOpen()) //如果串口已打开,则关闭串口

m_MSComm.SetPortOpen(FALSE);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论