1、梁晨 3116301095用 51 单片机实现一主多从一、多机通信原理 在多机通信中,每台从机均分配有一个从机地址,主机与从机之间进行串行通信时,通常是主机先呼叫某从机地址,唤醒被叫从机后,主、从两机之间进行数据交换。而未被呼叫的从机则继续进行各自的工作。可是,如果在主机与某被呼叫从机进行数据交换过程中,其他从机如果不采取相应的数据识别技术,则这些从机就会因为串行通信线上有数据传输而时时被打断,影响正常的工作。利用单片机的串口工作方式 2、方式 3 可以很好解决上述问题。它们的通信方式之一如图 1 所示。图 1 多机通信结构图在多机通信过程中,从机首先要解决的是如何识别主机发送的是地址信息还是
2、数据信息。当发送的是地址信息时,各从机都响应串口中断,接收主机下发的一帧地址数据。而当主机发送数据帧时,无关从机可不响应串口中断。解决的方法是:当主机发送一帧地址信息时,应保持这帧数据的第 9 位为 1(即 TB8=1)。从机按照工作方式 2 或工作方式 3 运行时,将串口寄存器 SCON 中的控制位 SM2 置为 1,当所接收的一帧数据的第 9 位为 1,所有从机都产生串口中断,接收这一帧地址数据并与各自的从机地址进行比较,以判断主机是否要与本机通信。接收到的地址数据与从机地址相等达到为被呼叫从机,该从机将串口控制寄存器 SCON 中的控制位 SM2 清为 0,去接收主机发送来的数据帧(数据
3、帧的第 9 位为 0),此时不管接收到的第 9 位数据是否为 1 或 0,都要产生串口中断,这就保证了主机与被呼叫从机间的正常数据通信。数据通信结束后,该从机又重新将串行口控制寄存器SCON 中的控制位 SM2 置为 1,为下一次与主机进行通信做好准备。其他从机则一直在SM2=1 下继续自己的工作,不会因为主、从机之间的数据通信而被打断。多机通信的实现,主要靠主、从机正确地设置与判断多机通信控制位 SM2 和发送或接收的第 9 位数据(TB8 或 RB8)。当主机给从机发送信息时,要根据发送信息的性质来设置 TB8,发送地址信号时,设置 TB8=1;发送数据或命令时,设置 TB8=0。当从机的
4、 SM2为 1 时,该从机只接收地址帧( RB8 位为 1),对数据帧( RB8 位为 0)将不予理睬。而当SM2 为 0 时,该从机接收所有发送来的信息。多机通信过程如下:(1 ) 使所有从机的 SM2 置 1,处于只接收地址帧的状态(即从机复位); (2 ) 主机发送一地址帧信息,其中包含 8 位地址,第 9 位为地址/数据标志位,第 9 位置1 表示发送的是地址;(3 ) 从机接收到地址帧后,各自中断 CPU,把接收到的地址与本地址作比较; (4 ) 地址相符的从机,使 SM2 清零以接收主机随后发来的所有信息,对于地址不相符的从机,仍保持 SM2=1 状态,对主机随后发送的数据不予理睬
5、,直到主机发送来新的地址帧;(5 ) 主机发送数据或控制信息给被寻址的从机;(6 ) 被寻址的从机,因 SM2=0,可以接收主机发送过来的所有数据,当从机接收数据结束时,置位 SM2,返回接收地址帧状态(复位状态); (7 )当主机改为与另外从机联系时,可再发地址帧寻址其从机,而先前被寻址过的从机恢复 SM2=1。二、设计思路单片机构成的多机系统常采用总线型主从式结构,即在多个单片机中,有一个是主机,其余的都是从机,从机要服从主机的调度、支配。目前广泛使用的串行扩展总线与串行扩展接口主要有 IC 总线、SPI 串行口,CAN 总线、USB 总线,本设计使用 IC 总线协议。IC 总线由两根线实
6、现串行同步通信,其中一根是时钟线 SCL,一根是数据线SDA。IC 总线一主多从系统配置原理如图 1 所示。IC 总线协议有明确的规定:采用 7 位的寻址字节(寻址字节是起始信号后的第一个字节)。D7D1 位组成从机的地址。D0 位是数据传送方向位,为 0 时表示主机向从机写数据,为 1 时表示主机由从机读数据。再使用 MAX487 组成 RS-485 通信网络,RS-485 采用平衡发送和差分接受方式来实现通信:在发送端 TXD 将串行口的 TTL 电平信号转换成差分信号 A、B 两路输出,经传输后在接收端将差分信号还原成 TTL 电平信号。MAX487 引脚如图 2 所示。图 2 MAX4
7、87 引脚图采用半双工方式进行通讯,在半双工方式下,允许双方向传输,但它们之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收,即甲机发送乙机接收,或者乙机发送甲机接收,因而两机之间只需要一条数据线。此时甲机和乙机均称为收发器。三、通信协议通信时,为了处理方便,通信双方应制定相应的协议。本文中主、从机串行口都设为方式 3,波特率为 1200bps, PCON 中的 SMOD 位都取 0,设 为 12MHz,定时/ 计数器 T1oscf的方式控制字为 20H,初值为 E6H,主机的 SM2 位设为 0,从机的 SM2 开始设为 1,从机地址从 00H-FEH。主机发送的控制命令:00
8、H:要求从机接收数据( TB8=0)01H:要求从机发送数据( TB8=)FFH:命令所有从机的 SM2 位置 1,准备接收主机送来的地址(TB8=1 )从机发给主机状态格式如图 3 所示:D7 D6 D5 D4 D3 D2 D1 D0ERR TRDY RRDY图 3 状态字格式其中:ERR=1,表示从机接收到非法命令TRDY=1,表示从机发送准备就绪RRDY=1,表示从机接收准备就绪。4、用 proteus 绘制电路原理图此电路图仅画出两个从机,不同从机仅仅是本机号不同,具体电路原理图如图 4 所示。图 4 一主多从电路原理图五、用 proteus 自带的编辑器编写程序主机、00H 从机,
9、01H 从机程序依次如图 5、6、7 。图 5 主机程序图 6 00H 从机程序图 7 01H 从机程序五、模拟仿真通过仿真,验证程序正确无误。六、不足与改进我的这个方案,不能直观的看出数据的接收与传送,如果能加入显示的元器件及程序就更好了。七、程序主机的通信程序MOV TMOD,#20HMOV TL1,#0E6HMOV TH1,#0E6HSETB TR1MOV SP,#4FHMOV R2,#01HMOV R3,#00HMOV R4,#10HMOV R0,#20HLCALL MASTERMOV R2,#02HMOV R3,#01HMOV R4,#10HMOV R1,#10HLCALL MAST
10、ERLOOP: SJMP LOOPMASTER: MOV SCON,#0D8HMASTER1: MOV A,R2MOV SBUF,AJNB RI,$CLR RIMOV A,SBUFXRL A,R2JZ MASTER3MASTER2: MOV SBUF,#0FFHSETB TB8SJMP MASTER1MASTER3: CLR TB8MOV SBUF,R3JNB RI,$CLR RIMOV A,SBUFJNB ACC.7,MASTER4SJMP MASTER2MASTER4: CJNE R3,#00H,MASTER5JNB ACC.0,MASTER2CLR TIMST_TX: MOV SBUF,
11、R0JNB TI,$CLR TIINC R0DJNZ R4,MST_TXRETMASTER5: JNB ACC.1,MASTER2MST_RX: JNB RI,MST_RXCLR RIMOV A,SBUFMOV R0,AINC R1DJNZ R4,MST_RXRETEND从机的通信程序,不同的从机,只需修改 B 的值。MOV TMOD,#20HMOV TL1,#0E6HMOV TH1,#0E6HMOV B,00HSETB TR1MOV SP,#4FHMOV SCON,#0F0HSETB PSW.3MOV R0,#20HMOV R1,#10HMOV R2,#10HSETB F0SETB PSW.
12、1SETB ESSETB EASJMP $SSIO: CLR RICLR EAPUSH ACCPUSH PSWSETB RS0CLR RS1MOV A,SBUFXRL A,BJZ SSIO1RETUNR: POP PSWPOP ACCRETISSIO1: CLR SM2MOV SBUF,BJNB RI,$CLR RIJNB RB8,SSIO2SETB SM2SJMP RETUNRSSIO2: MOV A,SBUFCJNE A,#02,LOOPLOOP: JC SSIO3MOV SBUF,#80HSJMP RETUNRSSIO3: JZ CMD0CMD1: JB F0,SSIO4MOV SBUF,#00HSJMP RETUNRSSIO4: CLR TIMOV SBUF,#02CLR F0LOOP1: JNB TI,LOOP1CLR TIMOV SBUF,R1INC R1DJNZ R2,LOOP1SETB SM2SJMP RETUNRCMD0: JB PSW.1,SSIO5MOV SBUF,#00HSJMP RETUNRSSIO5: MOV SBUF,#01HCLR PSW.1LOOP2: JNB RI,LOOP2CLR RIMOV R0,SBUFINC R0DJNZ R2,LOOP2SETB SM2SJMP RETUNREND