基于AT89C51的單線雙機通信協(xié)議
KEYRD5:
RET
;===============================================================
INT_T0:
PUSHPSW
PUSHA
JBRSI,INT_T01
SETBRSI
MOV RSCNT,#00H
POP A
RETI
INT_T01 :
MOV DPTR,#T0_ENTRY
MOV A,RSCNT
INC RSCNT
RLA
JMP @A+DPTR
T0_ENTRY:
AJMPINT_T010;設置開始位
AJMPINT_T0N0
AJMPINT_T020;終止開始位
AJMPINT_T030;讀響應
AJMPINT_T0N0
AJMPINT_T040;讀標志0
AJMPINT_T0N0
AJMPINT_T050;讀標志1
AJMPINT_T0W0
AJMPINT_T0R0
AJMPINT_T0W1
AJMPINT_T0R1
AJMPINT_T0W2
AJMPINT_T0R2
AJMPINT_T0W3
AJMPINT_T0R3
AJMPINT_T0W4
AJMPINT_T0R4
AJMPINT_T0W5
AJMPINT_T0R5
AJMPINT_T0W6
AJMPINT_T0R6
AJMPINT_T0W7
AJMPINT_T0R7
;AJMP INT_T0W8
;AJMP INT_T0R8
;AJMP INT_T0W9
;AJMP INT_T0R9
AJMPINT_T0WE;寫結束位(寫數(shù)據(jù))
AJMPINT_T0RE;讀結束位(讀數(shù)據(jù))
AJMPINT_T0WAL ;寫響應位(讀數(shù)據(jù))/終止結束位(寫數(shù)據(jù))
AJMPINT_T0RA;讀響應位(寫數(shù)據(jù))寫結束
AJMPINT_T0WAH ;終止響應位(讀數(shù)據(jù))讀結束
;==============================================================
INT_T0N0: ;空操作
POP A
POP PSW
RETI
;==============================================================
INT_T010: ;發(fā)送開始位
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
POP A
POP PSW
RETI
;==============================================================
INT_T020: ;終止開始位
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
;==============================================================
INT_T030: ;讀響應
JNB CTPIO,INT_T031
JMP ERROR1
INT_T031:
POP A
POP PSW
RETI
;==============================================================
INT_T040: ;讀標志0
JBCTPIO,INT_T041
CLR RSF0;RSF0=0
POP A
POP PSW
RETI
INT_T041:
SETBRSF0;RSF0=1
POP A
POP PSW
RETI
;==============================================================
INT_T050: ;讀標志1
JBCTPIO,INT_051
CLR RSF1;RSF1=0
JBRSF0,INT_052
JMP ERROR2;RSF:00錯
INT_052 :
SETBRSF ;RSF:10主發(fā)從收
MOV SDATX,STATE
POP A
POP PSW
RETI
INT_051 :
SETBRSF1;RSF1=1
JNB RSF0,INT_053
JMP ERROR3;RSF:11錯
INT_053 :
CLR RSF ;RSF:01主收從發(fā)
POP A
POP PSW
RETI
;==============================================================
INT_T0W0:
JNB RSF,T0W02
JNB SDATX.0,T0W01
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W01 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W02 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R0:
JBRSF,T0R02
JNB CTPIO,T0R01
SETBRDATX.0
POP A
POP PSW
RETI
T0R01 :
CLR RDATX.0
T0R02 :
POP A
POP PSW
RETI
;==============================================================
INT_T0W1:
JNB RSF,T0W12
JNB SDATX.1,T0W11
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W11 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W12 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R1:
JBRSF,T0R12
JNB CTPIO,T0R11
SETBRDATX.1
POP A
POP PSW
RETI
T0R11 :
CLR RDATX.1
T0R12 :
POP A
POP PSW
RETI
;==============================================================
INT_T0W2:
JNB RSF,T0W22
JNB SDATX.2,T0W21
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W21 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W22 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R2:
JBRSF,T0R22
JNB CTPIO,T0R21
SETBRDATX.2
POP A
POP PSW
RETI
T0R21 :
CLR RDATX.2
T0R22 :
POP A
POP PSW
RETI
;==============================================================
INT_T0W3:
JNB RSF,T0W32
JNB SDATX.3,T0W31
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W31 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W32 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R3:
JBRSF,T0R32
JNB CTPIO,T0R31
SETBRDATX.3
POP A
POP PSW
RETI
T0R31 :
CLR RDATX.3
T0R32 :
POP A
POP PSW
RETI
;==============================================================
INT_T0W4:
JNB RSF,T0W42
JNB SDATX.4,T0W41
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W41 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W42 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R4:
JBRSF,T0R42
JNB CTPIO,T0R41
SETBRDATX.4
POP A
POP PSW
RETI
T0R41 :
CLR RDATX.4
T0R42 :
POP A
POP PSW
RETI
;==============================================================
INT_T0W5:
JNB RSF,T0W52
JNB SDATX.5,T0W51
;SETB CTPIO
;SETB TSIO
MOV P3
評論