| 单片机RS-485多机通讯的实现 |
尹 红 唐 煜
摘 要 本文介绍一种能利用RS-485电气特性和简单的结构方式,采用自定义串行通信协议,实现单片机RS-485多机通讯的方法和技巧。
关键词 单片机,RS-485总线,总线冲突,串行通信
1 简介
RS-485串行总线接口标准以差分平衡方式传输信号,具有很强的抗共模干扰的能力,允许一对双绞线上一个发送器驱动多个负载设备。工业现场控制系统中一般都采用该总线标准进行数据传输,而且一般采用RS-485串行总线接口标准的系统都使用8044芯片作为通信控制器或各分机的CPU。8044芯片内部集成了SDLC,HDLC等通信协议,并且集成了相应的硬件电路,通过硬件电路和标准协议的配合,使系统的通讯准确、可靠、快速。8044在市场上日渐稀少,虽然有8344可替代,但几百元的价位与普通单片机几元至几十元的价位相差甚远,用户在开发一般的单片机应用系统时,都希望能用简单的电路和简单的通信协议完成数据交换。譬如:利用单片机本身所提供的简单串行接口,加上总线驱动器如SN75176等组合成简单的RS-485通讯网络。本文所述的方法已成功地应用于工程项目,一台主机与60台从机通讯,通讯波特率达64KBPS。
2 总线驱动器芯片SN75176
常用的RS-485总线驱动芯片有SN75174,SN75175,SN75176。SN75176芯片有一个发送器和一个接收器,非常适合作为RS-485总线驱动芯片。
SN75176及其逻辑如图1所示。

| 图1 SN75176芯片及其逻辑关系 3 RS-485方式构成的多机通信原理 |

| 图2 采用RS-485构成的多机通讯原理框图 在总线末端接一个匹配电阻,吸收总线上的反射信号,保证正常传输信号干净、无毛刺。匹配电阻的取值应该与总线的特性阻抗相当。 |

| 图3 串行口模式3时序图 单片机在串行口发送数据时,只要将8位数据位传送完毕,TI标志即建立,但此时应发送的第九位数据位(若发送地址帧时)和停止位尚未发出。如果在这是关闭发送控制,势必造成发送帧数据不完整。如果单片机多机通讯采用较高的波特率,几条操作指令的延时就可能超过2位(或1位)数据的发送时间,问题或许不会出现。但是如果采用较低波特率,如9600,发送一位数据需100μs左右,单靠几条操作指令的延时远远不够,问题就明显地暴露出来。接收数据时也同样如此,单片机在接收完8个数据位后就建立起RI信号,但此时还未接收到第九位数据位(若接收地址帧时)和停止位。所以,接收端必须延时大于2位数据位的时间(1位数据位时间=1/波特率),再作应答,否则会发生总线冲突。 |

| 图4 程序流程图 注:延时T秒的取值 |