MCS-51系列单片机具有多机通信功能,利用它可构成各种分布式系统。
1.多机通信原理
8051的多机分布式系统如图7-47所示,这是全双工通信方式,主机与各从机可实现全双工通信,而各从机之间只能通过主机交换信息。
多机通信中,要保证主机与所选择的从机实现可靠通信,必须保证通信接口具有识别功能。而MCS-51系列单片机串行接口控制寄存器中的SM2就是满足这一要求而设置的多机控制位,其多机控制原理如下:
在串行接口以方式2(或方式3)接收时,若SM2=1,表示置多机通信功能位,这时出现两种可能情况:接收到第9位数据为1时,数据才装入SBUF,并置RI=1向CPU发出中断请求;如果接收到第9位数据为0,则不产生中断标志,信息将抛弃。若SM2=0,则接收到的第9位数据不论是0还是1都产生RI=1中断标志,接收到的数据装入SBUF中。根据这个功能,可实现多个MCS-51系列单片机应用系统的串行通信。
图7-47 8051多机分布式系统
2.多机通信的程序设计
(1)多机通信控制过程 设有一个多机分布式系统,其中有一个8031系统为主机,n个8031应用系统从机。不考虑接口驱动时,系统如图7-47所示,主机的RXD端与所有从机的TXD端相连,TXD端与所有从机的RXD端相连。
根据MCS-51多机通信原理,多机通信过程安排如下:
1)使所有从机的SM2位置1,处于只接收地址帧的状态。
2)主机发送一帧地址信息,其中包含8位地址,第9位为地址、数据标志位,第9位置1表示发送的是地址。
3)从机接收到地址帧后,各自将所接收的地址与本从机的地址相比较。对于地址相符的从机,使SM2清0以接收主机随后发来的所有信息;对于地址不相符合的从机,仍保持SM2=1状态,对主机随后发送的数据不予理睬,直至发送新的地址帧。
4)主机发送控制指令与数据,给被寻址的从机数据帧的第9位置0,表示发送的是数据或控制指令。
(2)通信协议的约定 要保证通信的可靠和有条不紊,相互通信时,必须有严格的通信协议。一般通信协议都有通用标准,协议较完善,但很复杂。这里,为了介绍MCS-51多机通信程序设计的基本原理,仅规定几条最基本的条款。
1)系统中从机容量为255台,其地址为00H~FEH。
2)地址FFH是对所有从机都起作用的控制命令,命令各从机恢复SM2=1的状态。
3)制定主机发送的控制命令代码,代码按00H、01H、02H、…顺序设置,其他均为为非法代码。
4)数据块长度:16个字节。
5)设置从机状态字,以表明从机的工作状态。本例中,从机状态字格式如下:
其中:ERR=1,从机接收到非法命令;
TRDY=1,从机发送准备就绪;
RRDY=1,从机接收准备就绪。
3.查询方式的多机通信实例
本例中主机命令编码为:
00H——复位命令;
01H——状态咨询命令;
02H——要求从机接收主机的数据命令;
O3H——要求从机向主机发送数据命令;
其他——非法命令。
每一次传送的数据块长度为16个字节。
(1)主机通信程序 工作寄存器设定为
(R0)——从机发送数据块首址;
(R7)——从机发送数据块长度;
(R2)——从机地址。
查询方式多机通信主机程序流程如图7-48所示。
主机程序清单:
图7-48 查询方式多机通信主机程序流程图
(2)从机通信程序(以2号从机为例) T作寄存器设定为:(www.xing528.com)
(RO)-发送数据块首地址:
(R7)-发送数据块长度。
如图7-49所示为查询方式多机通信2号从机程序流程图。
图7-49 查询方式多机通信2号从机程序流程图
4.中断方式的多机通信实例
本例中主机命令编码为:00H——要求从机接收数据块;01H——要求从机发送数据块;其他——非法命令。每一次传送的数据块长度为16个字节。
下面给出中断方式的多机通信实例,其主机通信程序部分以子程序方式给出,要进行串行通信时,可直接调用;从机部分以串行接口中断服务方式给出,其中断入口地址为0023H。若从机未作好接收或发送准备,就从中断程序返回,在主程序中做好准备。因此主机此时不能简单地等待从机准备就绪,而应重新和从机联络,使从机再次进入串行接口中断。系统可采用定时器1作波特率发生器,也可采用固定波特率。主机和从机的定时器初始化程序从略。
1)主机串行通信子程序:图7-50为中断方式多机通信主机程序流程图。工作寄存器设定为:
(R2)——被寻址从机地址;
(R3)——主机命令;
(R4)——数据块长度;
(R0)——主机发送数据块首址;
(R1)——主机接收的数据块首址。
程序清单:
图7-50 中断方式多机通信主机程序流程图
若主机向10号从机发送数据块,数据块放置在片内RAM区的40H~5FH单元中(数据块长度为32个字节),则调用上述通信子程序的主程序中应有下列的初始化指令段:
MOV R2,#0AH
MOV R3,#01H
MOV R4,#20H
MOV R0,#40H
LCALL MSIO
从机的串行通信采用中断控制启动方式。在串行通信启动后仍采用查询方式来接收或发送数据块。从机的主程序中应包括定时器1波特率设定及初始化、开中断等程序段。初始化包括工作寄存器赋值、状态标志设置等。本程序实例中用F0作发送准备就绪标志,PSW.1作接收准备就绪标志。
若从机接收数据块长度为16个字节,接收后送入片内RAM区的首址为40H单元,发送数据放置在片内RAM区的首地址为50H单元。因此其从机主程序中有关部分指令如下(中断服务程序选用工作寄存器为Ⅱ区):
MOV SP,#1FH;设栈指针
MOV SCON,#0F0H;置串行接口方式3,SM2=1,允许接收
MOV 08H#40H;接收数据缓冲区首址→R0
MOV 09H#50H;发送缓冲区首址→R1
MOV 0AH#10H;发送或接收字节数→R2
2)串行接口中断服务程序:图7-51所示为中断方式多机通信从机中断服务程序流程图。
中断服务程序清单(由0023H转来):
图7-51 中断方式多机通信从机中断服务程序流程图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。