基于AT89C51的單線雙機(jī)通信協(xié)議
POP A
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: ;寫結(jié)束位(寫數(shù)據(jù))
JNB RSF,T0WE1
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
T0WE1 :
POP A
POP PSW
RETI
;==============================================================
INT_T0RE: ;讀結(jié)束位(讀數(shù)據(jù))
JBRSF,T0RE1
JNB CTPIO,T0RE1
JMP ERROR4
T0RE1 :
POP A
POP PSW
RETI
;==============================================================
INT_T0WAL:;寫響應(yīng)位(讀數(shù)據(jù))/終止結(jié)束位(寫數(shù)據(jù))
JNB RSF,T0WAL1
;SETB CTPIO ;終止結(jié)束位(寫數(shù)據(jù))
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0WAL1:
;CLRCTPIO ;寫響應(yīng)位(讀數(shù)據(jù))
;CLRTSIO
MOV P3,#00H
POP A
POP PSW
RETI
;==============================================================
INT_T0RA: ;讀響應(yīng)位(寫數(shù)據(jù))寫結(jié)束
JNB RSF,T0RA2
JNB CTPIO,T0RA1
JMP ERROR5
T0RA1 :
CLR RSI ;設(shè)置收發(fā)結(jié)束標(biāo)志
;CLRSDF ;設(shè)置數(shù)據(jù)已發(fā)送標(biāo)志
MOV SDATX,STATE
;MOVSDATX,#00H
T0RA2 :
POP A
POP PSW
RETI
;==============================================================
INT_T0WAH:;終止響應(yīng)(讀數(shù)據(jù))讀結(jié)束
JNB RSF,T0WAH1
JMP ERROR6
T0WAH1:
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
SETBRDF ;設(shè)置有新接收數(shù)據(jù)標(biāo)志
CLR RSI ;設(shè)置收發(fā)結(jié)束標(biāo)志
MOV A,RDATX ;處理數(shù)據(jù)
MOV STATE,A
CPL A
MOV P0,A
CLR RDF ;數(shù)據(jù)已處理,清標(biāo)志
POP A
POP PSW
RETI
;==============================================================
ERROR1:
CLR RSI
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
;MOVP0,#0FEH
POP A
POP PSW
RETI
;==============================================================
ERROR2:
CLR RSI
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
;MOVP0,#0FCH
POP A
POP PSW
RETI
;==============================================================
ERROR3:
CLR RSI
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
;MOVP0,#0F8H
POP A
POP PSW
RETI
;==============================================================
ERROR4:
CLR RSI
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
;MOVP0,#0F0H
POP A
POP PSW
RETI
;==============================================================
ERROR5:
CLR RSI
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
;MOVP0,#0E0H
POP A
POP PSW
RETI
;==============================================================
ERROR6:
CLR RSI
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
;MOVP0,#0C0H
POP A
POP PSW
RETI
;================================================================
DLY2MS:
MOV DLYD0,#02H
DLY2MS1:
MOV DLYD1,#0FFH
DLY2MS2:
DJNZDLYD1,DLY2MS2
DJNZDLYD0,DLY2MS1
RET
;================================================================
2.從機(jī)源程序
;子機(jī)程序
KBUF0 EQU 24H ;鍵值臨時(shí)緩沖
KBUF1 EQU 25H ;鍵值緩沖
KCNTEQU 26H ;鍵盤重復(fù)計(jì)數(shù)
DLYD0 EQU 27H ;延遲變量
DLYD1 EQU 28H ;延遲變量
DLYD2 EQU 29H ;延遲變量
RDATX EQU 22H
SDATX EQU 23H
STATE EQU 2AH
RSCNT EQU 29H
CTPIO BIT 0B2H
TSIOBIT 0B3H
SDF BIT 00H ;有數(shù)據(jù)發(fā)送標(biāo)志
RDF BIT 01H ;有接收數(shù)據(jù)標(biāo)志
RSF BIT 02H ;數(shù)據(jù)收發(fā)選擇位
ORG 00H
AJMPMAIN
ORG 03H
AJMPI(yíng)NT_X0
ORG 0BH
AJMPI(yíng)NT_T0
ORG 100H
MAIN:
MOV SP,#50H
MOV SDATX,#00H
MOV RDATX,#00H
MOV KBUF0,#00H
MOV KBUF1,#00H
MOV KCNT,#00H
MOV RSCNT,#00H
MOV 20H,#00H
MOV TCON,#01H ;下降沿中斷
MOV P0,#00H
MOV IE,#81H ;開(kāi)外部中斷0
LOOPX:
CALLKEYREAD ;讀鍵盤
CALLDLY2MS;延遲2ms
JMP LOOP
評(píng)論