基于AT89C51的單線雙機(jī)通信協(xié)議
;按鍵功能入口
FUNCTION:
MOV A,KBUF1
CJNEA,#07FH,FUN1;+1
;MOVA,STATE
;ADDA,#01H
MOV A,#01H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN1:
CJNEA,#0F7H,FUN2;+2
;MOVA,STATE
;ADDA,#02H
MOV A,#02H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN2:
CJNEA,#0BFH,FUN3;+4
;MOVA,STATE
;ADDA,#04H
MOV A,#03H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN3:
CJNEA,#0FBH,FUN4;+8
;MOVA,STATE
;ADDA,#08H
MOV A,#04H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN4:
CJNEA,#0DFH,FUN5;+16
;MOVA,STATE
;ADDA,#10H
MOV A,#05H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN5:
CJNEA,#0FDH,FUN6;+32
MOV A,STATE
;ADDA,#20H
XRL A,#08H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN6:
CJNEA,#0EFH,FUN7;+64
MOV A,STATE
ADD A,#40H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN7:
CJNEA,#0FEH,FUN8;+128
MOV A,STATE
ADD A,#80H
MOV STATE,A
MOV SDATX,A
SETBSDF
CPL A
MOV P0,A
RET
FUN8:
RET
;=====================================================================
KEYREAD:
CLR P2.7
SETBP2.6
MOV A,P2
ANL A,#0FH
MOV KBUF0,A
SETBP2.7
CLR P2.6
MOV A,P2
ANL A,#0FH
SWAPA
ORL A,KBUF0
MOV KBUF0,A
CJNEA,KBUF1,KEYRD3
MOV A,KCNT
CJNEA,#03H,KEYRD1
RET
KEYRD1:
INC A
INC KCNT
CJNEA,#03H,KEYRD4
MOV A,KBUF1
CJNEA,#0FFH,KEYRD2
RET
KEYRD2:
CALLFUNCTION
RET
KEYRD3:
MOV KBUF1,A
MOV KCNT,#00H
KEYRD4:
RET
;==============================================================
INT_X0:
MOV RSCNT,#00H
MOV TH0,#00H
MOV TL0,#00H
MOV TMOD,#02H ;工作模式為定時方式2
MOV TCON,#10H ;允許定時器0工作
MOV IE,#82H ;允許定時器0中斷
RETI
;===============================================================
INT_T0:
PUSHPSW
PUSHA
MOV DPTR,#T0_ENTRY
MOV A,RSCNT
INC RSCNT
RLA
JMP @A+DPTR
T0_ENTRY:
AJMPINT_T0N0;空操作
AJMPINT_T010;響應(yīng)
AJMPINT_T0N0
AJMPINT_T020;標(biāo)志0
AJMPINT_T0N0
AJMPINT_T030;標(biāo)志1
AJMPINT_T0N0
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;寫結(jié)束位(寫數(shù)據(jù))
AJMPINT_T0RE;讀結(jié)束位(讀數(shù)據(jù))
AJMPINT_T0WAL ;寫響應(yīng)位(讀數(shù)據(jù))/終止結(jié)束位(寫數(shù)據(jù))
AJMPINT_T0RA;讀響應(yīng)位(寫數(shù)據(jù))寫結(jié)束
AJMPINT_T0WAH ;終止響應(yīng)位(讀數(shù)據(jù))讀結(jié)束
;==============================================================
INT_T0N0: ;空操作
POP A
RETI
;==============================================================
INT_T010: ;響應(yīng)
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
POP A
POP PSW
RETI
;==============================================================
INT_T020: ;標(biāo)志0
JBSDF,INT_T021
CLR RSF ;無數(shù)據(jù)發(fā)送,設(shè)置讀標(biāo)識
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
INT_T021:
SETBRSF ;有數(shù)據(jù)發(fā)送,設(shè)置寫標(biāo)志
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
POP A
POP PSW
RETI
;==============================================================
INT_T030: ;標(biāo)志1
JBRSF,INT_031
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
POP A
POP PSW
RETI
INT_031 :
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
;==============================================================
INT_T0W0:
JNB RSF,T0W01
JNB SDATX.0,T0W02 ;寫第一位
T0W01 :
;SETB CTPIO
;SETB TSIO
MOV P3,#0FFH
POP A
POP PSW
RETI
T0W02 :
;CLRCTPIO
;CLRTSIO
MOV P3,#00H
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
;===============================
評論