基于51的MODBUS-RTU多机主从通信

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档