基于AT89C51的單線雙機通信協(xié)議
INT_T0W2:
JNB RSF,T0W22
JNB SDATX.2,T0W21
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
RETI
T0W21 :
CLR CTPIO
CLR TSIO
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,#0FFH
POP A
POP PSW
RETI
T0W51 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W52 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R5:
JBRSF,T0R52
JNB CTPIO,T0R51
SETBRDATX.5
POP A
POP PSW
RETI
T0R51 :
CLR RDATX.5
T0R52 :
POP A
POP PSW
RETI
;==============================================================
INT_T0W6:
JNB RSF,T0W62
JNB SDATX.6,T0W61
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W61 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W62 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R6:
JBRSF,T0R62
JNB CTPIO,T0R61
SETBRDATX.6
POP A
POP PSW
RETI
T0R61 :
CLR RDATX.6
T0R62 :
POP A
POP PSW
RETI
;==============================================================
INT_T0W7:
JNB RSF,T0W72
JNB SDATX.7,T0W71
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W71 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0W72 :
POP A
POP PSW
RETI
;==============================================================
INT_T0R7:
JBRSF,T0R72
JNB CTPIO,T0R71
SETBRDATX.7
POP A
POP PSW
RETI
T0R71 :
CLR RDATX.7
T0R72 :
POP A
POP PSW
RETI
;==============================================================
INT_T0WE: ;寫結束位(寫數據)
JNB RSF,T0WE1
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0WE1 :
POP A
POP PSW
RETI
;==============================================================
INT_T0RE: ;讀結束位(讀數據)
JBRSF,T0RE1
JNB CTPIO,T0RE1
JMP ERROR1
T0RE1 :
POP A
POP PSW
RETI
;==============================================================
INT_T0WAL:;寫響應位(讀數據)/終止結束位(寫數據)
JNB RSF,T0WAL1
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0WAL1:
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
POP A
POP PSW
RETI
;==============================================================
INT_T0RA: ;讀響應位(寫數據)寫結束
JNB RSF,T0RA2
JNB CTPIO,T0RA1
JMP ERROR2
T0RA1 :
CLR SDF
;MOVSDATX,#00H
MOV TCON,#01H ;下降沿中斷
MOV IE,#81H ;開外部中斷0
T0RA2 :
POP A
POP PSW
RETI
;==============================================================
INT_T0WAH:;終止響應位(讀數據)讀結束
JNB RSF,T0WAH1
JMP ERROR3
T0WAH1:
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
SETBRDF ;設置有新接收數據標志
MOV A,RDATX ;處理數據
MOV STATE,A
JZT0WAH2
CPL A
MOV P0,A
CLR RDF ;數據已處理,清標志
MOV TCON,#01H ;下降沿中斷
MOV IE,#81H ;開外部中斷0
POP A
POP PSW
RETI
T0WAH2:
CLR RDF ;數據無須處理,清標志
MOV TCON,#01H ;下降沿中斷
MOV IE,#81H ;開外部中斷0
POP A
POP PSW
RETI
;==============================================================
ERROR1: ;無結束位
MOV TCON,#01H ;下降沿中斷
MOV IE,#81H ;開外部中斷0
MOV P0,#0FEH
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
;==============================================================
ERROR2: ;無響應位
MOV TCON,#01H ;下降沿中斷
MOV IE,#81H ;開外部中斷0
MOV P0,#0FCH
;SETB CTPIO
;SETB TSIO
M
評論