基于51的MODBUS-RTU多机主从通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51的MODBUS-RTU多机通信
实验环境:Proteus
编程语言:汇编
编程环境:KEIL
单片机: AT89C51,AT89C52
晶振:11.0592MHz
功能说明:本实验运用了MODBUS-RTU通信协议的功能码03多寄存器读和
功能码10多寄存器写,其中主机首先通过03功能码读取1号从机的时,分和秒的值,并将它们用液晶LCD显示器显示出来。然后利用10功能将读取的值送入2号从机,2号从机在接收到主机送来的数据后再将它们以与1号从机相同的方式显示出来。为1号从机设置了按钮,可调节它的时间,同是主机和2号从机也随之显示相同的时间。
图示:
部分程序源代码:
1、主机
ORG 000H
LJMP MAIN
ORG 000BH
LJMP TMR0
ORG 0023H
LJMP USART
ORG 0040H
MAIN: ACALL INIT
HERE: CLR RS0
CLR RS1
JB FLAG2.7,TXWORK
JB UFLAG.7,RXWORK;
AJMP HERE
TXWORK: AJMP TXWORK1
RXWORK: CLR UFLAG.7
;**********接收完成,显示操作
JB UFLAG.3,RXWMB03
RXWMB10: JNB UFLAG.5,HERE
AJMP RXMBW101
RXWMB03: CLR UFLAG.3
MOV R0,#HOUR1
MOV A,CND3
CLR C
RRC A
MOV R7,A
MOV R1,#CND5 RWORK1: MOV A,@R1
MOV @R0,A
INC R1
INC R1
INC R0
DJNZ R7,RWORK1
MOV DSPC,#8 TIMDIS: MOV A,DSPC
MOV DPTR,#DISTB
MOVC A,@A+DPTR
MOV LCDD,A
ACALL LCDWP
MOV A,#HOUR1
ADD A,DSPC
MOV R1,A
MOV A,@R1
MOV B,#10
DIV AB
ACALL DISP
MOV A,B
ACALL DISP
DEC DSPC
JNB DSPC.7,TIMDIS CLR REN
SETB URD
MOV CND1,#0A1H MOV CND2,#10H MOV CND3,#0
MOV CND4,#50H MOV CND5,#0
MOV CND6,#3
MOV CND7,#6
MOV CND8,#0
MOV CND9,HOUR1 MOV CND10,#0 MOV CND11,MIN1 MOV CND12,#0 MOV CND13,SEC1
MOV CND15,#0A5H
MOV CNDT,#0
MOV CNDT1,#15
SETB TB8
MOV SBUF,CND1
AJMP HERE
;******************************** RXMBW101: CLR UFLAG.5
MOV CNDT,#0
MOV CNDT1,#8
AJMP HERE
;************************************** TXWORK1:CLR FLAG2.7;1S定时
CLR REN
SETB URD
/* MOV CND1,#30H
MOV CND2,#31H
MOV CND3,#32H
MOV CND4,#33H
MOV CND5,#34H
MOV CND6,#35H
MOV CND8,#37H
MOV CND9,#38H*/
MOV CND1,#0A0H;地址
MOV CND2,#03H ;功能码
MOV CND3,#0 ;起始地址2字节
MOV CND4,#3BH
MOV CND5,#0 ;数据长度
MOV CND6,#3
MOV CND7,#5AH
MOV CND8,#0A5H
MOV CNDT,#0
MOV CNDT1,#8
SETB TB8
MOV SBUF,CND1
AJMP HERE
;*******************************
DISTB: DB
81H,84H,87H,0C1H,0C4H,0C7H,91H,94H,97H,0D1H,0D4H,0D 7H
;*************
USART: PUSH PSW
PUSH ACC
SETB RS0
SETB RS1
JBC RI,RXINT;发送中断,清中断标志位并转中断处理
TXINT: CLR TI
INC CNDT
MOV A,CNDT
CJNE A,CNDT1,TXGN;必须在发送前检测,若在后的话,则最后一个字节可能不能正确传输
TXSTP: SETB UFLAG.6;发送结束标志
MOV CNDT,#0
MOV CNDT1,#8
CLR URD
SETB REN
AJMP UOUT
;********************
TXGN: MOV A,#CND1
ADD A,CNDT
MOV R0,A
CLR TB8
MOV SBUF,@R0