📄 master.asm
字号:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP,#70H
MOV 51H,#01H ;从机1数据
MOV 52H,#02H
MOV 53H,#03H
MOV 61H,#01H ;从机2数据
MOV 62H,#02H
MOV 63H,#03H
AGAIN: JNB P1.0,SET_NM1 ;K1键按下?
JNB P1.1,SET_NM2 ;K2键按下?
SJMP AGAIN
SET_NM1:MOV 40H,#01H ;K1键按下,设定从机1地址
SETB 20H.7
MOV R5,#00H
MOV 50H,#03H ;数据块长度
INC 51H
INC 52H
INC 53H
LCALL TRS
CLR 20H.7
SJMP AGAIN
SET_NM2:MOV 40H,#02H ;K1键按下,设定从机2地址
MOV R5,#00H
MOV 50H,#03H ;数据块长度
INC 61H
INC 62H
INC 63H
LCALL TRS
SJMP AGAIN
TRS: MOV TMOD, #20H ;设置T1工作方式
MOV TH1,#0FdH ;设置时间常数,确定波特率
MOV TL1,#0FdH
SETB TR1
MOV SCON,#0D8H ;设置串行口工作方式
MOV PCON,#00H
SETB EA
TX_ADDR:MOV A,40H ;发送从机地址
MOV SBUF,A
WAIT1: JNB TI,WAIT1 ;等待发送完
CLR TI
RX_ADDR:JNB RI,RX_ADDR
CLR RI
MOV A,SBUF ;判断从机应答
CJNE A,#00H,RX_ADDR ;应答错误,重发
CLR TB8
RDT: MOV SBUF,50H ;发送数据块长度
WAIT2: JNB TI,WAIT2 ;等待发送完
CLR TI
RX_DT1: JNB RI,RX_DT1
CLR RI
MOV A,SBUF ;判断从机应答
CJNE A,#00H,RDT ;应答错误,重发
JB 20H.7,G51H
MOV R0,#61H
SJMP RTRS
G51H: MOV R0,#51H ;发送数据
RTRS: MOV A,@R0
MOV B,A
MOV SBUF,A
WAIT3: JNB TI,WAIT3 ;等待发送完
CLR TI
RX_DT: JNB RI,RX_DT
CLR RI
MOV A,SBUF ;判断从机应答
CJNE A,#00H,RTRS ;应答错误,重发
INC R0
MOV A,B
ADD A,R5 ;发送数据累加
MOV R5,A
DJNZ 50H,RTRS
RTRS1: MOV A,R5
MOV SBUF,A ;发送校验和
WAIT4: JNB TI,WAIT4 ;等待发送完
CLR TI
RX_PAR: JNB RI,RX_PAR
CLR RI
MOV A,SBUF ;判断从机应答
CJNE A,#00H,ERR ;应答错误
RET
ERR: SJMP $
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -