?? 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 + -