武汉波仕电子公司 2011-3
8051单片机的串行通信里可以支持多处理器通信,本文讨论的就是这方面的技巧。不过若连接的对象是PC机时,(9600bps,n,8,1)反而是最常用的通信格式,所以本文介绍的是要实现多个8051单片机与PC机的连接实例,因为PC机身我们身边最常用且最方便取得外部设备,当然你也可以用两块8051单片机做串口通信实验。
8051单片机串行传输模式2和模式3可以做多处理器通信,其中的重点正在SCON寄存器的SM2位和TB8及RB8位上,这几位就决定了多处理器通信的核心。至于波特率的问题,只要发送与接收的双方一致即可。图1 是一个典型的多处理器通信的连接示意图。
多处理器通信与RS-232的一对一通信的最大的差异就是多了一个地址传输码。一对一通信时,我送数据就轮到你接收,而你送数据时就换成为我接收,完全没有商量的余地。但是多处理器通信时,主CPU发出的信息如何正确地传到某个从CPU呢?针对这个问题,在多处理器系统中每一个从CPU都有其特定的编号(也有人称为ID),在数据传输前面个从CPU都处于待命的状态,当主CPU指定到某个特定的从CPU时,改从CPU才开始接收或发送数据,而这项指定特定从CPU的操作,实际上就是送出地址ID值,每个从CPU上的程序收到地址后,会先判断一下是否叫到要启动,若属实则开始执行启动的所有程序。接下来我们用一步一步说明的方式,详细介绍多处理器通信额程序。
在多处理器通信中我们一直提到“地址传送”,在串行通信时,我们如何去辨别地址值(Adress)和数据(Data)呢?这正是8051串行模式2和模式3的魅力所在。当8051工作在以上两个模式时,除了数据占8位外,传输时多了一个TB8位,接收时则多了一个RB8位。在多处理器通信时,当TB8=1代表正传输一个地址值,该地址值有8位宽,所以理论上可以连接256个CPU在同一个系统中。TB=0代表正在传输一个数据值,在此串行传输线上,每笔串行数据共有11个位,但其中以第10个位的状态来区分地址或数据,接收端可以依此格式立刻判断出其中的差异来。
在从CPU上通常以串行中断的方式来对待进来的数据,若把SCON寄存器的SM2位设置成为1时,即允许8051的串行接口做多处理器的地址判断,在这个模式下:
CPU只在接收地址值(其RB8=1)时才产生中断要求。
在串行中断的服务程序上,只要由SBUF内读回地址值,再做一个判断是否被调用。若YES时则跳去执行程序设置的操作,若NO时则不做任何操作,随即结束此中断服务程序回主程序,被指定到的从CPU先设置成为SM2,然后开始发送或者接收数据,而其他的从CPU并未启动传输,所以此瞬间仍然是一对一的通信,当主CPU在最初的发送地址阶段却是一对多的通信。图1的连接方式是否可以用RS-232呢?答案是否定的。
当主CPU传送数据给各从CPU时,如果只有发送其他都是接收的情况下是可以使用RS-232的构架,可是当主CPU欲收数据而其中只有一个从CPU发送时,会造成数据电平冲突,使得主CPU无法由RXD脚上得到正确值。因此,在实际应用上改采用另外一种传输规格RS-422,这种传输方式只有传输的硬件上不同而已,软件上的串行通信程序都无需做任何修改。波仕电子的H485C型号的转换器可以实现单片机TTL电平的串口与RS-422之间的相互转换。RS-422的传输线有4条(T+、T—、R+、R—),其连接方式如图2。注意波仕电子的H485C转换器还具有将PC机的RS-232转换为RS-422/485的功能,所以如果上位机的接口上计算机的RS-232口,也一样可以用H485C。
另外一种常用的多处理器传输的接口上RS-485接口,只要2根线就可以将多个CPU连接在一起,这种做法使得数据共享的可能性大为提高,请看图3的RS-485连线图。波仕电子的H485C型号的转换器还可以实现单片机TTL电平的串口与RS-422之间的相互转换,。当多处理器以RS-422接口连接时,一定有一个主CPU和多个从CPU,若想作从CPU之间的数据传输时,所传输的路径是从CPU到主CPU ,然后由主CPU再送给另外一个从CPU。若采用图3的RS-485构架时,只要传输线空闲,任意两个CPU,无论主从,都可以相互传输数据,完全没有主从之分。若以此构架再做发展时,就形成了现在我们常用的ARCNET或ETHERNET的LAN网络了。
为什么要将8051的串行口抓换为RS-485呢?首先可以方便地实现多机通信。另外通信距离也有TTL的几米延长到了1200米!虽然波仕的H485C也可以将PC机的RS-232口转换为RS-485或者RS-422,但是现在许多新的计算机都已经没有了RS-232串行口,且操作系统都是WINDOWS。那么就需要加USB到RS-485的转换器。由于USB的驱动程序几乎都是WINDOWS版的,所以你只能够在WINDOWS下与从单片机进行通信。波仕的USB1485型号的转换器提供了USB与RS-485或者RS-422的转换。