1 引言
RS-485是一种平衡传送的串行接口尺度,比最早的采纳非平衡方式传送的RS-232串行接口尺度在电气指标上有了大幅度的提高。由于RS-485总线通信距离远,抗干扰才气强,结构简略,可靠性高,普遍运用于多机远距离通信系统中。其最大传输距离在数据传输速率为100kbps时为120m,传输速率为10kbps时为1.2km,传输速率降为300bps时可超过4km。最大传输距离的增加是就义数据传输速率为代价的。如果即要保证传输速度,而传输距离又超过RS-485的可靠通信距离时,必须加中继器延长其通信距离。
中继器的设计计划很多,本文采纳DALLAS公司具有双串行通读口的单片机DS80C520来实现。该方式硬件电路特别简略,软件设计方便,大大提高了中继器的可靠性。
2 工作原理
DS80C520完全兼容8051的指令,外接晶振频率最高可达33MHz,在相同的晶振频率下其指令平均履行速度是8051的2.5倍,而且具有电源失效自动复位和内置看门狗电路,低功耗设计,可靠性高。管脚的排列和8051完全相同,通过管脚复用,DS80C520具有13个中止源(其中有6个外部中止)、3个定时器和两个全双工的串行端口,大大扩大了系统的资源[1]。运用它的两个串行端口和两片SN75LBC184相连,可以很方便地设计一个高传输速率、高可靠性的RS-485中继器,其硬件电路如图1所示。
SN75LBC184是具有瞬变高压克制功效的RS-485接口芯片,能抗雷击,防静电放电,避免因交流电故障引起的非正常高压脉冲冲击。最高传输速率可达250kbps。在传输速率为9600b/s,传输距离在1km以内,用SN75LBC184作为接口芯片的RS-485总线上理论上可以挂64个网络节点[2]。实际运用时,因线缆长度、线径、网络散播、传输速率不同,实际节点数均达不到理论值,可到达70%左右。位于总线两端的差分端口A与B之间跨接120Ω匹配电阻,以减少由于不匹配而引起的反射、吸收噪声,有效地克制了噪声干扰。
单片机DS80C520通过掌握收发器SN75LBC184的收发使能端(RE#、DE)作收发掌握:当收使能端RE#为“0”时,收发器准备从A、B端(和总线相连)接受来自总线的数据,并通过R端传给MCU;当发使能端DE为“1”时,收发器准备把从D端读入的数据通过A、B端发送到总线上。图中两片SN75LBC184的收发使能端(RE#、DE)各自相连,辨别由单片机的P3.3口和P1.5口掌握,工作在半双工方式下。LED1和LED2用来指点TXD0和TXD1上是否有数据发送。LED3用来指点单片机的工作状况是否正常。
中继器的工作原理为:两片SN75LBC184的收发使能端一开始给低电平,准备接受数据。当其中一个收发器收到数据时,比如U2,U2通过R端将数据经单片机的RXD0脚送入串行接口0的接受缓冲区SBUF0。单片机将SBUF0中的数据转到串行接口1的发送缓冲区SBUF1,然后让U3的发送使能端(DE)有效,从而把U2一侧的总线上的数据完全地转送到U3一侧的总线上,实现了中继器的功效。反之亦然。
3 软件设计
由于采纳了具有两个串行口的单片机,中继器的软件设计也得到了简化。首要由三部分组成:一个主程序和两个中止子程序,结构非常清晰。
在主程序中,首要是设置串口的波特率(这里设置为9600bps)和看门狗复位时光,打开两个串口的中止,然落伍入期待循环状况,期待串口接受中止的发生(RI0或RI1为“1”),其流程图如图2所示。在打开两个串口的中止之前,先对P3.3和P1.5清“0”,让两片SN75LBC184处于接受状况,并让串口工作在方式3。在“期待”的过程中如果不断给P3.6脚输出高、低变化的电平,则LED3就会不停地闪烁,从而可以判断单片机在正常工作。
因为串口工作在方式3,11位异步通信方式(1个起始位,8个数据位,1个附加的第9位和1个收场位),8位数据装入接受缓冲区,第9位放在对应的RB8(0/1)中,其他两位忽略,发送时收发器会自动加上。第9位数据通常用作数据的奇偶校验位,或在多机通信中作为地址/数据的特性位。当单片机收到第11位数据时,接受中止标志位RI(0/1)会自动置“1”。
以串口0接受串口1发送为例:当RI0为“1”时,程序就进入串口0接受中止子程序,其流程图如图3所示。进入中止子程序后,首先掩护现场,并关掉所有的中止,将RI0清“0”(RI(0/1)不能自动清“0”,只能软件清“0”)。然后将串口0接受缓冲区SBUF0中的8位数据装入串口1的发送缓冲区SBUF1,并将第9位数据从RB8_0转移到RB8_1中,如有必要也可以先做奇偶校验。此时,使P1.5输出高电平,启动U3发送数据到总线。当数据发送完毕时,串口1会自动将发送完毕状况位TI1置“1”,全部数据转发过程收场。在退出中止之前,还应当让串口1处于接受状况(TI1=0,P1.5=0),并将串口1的接受中止优先级高于串口0。
串口1接受串口0发送的中止子程序和上述过程完全类似,只要将相应的端口换过来就可以了。在退出中止之前,必然要让两个串口都处于接受状况,并且让串口0的接受中止优先级高于串口1。两个中止优先级轮换的目的是为了避免优先级低的中止总得不到响应。在进中止时也可将P3.6置“1”,退出中止时清“0”,让LED3在单片机工作时一直处于闪烁发光状况。
4 收场语
为了进一步提高抗干扰才气,中继器采纳单独+5V电源供电,并在每片芯片的电源引脚上加0.1uF的电容到地,总线采纳双绞线。本中继器在某仓库管理系统(1个主站,16个从站,波特率为9600bps,最远通信距离为4km)中运用,性能稳固,性价比高,可普遍运用于远距离多机通信系统。