7.3.3 串行口方式2和方式3的应用——多机通信
80C51串行口的方式2和方式3有一个专门的应用领域,即多机通信领域。多机通机通常采用主从式多机通信方式,在这种方式中,使用一台主机和多台从机。主机发送的信息可以传送到各个从机或指定的从机,各从机发送的信息只能被主机接收,从机与从机之间不能进行通信。图7-19是多机通信的一种连接示意图。
图7-19 多机通信连接示意图
多机通信的实现主要依靠主、从机之间正确地设置与判断SM2和发送或接收的第9位数据来(TB8或RB8)完成。我们首先将上述二者的作用总结如下:
在单片机串行口以方式2或方式3接收时,一方面,若SM2=1,表示置多机通信功能位,这时有两种情况:第一,接收到第9位数据为1。此时数据装入SBUF,并置RI=1,向CPU发中断请求;第二,接收到第9位数据为0。此时不产生中断,信息将被丢失,不能接收。另一方面,若SM2=0,则接收到的第9位信息无论是1还是0,都产生RI=1的中断标志,接收的数据装入SBUF。根据这个功能,就可以实现多机通信。
在编程前,首先要给各从机定义地址编号,如00 H、01 H、02 H等。在主机想发送一个数据块给某个从机时,它必须先送出一个地址字节,以辨认从机。编程实现多机通信的过程如下:
(1)主机发送一帧地址信息,与所需的从机联络。主机应置TB8为1,表示发送的是地址帧。例如,指令MOVSCON,#0D8H的功能是设串行口为方式3,TB8=1,允许接收。
(2)所有从机初始化设置SM2=1,处于准备接收一帧地址信息的状态。
例如,指令MOVSCON,#0F0H的功能是设串行口为方式3,SM2=1,允许接收。
(3)各从机接收到地址信息,因为RB8=1,则置中断标志RI。中断后,首先判断主机送过来的地址信息与自己的地址是否相符。对于地址相符的从机,置SM2=0,以接收主机随后发来的所有信息;对于地址不相符的从机,保持SM2=1的状态,对主机随后发来的信息不理睬,直到发送新的一帧地址信息。
(4)主机发送控制指令和数据信息给被寻址的从机。其中主机置TB8为0,表示发送的是数据或控制指令。对于没选中的从机,因为SM2=1,RB8=0,所以不会产生中断,对主机发送的信息不接收。