五、多机通信

五、多机通信

利用89C51的串行口可以实现多个89C51单片机之间的异步通信。主从式多机通信系统结构图如图5-23所示。在这种方式中,只有一台主机,可以有多台从机。主机发送的信息可以传送到各个从机或指定的从机,各个从机发送的信息只能被主机接收,从机之间不能进行直接通信。

图5-23 主从式多机通信系统

在主从式多机系统中,主机发出的信息有两类:一类为地址,用来确定需要和主机通信的从机,其串行传送的第9位数据为1;另一类是数据,其串行传送的第9位数据为0。对从机来说,要利用SCON寄存器中的SM2位的控制功能。在接收时,若SM2=1,那么TB8=1时才能完成接收;而若SM2=0,则发送的第9位TB8必须为0接收才能进行。因此,对于从机来说,在接收地址时,应使SM2=1,以便接收到主机发来的地址,从而确定主机是否打算和自己通信,一经确认后,从机应使SM2=0,以便接收TB8=0的数据。

主从多机通信的过程如下:

(1)使所有的从机的SM2位置1,以便接收主机发来的地址。

(2)主机发出一帧地址信息,其中包括8位需要与之通信的从机地址,第9位为1。

(3)所有从机接收到地址帧后,各自将所接收到的地址与本机地址相比较,对于地址相同的从机,使SM2位清零以接收主机随后发来的所有信息;对于地址不符合的从机,仍保持SM2=1的状态,对主机随后发来的数据不予处理,直至发送新的地址帧。

(4)主机给已被寻址的从机发送控制指令和数据(数据帧的第9位为0)。

【例5-17】如图5-24所示,系统由一个主机和两个从机组成。主机为89C51-A:P1口接指拨开关,P2口接指拨开关,P0口接8个LED;从机89C51-B:P1.4~P1.7接指拨开关S3,P2口接8个LED;从机89C51-C类似于89C51-B。编写相应的程序。

图5-24 三个89C51多工通信电路图

(1)当89C51-A的指拨开关S2切换时,此数据会发送给89C51-B,并控制其P2口8个LED的亮灭。同理,当89C51-A的指拨开关S1切换时,此数据会发给89C51-C,并控制其P2口8个LED的亮灭。

(2)当89C51-B的指拨开关S3切换时,此数据会发送给89C51-A,并控制其P0口低四位LED的亮灭。同理,当89C51-C的指拨开关S4切换时,此数据会发送给89C51-A,并控制其P0口高4位的LED的亮灭。

解:主机89C51-A主程序和中断程序流程图如图5-25所示。从机89C51-B和89C51-C的主程序和中断程序流程图如图5-26所示。

图5-25 主机89C51-A主程序和中断程序流程图

图5-26 从机89C51-B的主程序和中断程序流程图

主机89C51-A程序清单如下:

从机89C51-B程序清单如下: