《单片机原理及应用多机通信》由会员分享,可在线阅读,更多相关《单片机原理及应用多机通信(29页珍藏版)》请在金锄头文库上搜索。
1、单片机原理及应用单片机原理及应用北京化工大学信息科学与技术学院主讲教师:林伟国E-mail: E-mail: linwgmail.buct.edu,cnlinwgmail.buct.edu,cn多机通信多机通信MCS-51系列单片机的串行通讯方式系列单片机的串行通讯方式2和和方式方式3是有多机通讯功能,可构成多种分是有多机通讯功能,可构成多种分布式通讯系统。一个全双工主从方式多机布式通讯系统。一个全双工主从方式多机通讯系统的原理框图如下:通讯系统的原理框图如下: TXD RXD 主机0#机1#机 N#机理论上来说,一台主机可以接256台从机。但实际上做不到,因为其受限于串口的驱动能力。而且,上
2、述这种接法其通讯距离=1m。、为了实现远距离通信,也为了增加驱动能力(带负载能力),一般采用RS-485总线进行串行通讯,这时要变成半双工通讯。不同的RS-485总线驱动芯片的带负载能力不同,有的可以带32个从机,也有的可以带64个从机,带128个从机等等。上图中,主机可以与任何一台从机实现通讯,从机之间的通讯必须通过主机转发。多机通讯的基本原理多机通讯的基本原理 在多机通讯系统中,为了保证主机与从机之间能可靠通讯,串行通讯必须是具备识别能力的。在MCS-51单片机中,其串行通讯控制寄存器SCON中设有多机通讯选择位SM2。当主机的SM2无要求时,SM0、SM1=10或11时,其工作于方式2或
3、方式3,即多机通讯方式。主机通过对TB8的设置以区别发送的是地址帧(TB8=1)还是数据帧(TB8=0)。多机通讯的基本原理多机通讯的基本原理从机对接收到的RB8进行识别:当从机的SM2=1时,如果接收到的RB8=1,则确认为呼叫地址帧,将该帧内容装入SBUF中,并置位RI,向CPU请求中断,进行地址比较。如果RB8=0则为数据帧,将不予以理睬,接收的信息被丢弃。当从机的SM2=0时,则无论是地址帧还是数据帧均接手,并置位RI=1,向CPU请求中断,将该帧内容装入SBUF中。多机通讯的过程多机通讯的过程 1、置全部从机的SM2=1,处于只接收地址帧的状态;2、主机首先发送呼叫地址帧信息,将其中
4、的TB8设置为1,以表示发送的是呼叫地址帧;3、所有从机接收到呼叫地址帧后,各自将接收到的主机呼叫的地址帧与自身的地址相比较;若比较结果相等,则为需要寻址的从机,清除SM2,准备接收主机发送的数据帧,直到全部的数据传输完毕;多机通讯的过程多机通讯的过程4、若比较不相等,则为非寻址的从机,仍然维持SM2=1不变,对其后发送过来的数据不予以理睬,即接收到的数据帧内容不装入SUBF中,不置位RI=0,不会产生中断请求指导正确的寻址为止。5、主机发送完呼叫地址帧之后 ,即?发送一连串数据帧,其中的TB8=0,以示为数据帧。6、当主机寻呼其他从机时,通过分析得知在寻呼其他从机后,维持其SM2=1,对其后
5、主机发送的数据不予以理睬。多机通讯协议多机通讯协议 1、主从多机通讯系统,允许配置255台从机,各从机的地址00HFEH.2、约定地址FFH为全部从机的控制命令,命令各从机恢复SM2=1状态,准备接收主机的地址呼叫。3、主机和从机的联络过程约定:主机首先发送地址呼叫帧,被寻址的从机回送本机地址给主机,经验证地址相等后再向被寻址的从机发送命令字,被寻址的从机根据命令字要求回送本机数据及状态多机通讯协议多机通讯协议4、约定主机发送的命令字为:01H:要求从机发送数据块其他:非法命令5、从机的数据格式约定:D7 D6 D5 D4 D3D2 D1 D0ERR CON1 CON2 0 X X X X 定
6、义: 若ERR=1, 从机接收到非法命令,0为正常 若CON1=1,从机状态1异常,0为正常 若CON2 =1,从机状态2异常,0为正常D7 D6 D5 D4D3D2 D1 D0X x x x x x x x高4位数据主机程序:主机程序: 呼叫从机号在60H中数据块首地址为30H波特率为2400H禁止串口中断 FLAG BIT 00H SLADD BYTE 60HORG 0000HAJMP MAIN ORG 0030HMAIN: MOV SP,#70H MOV TMOD,#20H ;T1 方式2,8位自动 重装载 MOV PCON,#80H MOV SCON,#D8H; SM0 SM1 SM2
7、 REN TB8 RB8 TI RI; 1 1 0 1 1 0 0 0; SM2对主机没有要求 MOV TH1,#0F3H MOV TL1,#0F3H;波特率为2400H CLR FLAG SETB TR1NEXTLP: MOV R0,#30H MOV R6,#10HLOOP: MOV R7,#02H CALL AddR JBC FLAG,NEXTS CALL RDDATA AJMP NEXTANEXTS: INC R0 INC R0NEXTA: INC SLADD DJNZ R6,LOOP AJMP NEXTLPADDR:MOV A,SLADD;取从机号MOV SBUF,A;发送从机号JNB
8、 TI,$;等待发送结束CLR TI;清TI标志JNB RI,$;等待从机回答本机地址CLR RI;清RI标志MOV A,SUBF;读取从机回答地址CJNE A,SLADD,RETN;地址不符,返回CLR TB8;地址相等,清TB8 准备发送命令RETRETN: SETB FLAG RETRDDATA: MOV A,#01H MOV SBUF,A JNB TI,$ CLR TIRPT: JNB RI,$;等待回送从机状态 CLR RI MOV A,SUBF MOV R0,A INC R0 DJNZ R7,RPT RET从机程序:从机程序:本机地址在4FH中;接收到数据为#01H,表示要向主机发
9、送数据;数据保存在31H,32H单元中 SM0 SM1 SM2REN TB8 RB8 TI RI; 1 1 1 1 0 0 0 0FLAG BIT 00HFALGAD BIT 01HORG 0000HAJMP MAINORG 0023HAJMP COMORG 0030HMAIN: MOV SP,#70H MOV TMOD,#20H;T1 方式2,8位自动重装载 MOV TH1,#0F3H MOV TL1,#0F3H ;波特率为2400H MOV PCON,#80H MOV SCON,#D8H SETB TR1 SETB ES;采用中断方式接收主机呼叫SETB EACLR FLAG SETB F
10、LAGAD;初始值为1,接收地址呼叫RPT:JNB FLAG, RPT CLR FLAG CALL TDATA SETB SM2AJMP RPTCOM:CLR ES;禁止中断 JNB FLAGAD,COMDCLR RIMOV A,SBUFCJNE A,4FH,EXIT1MOV SBUF,A;回送地址JNB TI,$CLR TICLR SM2;准备接受命令和数据 CLR FLAGADEXIT1:SETB ESRETICOMD: CLR RI MOV A,SBUF CJNE A,#01H,EXIT2 SETB FLAG SETB ES RETIEXIT2: CJNE A,#0FFH,EXIT3 S
11、ETB SM2 SETB FLAGADEXIT3: SETB ES RETI TDATA: MOV A,31H MOV SBUF,A JNB TI,$ CLR TI MOV A,32H MOV SBUF,A JNB TI,$ CLR TI RET基于RS-485通信的数据采集控制分站的程序设计系统以10ms采样周期采样锅炉中水的温度;高,低液位开关正常时输出高电平,超出设定液位时输出低电平,分别连接外部中断0和1;系统异常时输出低电平,控制光藕继电器输出报警信号;水位的控制通过输出-20mA控制阀门开度调节水流量水温及液位状态通过RS-485总线上传给监控机数据采样采用位A/D从机程序设计从机
12、程序设计本机地址在4FH中;接收到数据为#01H,表示要向主机发送数据;数据保存在31H,32H单元中 数据格式:液位高液位低X X X X(状态)(状态)数据高位 X X X X X X X X 数据低等位FLAGE0 BIT 00HFALGE1 BIT 01HFLAGT0 BIT 02HFLAGS0 BIT 03HFLAGAD BIT 04HORG 0000HAJMP INIT ORG 0003H AJMP EINT0 ORG 000BH AJMP T0INT ORG 0013H AJMP EINT1ORG 0023HAJMP COMORG 0030HINIT: MOV SP, #70H
13、MOV TMOD, #XXH MOV TH0, #XXH MOV TL0, #XXH MOV TH1, #0F3H MOV TL1, #0F3H MOV PCON, #80H MOV SCON, #D8H SETB IT0 SETB IT1 SETB TR0 SETB TR1 SETB PX1 SETB ES SETB EX0 SETB EX1 SETB ET0 SETB EA CLR FLAGE0 CLR FLAGE1; CLR FLAGT0; CLR FLAGS0; SETB FLAGADDRMAIN:JBC FLAGE0, E0FUN JBC FLAGE1, E1FUN JBC FLAG
14、T0, T0FUN JBC FLAGS0, S0FUNAJMP MAINE0FUN: CLR ALARMLOW ORL 31H,#01000000B AJMP MAINE1FUN: CLR ALARMHIGH ORL 31H,#10000000B AJMP MAINT0FUN: CALL ADFUN CALL OUTFUN AJMP MAINS0FUN: CALL TDATA SETB SM2 AJMP MAINEINT0: SETB FLAGE0; RETIEINT1: SETB FALGE1; RETIT0INT: MOV TH0,#XXH MOV TL0,#XXH SETB FLAGT0
15、 RETICOM:CLR ES;禁止中断 JNB FLAGADR,COMDCLR RIMOV A,SBUFCJNE A,4FH,EXIT1MOV SBUF,A ;回送地址JNB TI,$CLR TICLR SM2;准备接受命令和数据 CLR FLAGADREXIT1: SETB ESRETICOMD: CLR RI MOV A,SBUF CJNE A,#01H,EXIT2 SETB FLAGS0 SETB ES RETIEXIT2: CJNE A,#0FFH,EXIT3 SETB SM2 SETB FLAGADREXIT3: SETB ES RETI TDATA: MOV A,31H MOV SBUF,A JNB TI,$ CLR TI MOV A,32H MOV SBUF,A JNB TI,$ CLR TI RETADFUN: . RETOUTFUN: . RET