MCS-51单片机串行通信口控制寄存器SCON中的SM2为方式2或方式3的多机通信控制位。当串行口以方式2或方式3工作时,若SM2设为1,此时只有当串行口接收到的第9位数据RB8=1时,才置“l”中断标志RI;若接收到的RB8=0,则不产生中断标志,信息被丢掉。利用串行口的这个特性,可方便地实现多机通信。
设在一个多机系统中有一个MCS-51单片机做主机和3个MCS-51单片机为从机,如图7-11所示。
图7-11 多机通信连接示意图
从机的地址分别为00H、01H和02H,从机系统由初始化程序(或相关处理程序)将串行口设定为方式2或方式3接收,即9位异步通信方式,且置“1”SM2和REN,允许串行口中断。在主机和某一个从机通信之前,先将从机地址发送给各个从机系统,接着才传送数据或命令,主机发出的地址信息的第9位为“1”,数据(包括命令)信息的第9位为“0”。当主机向各从机发送地址时,各从机的串行口接收到的第9位的信息即RB8为“1”,则置中断标志位RI为“1”,各从机响应中断,执行中断服务程序,判断主机送来的地址是否和本机(从机)地址相符合,若为本机(从机)的地址,则该从机清零SM2位,准备接收主机的数据或命令;若地址不相符,则保持SM2为“1”状态。接着主机发送数据,此时各从机串行口接收到的RB8=0,只有与前面地址相符合的从机系统(即已将SM2清零的从机)才能激活中断标志位RI,从而进入中断服务程序,在中断服务程序中接收主机的数据或执行主机的命令,实现和主机的信息传送;其他的从机因SM2保持为“l”,又RB8=0不激活中断标志RI,所接收的数据丢失不作处理。
图7-11所示的多机系统是总线型主从式通信系统,由主机控制多机之间的通信,从机和从机之间的通信只能经主机才能实现。
综上所述,现把多机通信的过程总结如下。
· 把全部从机的串行口初始化为工作方式2或方式3,置位SM2,允许中断。
· 主机置位TB8,发送要寻址的从机地址。
· 所有从机均接收主机发送的地址,并各自进入中断服务程序,进行地址比较。
· 被寻址的从机确认后,把自身的SM2清零,并向主机返回地址供主机校对。
· 核对无误后,主机向被寻址的从机发送命令,通知从机是进行数据接收还是进行数据发送。
· 主从机之间进行数据通信。
【例7-2】总线型主从式通信系统程序设计。
解:(1)主机向02号从机发送30H~3FH单元内的数据。
ORG 8000H
MAIN: MOV SCON,#98H ;串行口方式2,令SM2=0、REN=1,TB8=1
MCALL: MOV SBUF,#02H ;呼叫02主机
CJDZ: JBC TI,WDZ
SJMP CJDZ
WDZ: JBC RI,YDDZ ;等待应答地址
SJMP L2
YDDZ: MOV A,SBUF ;取出应答地址
XRL A,#02H ;判断是否02号机应答
JZ RIGHT ;若是02号机,转发送数据
AJMP MCALL ;若不是02号机,重新呼叫
RICHT:CLR TB8 ;联络成功,清除地址标志
MOV R0,#30H ;数据区首址送R0
MOV R2,#16 ;字节数送R2
LOOP: MOV A,@R0 ;取发送数据
MOV SBUF,A ;启动发送
WTI: JBC TI,NEXD ;判发送中断标志
SJMP WTI
NEXD: INC R0 ;调整地址指针
DJNZ R2,LOOP ;未发完继续发送
AJMP MAIN
(2)从机(02号)响应主机呼叫的联络程序。
ORG 8000H
MOV R0,#30H ;从机数据区首址
MOV R2,#16 ;接收字节长度
C02: MOV SCON,#0BOH ;串行口工作方式2,SM=2,REN=1
WTZJ: JBC RI,QDZ ;等待主机发送
SJMP WTZJ
QDZ: MOV A,SBUF ;取出呼叫地址
XRL A,#02H ;判断是否呼叫本机(02号)
JNZ WTZJ ;不是本机,继续等待
CLR SM2 ;是本机,清SM2
MOV SBUF,#02H ;向主机发应答地址
SDZ: JBC TI,WZD ;等待本机发完地址
SJMP SDZ ;未发完继续
WZD: JBC RI,ZCOK ;等待主机发送数据
SJMP WDZ
ZCOK: JNB RB8,RIGHT ;再判断联络成功否
SETB SM2 ;未联络成功,恢复等待主机发送
SJMP WTZJ
RIGHT: MOV A,SBUF ;联络成功,取主机发来的信息
MOV @R0,A ;数据送缓冲区
INC R0 ;调整地址指针
DJNZ R2,WZD ;未接收完继续接收主机数据
AJMP C02