1、两片 51 单片机互相通信的串行通信程序(一个发送程序,一个接收程序)作者:佚名 来源:不详 录入:Admin 更新时间:2008-7-26 20:01:31 点击数:2 【字体: 】系统晶振是 11.0592 MHz;51 单片机发送单片机程序;此程序用 Proteus 仿真通过 ;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的 P1 口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的 T 和 R 通过无线模块(如基于 MCP2120 芯片的模块)来扩充,便可做成无线通信ORG 0000HAJMP S
2、TARTORG 0040HSTART:MOV SP,#60H MOV SCON,#50H ;串口 方式 1MOV TMOD,#20H ;T1 方式 2MOV TL1,#0FDH ;波特率 9600 的常数MOV TH1,#0FDHSETB TR1 MOV r5,#00h WAIT:MOV p1,#0ffhMOV a ,p1MOV r5,alcall delay ;读键盘,这里去抖动,还要加几句话MOV a ,p1nopCJNE A,5,WAIT ;是否有键输入MOV SBUF,a ;串口输出键盘输入的值NOPSS: JBC TI,WAIT ;是否发送完毕SJMP SSDELAY: ;延时子程序
3、PUSH 0 ;保存现场PUSH 1MOV 0,#06HDELAY1: MOV 1,#0HDJNZ 1,$DJNZ 0,DELAY1POP 1 ;恢复现场POP 0RETEND;系统晶振是 11.0592 MHz;51 单片机接收单片机程序;此程序用 Proteus 仿真通过;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的 P1 口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的 T 和 R 通过无线模块(如基于 MCP2120 芯片的模块)来扩充,便可做成无线通信ORG 0000HAJMP START
4、ORG 0040HSTART: MOV SCON,#50H ;串口 方式 1MOV TMOD,#20H ;T1 方式 2MOV TL1,#0FDH ;波特率 9600 的常数MOV TH1,#0FDHSETB TR1 WAIT:JBC RI,DIS_REC ;是否接收到数据 sjmp waitDIS_REC:MOV A,SBUF ;读串口接收到的数据 MOV p1,aSJMP waitendPC 机与多 MCS51 单片机间的串行通信设计作者:北京工业大学 许丽佳 陈阳舟 来源:电子工程师 点击数:1023 更新时间:2006-5-30您可以添加到网摘 让更多人关注此文章:摘 要:主要讲解了
5、IBMPC 机与 MCS51 单片机多机系统的通信原理,给出了其硬件接口框图,并详细地分析了系统的多机通信软件设计。 关键词:单片机,分布式系统,串行通信1 引 言在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。它们大多由 IBMPC 微机和 MCS51 单片机组成。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBMPC 机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给
6、PC 机,PC 机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。故 IBMPC 机(上位机)与各 MCS51 单片机(下位机)之间的通信显得尤其重要。本文主要探讨它们之间的远距离串行通信接口和软件程序设计。2 硬件设计接口RS232C 串行通信接口是美国电气工业协会(EIA)与 BELL 公司等一起开发的一种标准通信协议,现在它在终端、外设与计算机中被广泛采用。该标准规定了 21 个信号和25 个引脚,但在智能仪器与计算机之间的通信中常用 2 个信号及 3 个引脚(2 脚数据输入,3 脚数据输出,7 脚信号地)。它采用双极性的负逻辑信号,0 逻辑信号为3V
7、 至 12V,1逻辑信号为3V 至12V,它的传输速率最大为 20kbits,传输距离仅为 15m。由于RS232 主要是完成电平移位、转换和信号反相等,所以它有自己的电平转换与驱动芯片,如 MC1488(发送)与 MC1489(接受)。IBMPC 机有两个标准的 RS232 串行口,其电平采用的是 EIA 电平,而 MCS51 单片机的串行通信是由 TXD(发送数据)和 RXD(接收数据)来进行全双工通信的,它们的电平是 TTL 电平,为了 PC 机与 MCS51 机之间能可靠地进行串行通信,需要用电平转换芯片。由于 MC1488 和 MC1489 需要12V、5V 电源供电,故采用 MAX
8、IM 公司生产的低功耗、单电源的 MAX232 芯片,因为它自身带有电源电压变换器,可以把5V 电源变换成 RS232 输出电平所需的10V 电压,能实现 RS232 的技术指标,并只需要5V 的电源,为串行通信带来了较好的性能和低廉的价格。MAX232的接口电路图如图 2 所示。PC 机采用可编程串行异步通信控制器 8251A 来实现,通过对 INS8251A 初始化可以控制串行数据传送格式和速度及其工作方式,使得它与单片机的通信方式一致,从而实现 PC机与单片机之间的通信。MCS51 和 8251A 的连接图见图 3。由于远距离数据传输,在系统中用了两片 MAX485 芯片进行数据传送,还
9、采用了两级光电隔离来提高系统的抗干扰能力。单片机和 PC 机之间的 RS232 通信硬件接口电路框图如图 4 所示。3 串行通信的软件程序设计31 主从式多机通信原理MCS51 用于多机通信时必须工作在方式 2 或方式 3。以方式 3 为例,每发送一帧数据为 11 位:1 位起始位(0) ,8 位数据位和 1 位停止位(1) ,附加的第 9 位数据在非多机系统中为奇偶校验位,在发送端有 SCON 的 TB8 产生,在接收端传送到 SCON 的 RB8。它还可设定为“0”或“1”作为在多机通信中区分数据帧(0 标志)还是地址帧(1 标志)的标志。在 MCS51 多机系统中有以下协议:所有的各从机
10、均处于听命状态,即 SM21,以便接收主机发来的地址,当接收到一帧信息的 RB8 为“1”时,表示主机发送来的是地址信息,所有的从机均发生接收中断,否则中断屏蔽。当一从机进入相应的中断服务程序,把接收到的地址和本机的地址比较,如果相符合就令其 SM20,并向主机发回本机地址以作应答,该从机就与主机联通,准备接收主机发来的命令或数据信息,而其他的未被寻址从机保持 SM21 并退出各自的中断服务程序。这样,只有 SM20 的从机才能接收到主机发送来的数据信息,顺利实现地址帧和数据帧的分离。被寻址从机在通信完成后重新使SM21,并退出中断服务程序,等待下次通信。32 多机通信协议要实现单片机和 PC
11、 机的正常通信,必须正确设定它们两者之间的通信方式,保证双方都用相同的波特率、起始位、停止位、奇偶校验位,并且要建立双方通信的应答信号。单片机既可工作在同步移位寄存器方式下也可工作在 UART(通用异步收发器)下。串行口的通信方式是由特殊功能寄存器 SCON 来控制的。其各控制定义如下: SM0,SM1:工作模式设定位;SM2:允许使用方法 2、3 多机通信控制位;RB8:接收数据第 9 位;TB8:发送数据第 9 位;TI:发送中断标志;RI:接收中断标志。本文中工作方式为 3,即 9 位 UART 定时器 T1 作为波特率发生器,工作在方式 2,若选定波特率为1200bps,则计数初值为
12、0E8H(SMOD0,时钟频率 Fosc 为 11059MHz) 。PC 机的异步通信接口为 INTEL8251A,它可设定 1 位、15 位或 2 位停止位,数据可在 58 位之间选择,通信频率为 096Kbps,有奇偶校验、帧校验、溢出校验三种方式。可通过对它写入一定的方式控制字、命令控制字从而进行初始化。它与 MCS51 的连接如前面所示,则它的数据口地址为 0F0H,控制口地址为 0F1H。它的工作状态寄存于其状态字寄存器中,可由 MCS51 的 CPU 读取。通信协议如下:(1)串行通信波特率为1200bps;(2)帧格式为 8 位数据位,一位起始位,一位可编程的第 9 位(即发送和
13、接收的地址数据位的标志位) ,一位停止位;(3)主机和从机遵循主从原则,主机用呼叫方式选择从机,数据在主机和从机之间双向传递,各从机之间的相互通信需通过主机作为中介;(4)主从机之间还应传送一些供它们识别的命令和状态字,如以 00H 表示主机发送从机接收命令,以 01H 表示从机发送主机接收命令等。33 通信程序设计思路及其实现程序主要包括主机程序(由主机主程序和通信子程序组成) 、从机主程序和其中断服务程序组成。主机程序主要完成对 8251A 的初始化以及主机与从机之间的通信,主机程序框图见图 5。而从机主程序主要完成对串行口的初始化、波特率的设置(应与 8251A 的波特率一致) ,它的中
14、断程序主要用来完成 MCS51 单片机与 PC 机的数据通信。从机中断服务程序框图见图 6。 这里简单介绍 8251A 的初始化程序,设 8251A 工作于异步通信方式,波特率系数1,字符长度为 8 位,偶校验,所以方式字为 7DH,又设 8251A 为全双工方式,出错标志复位,故其命令控制字为 27H,其相应的初始化程序如下:MOV R0,0F0H4 结束语本系统软硬件在 IBM PCXT 机和 DICE 系列的 MCS51 单片机上进行过调试,运行良好,验证了其在 仿真平台的控制,现已用于实际系统,且特别适用于从机实时性要求较高的中小型工控系统。参考文献1 何立民单片机应用文集(2) 北京
15、:北京航空航天大学出版社,19932 何立民单片机高级教程北京:北京航空航天大学出版社,20003 胡汉才单片机原理及其接口技术北京:清华大学出版社,19964 陈荣保,肖本贤,李钢基于 MODEM 和单片机的远程通讯系统设计与实现微电子学与计算机,1999(1)5 何飞跃。基于 MCS51 单片机的 LCU 与上位机的通信微计算机信息,1999(1)单片机 C51 串口中断接收和发送测试例程(含通信协议的实现)通信协议: 第 1 字节,MSB 为 1,为第 1 字节标志,第 2 字节,MSB 为 0,为非第一字节标志,其余类推,最后一个字节为前几个字节后 7 位的异或校验和。 测试方法:可以
16、将串口调试助手的发送框写上 95 10 20 25,并选上 16 进制发送,接收框选上 16 进制显示,如果每发送一次就接收到 95 10 20 25,说明测试成功。 /这是一个单片机 C51 串口接收(中断)和发送例程,可以用来测试 51 单片机的中断接收 /和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #include #include #define INBUF_LEN 4 /数据长度 unsigned char inbuf1INBUF_LEN; unsigned char checksum,count3; bit read_flag= 0 ; void init_s
17、erialcomm( void ) SCON = 0x50 ; /SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |= 0x20 ; /TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x80 ; /SMOD=1; TH1 = 0xF4 ; /Baud:4800 fosc=11.0592MHz IE |= 0x90 ; /Enable Serial Interrupt TR1 = 1 ; / timer 1 run / TI=1; /向串口发送一个字符 void send_char_com( unsig
18、ned char ch) SBUF=ch; while (TI= 0 ); TI= 0 ; /向串口发送一个字符串,strlen 为该字符串长度 void send_string_com( unsigned char *str, unsigned int strlen) unsigned int k= 0 ; do send_char_com(*(str + k); k+; while (k 127 ) count3= 0 ; inbuf1count3=ch; checksum= ch- 128 ; else count3+; inbuf1count3=ch; checksum = ch; i
19、f ( (count3=(INBUF_LEN- 1 ) /如果串口接收的数据达到 INBUF_LEN 个,且校验没错, /就置位取数标志 main() init_serialcomm(); /初始化串口 while ( 1 ) if (read_flag) /如果取数标志已置位,就将读到的数从串口发出 read_flag= 0 ; /取数标志清 0 send_string_com(inbuf1,INBUF_LEN); RS-232、RS-422 与 RS-485 标准及应用一、RS-232、RS-422 与 RS-485 的由来 RS-232、RS-422 与 RS-485 都是串行数据接口标
20、准,最初都是由电子工业协会(EIA)制订并发布的,RS-232 在 1962 年发布,命名为 EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS-422 由RS-232 发展而来,它是为弥补 RS-232 之不足而提出的。为改进 RS-232 通信距离短、速率低的缺点,RS-422 定义了一种平衡通信接口,将传输速率提高到 10Mb/s,传输距离延长到 4000 英尺(速率低于100kb/s 时),并允许在一条平衡总线上连接最多 10 个接收器。RS-422 是一种单机发送、多机接收的单向、平衡传输规范,被命名为 TIA/EIA-422-A 标准。为扩展应用范围,EIA 又于
21、 1983 年在 RS-422 基础上制定了 RS-485 标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为 TIA/EIA-485-A 标准。由于 EIA 提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以 RS 作前缀称谓。 RS-232、RS-422 与 RS-485 标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。因此在视频界的应用,许多厂家都建立了一套高层通信协议,或公开或厂家独家使用。如录像机厂家中的 Sony
22、与松下对录像机的 RS-422 控制协议是有差异的,视频服务器上的控制协议则更多了,如 Louth、Odetis 协议是公开的,而 ProLINK 则是基于 Profile 上的。 二、RS-232 串行接口标准 目前 RS-232 是 PC 机与通信工业中应用最广泛的一种串行接口。RS-232 被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS-232 采取不平衡传输方式,即所谓单端通讯。 收、发端的数据信号是相对于信号地,如从 DTE 设备发出的数据在使用 DB25 连接器时是 2 脚相对 7脚(信号地)的电平,DB25 各引脚定义参见图 1。典型的 RS-232 信号在正负电平之
23、间摆动,在发送数据时,发送端驱动器输出正电平在+5+15V,负电平在-5-15V 电平。当无数据传输时,线上为 TTL,从开始传送数据到结束,线上电平从 TTL 电平到 RS-232 电平再返回 TTL 电平。接收器典型的工作电平在+3+12V 与-3-12V。由于发送电平与接收电平的差仅为 2V 至 3V 左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约 15 米,最高速率为 20kb/s。RS-232 是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为 37k。所以 RS-232 适合本地设备之间的通信。其有关电气参数参见表 1。 规定 RS232 RS
24、422 R485 工作方式 单端 差分 差分 节点数 1 收、1 发 1 发 10 收 1 发 32 收 最大传输电缆长度 50 英尺 400 英尺 400 英尺 最大传输速率 20Kb/S 10Mb/s 10Mb/s 最大驱动输出电压 +/-25V -0.25V+6V -7V+12V 驱动器输出信号电平 (负载最小值) 负载 +/-5V+/-15V +/-2.0V +/-1.5V 驱动器输出信号电平 (空载最大值) 空载 +/-25V +/-6V +/-6V 驱动器负载阻抗() 3K7K 100 54 摆率(最大值) 30V/s N/A N/A 接收器输入电压范围 +/-15V -10V+1
25、0V -7V+12V 接收器输入门限 +/-3V +/-200mV +/-200mV 接收器输入电阻() 3K7K 4K(最小) 12K 驱动器共模电压 -3V+3V -1V+3V 接收器共模电压 -7V+7V -7V+12V 表 1 三、RS-422 与 RS-485 串行接口标准 1平衡传输 RS-422、RS-485 与 RS-232 不一样,数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为 A,另一线定义为 B,如图 2。 通常情况下,发送驱动器 A、B 之间的正电平在+2+6V,是一个逻辑状态,负电平在-26V,是另一个逻辑状态。另有一个信号地 C,在 R
26、S-485 中还有一“使能”端,而在 RS-422 中这是可用可不用的。“使能”端是用于控制发送驱动器与传输线的切断与连接。当“使能”端起作用时,发送驱动器处于高阻状态,称作“第三态”,即它是有别于逻辑“1”与“0”的第三态。 接收器也作与发送端相对的规定,收、发端通过平衡双绞线将 AA 与 BB 对应相连,当在收端 AB 之间有大于+200mV 的电平时,输出正逻辑电平,小于-200mV 时,输出负逻辑电平。接收器接收平衡线上的电平范围通常在 200mV 至 6V 之间。参见图 3。 2RS-422 电气规定 RS-422 标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性
27、。图 5 是典型的 RS-422 四线接口。实际上还有一根信号地线,共 5 根线。图 4 是其 DB9 连接器引脚定义。由于接收器采用高输入阻抗和发送驱动器比 RS232 更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接 10 个节点。即一个主设备(Master),其余为从设备(Salve),从设备之间不能通信,所以 RS-422 支持点对多的双向通信。接收器输入阻抗为 4k,故发端最大负载能力是 104k+100(终接电阻)。RS-422 四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF 握手)或硬件方式
28、(一对单独的双绞线)实现。 RS-422 的最大传输距离为 4000 英尺(约 1219 米),最大传输速率为 10Mb/s。其平衡双绞线的长度与传输速率成反比,在 100kb/s 速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般 100 米长的双绞线上所能获得的最大传输速率仅为 1Mb/s。 RS-422 需要一终接电阻,要求其阻值约等于传输电缆的特性阻抗。在矩距离传输时可不需终接电阻,即一般在 300 米以下不需终接电阻。终接电阻接在传输电缆的最远端。 RS-422 有关电气参数见表 1 3RS-485 电气规定 由于 RS-485 是从 RS-422 基础上
29、发展而来的,所以 RS-485 许多电气规定与 RS-422 相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485 可以采用二线与四线方式,二线制可实现真正的多点双向通信,参见图 6。 而采用四线连接时,与 RS-422 一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比 RS-422 有改进, 无论四线还是二线连接方式总线上可多接到 32 个设备。参见图 7。 RS-485 与 RS-422 的不同还在于其共模输出电压是不同的,RS-485 是-7V 至+12V 之间,而 RS-422 在-7V 至+7V 之间,RS-485 接收器最小输入阻
30、抗为 12k 剑 鳵 S-422 是 4k 健; 旧峡梢运礡 S-485 满足所有RS-422 的规范,所以 RS-485 的驱动器可以用在 RS-422 网络中应用。 RS-485 有关电气规定参见表 1。 RS-485 与 RS-422 一样,其最大传输距离约为 1219 米,最大传输速率为 10Mb/s。平衡双绞线的长度与传输速率成反比,在 100kb/s 速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般 100 米长双绞线最大传输速率仅为 1Mb/s。 RS-485 需要 2 个终接电阻,其阻值要求等于传输电缆的特性阻抗。在矩距离传输时可不需终接电阻
31、,即一般在 300 米以下不需终接电阻。终接电阻接在传输总线的两端。 四、RS-422 与 RS-485 的网络安装注意要点 RS-422 可支持 10 个节点,RS-485 支持 32 个节点,因此多节点构成网络。网络拓扑一般采用终端匹配的总线型结构,不支持环形或星形网络。在构建网络时,应注意如下几点: 1采用一条双绞线电缆作总线,将各个节点串接起来,从总线到每个节点的引出线长度应尽量短,以便使引出线中的反射信号对总线信号的影响最低。图 8 所示为实际应用中常见的一些错误连接方式(a,c,e)和正确的连接方式(b,d,f)。a,c,e 这三种网络连接尽管不正确,在短距离、低速率仍可能正常工作
32、,但随着通信距离的延长或通信速率的提高,其不良影响会越来越严重,主要原因是信号在各支路末端反射后与原信号叠加,会造成信号质量下降。 2应注意总线特性阻抗的连续性,在阻抗不连续点就会发生信号的反射。下列几种情况易产生这种不连续性:总线的不同区段采用了不同电缆,或某一段总线上有过多收发器紧靠在一起安装,再者是过长的分支线引出到总线。 总之,应该提供一条单一、连续的信号通道作为总线。 五、RS-422 与 RS-485 传输线上匹配的一些说明 对 RS-422 与 RS-485 总线网络一般要使用终接电阻进行匹配。但在短距离与低速率下可以不用考虑终端匹配。那么在什么情况下不用考虑匹配呢?理论上,在每
33、个接收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。但这在实际上难以掌握,美国 MAXIM 公司有篇文章提到一条经验性的原则可以用来判断在什么样的数据速率和电缆长度时需要进行匹配:当信号的转换时间(上升或下降时间)超过电信号沿总线单向传输所需时间的 3 倍以上时就可以不加匹配。例如具有限斜率特性的 RS-485 接口 MAX483 输出信号的上升或下降时间最小为 250ns,典型双绞线上的信号传输速率约为0.2m/ns(24AWG PVC 电缆),那么只要数据速率在 250kb/s 以内、电缆长度不超过 16 米,采用 MAX483作为 RS-485 接口时就
34、可以不加终端匹配。 一般终端匹配采用终接电阻方法,前文已有提及,RS-422 在总线电缆的远端并接电阻,RS-485 则应在总线电缆的开始和末端都需并接终接电阻。终接电阻一般在 RS-422 网络中取 100,在 RS-485 网络中取 120。相当于电缆特性阻抗的电阻,因为大多数双绞线电缆特性阻抗大约在 100120。这种匹配方法简单有效,但有一个缺点,匹配电阻要消耗较大功率,对于功耗限制比较严格的系统不太适合。 另外一种比较省电的匹配方式是 RC 匹配,如图 9。利用一只电容 C 隔断直流成分可以节省大部分功率。但电容 C 的取值是个难点,需要在功耗和匹配质量间进行折衷。 还有一种采用二极
35、管的匹配方法,如图 10。这种方案虽未实现真正的“匹配”,但它利用二极管的钳位作用能迅速削弱反射信号,达到改善信号质量的目的。节能效果显著。 六、RS-422 与 RS-485 的接地问题 电子系统接地是很重要的,但常常被忽视。接地处理不当往往会导致电子系统不能稳定工作甚至危及系统安全。RS-422 与 RS-485 传输网络的接地同样也是很重要的,因为接地系统不合理会影响整个网络的稳定性,尤其是在工作环境比较恶劣和传输距离较远的情况下,对于接地的要求更为严格。否则接口损坏率较高。很多情况下,连接 RS-422、RS-485 通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来
36、。而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有下面二个原因: 1共模干扰问题:正如前文已述,RS-422 与 RS-485 接口均采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了。但人们往往忽视了收发器有一定的共模电压范围,如 RS-422 共模电压范围为-7+7V,而 RS-485 收发器共模电压范围为-7+12V,只有满足上述条件,整个网络才能正常工作。当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。以图 11 为例,当发送驱动器 A 向接收器 B 发送数据时,发送驱动器 A
37、的输出共模电压为 V OS ,由于两个系统具有各自独立的接地系统,存在着地电位差 V GPD 。那么,接收器输入端的共模电压V CM 就会达到 V CM =V OS +V GPD 。RS-422 与 RS-485 标准均规定 V OS 3V,但 V GPD 可能会有很大幅度(十几伏甚至数十伏),并可能伴有强干扰信号,致使接收器共模输入 V CM 超出正常范围,并在传输线路上产生干扰电流,轻则影响正常通信,重则损坏通信接口电路。 2(EMI)问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁
38、波。 由于上述原因,RS-422、RS-485 尽管采用差分平衡传输方式,但对整个 RS-422 或 RS-485 网络,必须有一条低阻的信号地。一条低阻的信号地将两个接口的工作地连接起来,使共模干扰电压 V GPD 被短路。这条信号地可以是额外的一条线(非屏蔽双绞线),或者是屏蔽双绞线的屏蔽层。这是最通常的接地方法。 值得注意的是,这种做法仅对高阻型共模干扰有效,由于干扰源内阻大,短接后不会形成很大的接地环路电流,对于通信不会有很大影响。当共模干扰源内阻较低时,会在接地线上形成较大的环路电流,影响正常通信。笔者认为,可以采取以下三种措施: (1) 如果干扰源内阻不是非常小,可以在接地线上加限
39、流电阻以限制干扰电流。接地电阻的增加可能会使共模电压升高,但只要控制在适当的范围内就不会影响正常通信。 (2) 采用浮地技术,隔断接地环路。这是较常用也是十分有效的一种方法,当共模干扰内阻很小时上述方法已不能奏效,此时可以考虑将引入干扰的节点(例如处于恶劣的工作环境的现场设备)浮置起来(也就是系统的电路地与机壳或大地隔离),这样就隔断了接地环路,不会形成很大的环路电流。 (3) 采用隔离接口。有些情况下,出于安全或其它方面的考虑,电路地必须与机壳或大地相连,不能悬浮,这时可以采用隔离接口来隔断接地回路,但是仍然应该有一条地线将隔离侧的公共端与其它接口的工作地相连。参见图 12。 七、RS-42
40、2 与 RS-485 的网络失效保护 RS-422 与 RS-485 标准都规定了接收器门限为200mV。这样规定能够提供比较高的噪声抑制能力,如前文所述,当接收器 A 电平比 B 电平高+200mV 以上时,输出为正逻辑,反之,则输出为负逻辑。但由于第三态的存在,即在主机在发端发完一个信息数据后,将总线置于第三态,即总线空闲时没有任何信号驱动总线,使 AB 之间的电压在-200+200mV 直至趋于 0V,这带来了一个问题:接收器输出状态不确定。如果接收机的输出为 0V,网络中从机将把其解释为一个新的启动位,并试图读取后续字节,由于永远不会有停止位,产生一个帧错误结果,不再有设备请求总线,网
41、络陷于瘫痪状态。除上述所述的总线空闲会造成两线电压差低于 200mV 的情况外,开路或短路时也会出现这种情况。故应采取一定的措施避免接收器处于不确定状态。 通常是在总线上加偏置,当总线空闲或开路时,利用偏置电阻将总线偏置在一个确定的状态(差分电压-200mV)。如图 13。将 A 上拉到地,B 下拉到 5V,电阻的典型值是 1k,具体数值随电缆的电容变化而变化。 上述方法是比较经典的方法,但它仍然不能解决总线短路时的问题,有些厂家将接收门限移到-200mV/-50mV,可解决这个问题。例如 Maxim 公司的 MAX3080 系列 RS-485 接口,不仅省去了外部偏置电阻,而且解决了总线短路
42、情况下的失效保护问题。 八、RS-422 与 RS-485 的瞬态保护 前文提到的信号接地措施,只对低频率的共模干扰有保护作用,对于频率很高的瞬态干扰就无能为力了。由于传输线对高频信号而言就是相当于电感,因此对于高频瞬态干扰,接地线实际等同于开路。这样的瞬态干扰虽然持续时间短暂,但可能会有成百上千伏的电压。 实际应用环境下还是存在高频瞬态干扰的可能。一般在切换大功率感性负载如电机、变压器、继电器等或闪电过程中都会产生幅度很高的瞬态干扰,如果不加以适当防护就会损坏 RS-422 或 RS-485 通信接口。对于这种瞬态干扰可以采用隔离或旁路的方法加以防护。 1隔离保护方法。这种方案实际上将瞬态高
43、压转移到隔离接口中的电隔离层上,由于隔离层的高绝缘电阻,不会产生损害性的浪涌电流,起到保护接口的作用。通常采用高频变压器、光耦等元件实现接口的电气隔离,已有器件厂商将所有这些元件集成在一片 IC 中,使用起来非常简便,如 Maxim 公司的MAX1480/MAX1490,隔离电压可达 2500V。这种方案的优点是可以承受高电压、持续时间较长的瞬态干扰,实现起来也比较容易,缺点是成本较高。 2旁路保护方法。这种方案利用瞬态抑制元件(如 TVS、MOV、气体放电管等)将危害性的瞬态能量旁路到大地,优点是成本较低,缺点是保护能力有限,只能保护一定能量以内的瞬态干扰,持续时间不能很长,而且需要有一条良
44、好的连接大地的通道,实现起来比较困难。实际应用中是将上述两种方案结合起来灵活加以运用,如图 14。在这种方法中,隔离接口对大幅度瞬态干扰进行隔离,旁路元件则保护隔离接口不被过高的瞬态电压击穿。 PC 机与单片机的通讯设计大多数的电脑设备都具有 RS-232C 接口,尽管它的性能指标并非很好。在广泛的市场支持下依然常胜不衰。就使用而言,RS-232 也确实有其优势:仅需 3 根线便可在两个数字设备之间全双工的传送数据。不过,RS-232C 的控制要比使用并行通讯的打印机接口更难于控制。RS-232C 使用了远较并行口更多的寄存器。这些寄存器用来实现串行数据的传送及 RS-232C 设备之间的握手
45、与流量控制。本文将分别描述 PC机及单片机 MCS-51 的串行通讯的原理及具体的软件设计。 RS-232C 介绍与 PC 硬件 使用查询方法的串行通讯程序设计 使用中断的串行通讯程序设计 MCS-51 串行通讯 关于 RS485 (1) RS-232C 介绍与 PC 硬件: RS-232C 使用-3 到-25V 表示数字“1”,使用 3V 到 25V 表示数字“0”,RS-232C 在空闲时处于逻辑“1”状态,在开始传送时,首先产生一起始位,起始位为一个宽度的逻辑“0”,紧随其后为所要传送的数据,所要传送的数据有最低位开始依此送出,并以一个结束位标志该字节传送结束,结束位为一个宽度的逻辑“1
46、”状态。 PC 机一般使用 8250 或 16550 作为串行通讯的控制器,使用 9 针或 25 针的接插件将串行口的信号送出。该插座的信号定义如下: DB-25 DB-9 信号名称 方向 含 义 2 3 TXD 输出 数据发送端 3 2 RXD 输入 数据接收端 4 7 RTS 输出 请求发送(计算机要求发送数据) 5 8 CTS 输入 清除发送(MODEM 准备接收数据) 6 6 DSR 输入 数据设备准备就绪 7 5 SG - 信号地 8 1 DCD 输入 数据载波检测 20 4 DTR 输出 数据终端准备就绪(计算机) 22 9 RI 输入 响铃指示 以上信号在通讯过程之中可能会被全部
47、或部分使用,最简单的通讯仅需 TXD 及 RXD 及 SG 即可完成,其他的握手信号可以做适当处理或直接悬空,至于是否可以悬空这视乎你的通讯软件。比如说,如果使用DOS 所提供的 BIOS 通讯驱动程序,那么,这些握手信号则需要做如下处理,因为 BIOS 的通讯驱动使用了这些信号。如果使用自己编写的串行驱动程序则可以完全不使用这些握手信号(详见下面有关章节)。 PC 机一般使用 8250 或 16550 的作为串行通讯控制器,8250 及 16550 的管脚排列如下: 8250(16550)的寄存器如下表所示: 基地址 读/写 寄存器缩写 注 释 0 Write - 发送保持寄存器(DLAB=0) 0 Read - 接收数据寄存器(DLAB=0) 0 Read/Write - 波特率低八位(DLAB=1) 1 Read/Write IER 中断允许寄存器 1 Read/Write - 波特率高八位(DLAB=1) 2 Read IIR 中断标识寄存器 2 Write FCR FIFO 控制寄存器 3 Read/Write LCR 线路控制寄存器 4 Read/Write MCR MODEM 控制寄存器 5 Read LSR 线路