KEYIN DATA 66H ;將接收到的鍵值存放在RAM66H
ORG 0000H
AJMP START
ORG 0023H ;使用串口中斷
AJMP ZD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序初始化部分——J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START: ;初始化
MOV SCON, #50H ;方式1,串行口在方式1.允許接收
MOV TMOD, #20H ;定時器1 方式2
MOV TH1, #0FDH ;波特率設置
MOV TL1, #0FDH ;9600@11.0592MHz
SETB TR1 ;開定時器1,產生波特率
MOV IE, #90H ;開放中斷開關 ,允許串口中斷
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;主程序——JXB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP1: MOV A, P1 ;讀撥碼開關 ,P1往外發送的
DJNZ R7, $ ;延時
DJNZ R6, $ - 2
MOV B, P1 ;再讀
CJNE A, B, LOOP1 ;消抖
MOV SBUF, A ;向串口發送
;上一句后,TI=1,先進入中斷,而后返回到此處。
MOV A,KEYIN ;從此處開始往下根據接收值KEYIN,進行不同模式的顯示。
M0: CJNE A, #01H,M1 ;對方機 撥碼0000_0001 (01H)
MOV P0,#0FH ;我方P0口顯示 0FH
AJMP LOOP1 ;返回主程序起始處
M1:
CJNE A, #02H,M8 ;對方機 撥碼0000_0010 (02H)
MOV P0,#0F0H
AJMP LOOP1
M8: ;除了前2種情況,其余全都是全滅。
MOV P0,#0FFH ;當接收到對方前八種KEYIN之外,均顯示全滅。
AJMP LOOP1
ZD: ;中斷
JNB RI, S_END ;判斷是收還是發,若RI=1則順序執行,接收對方機發來的數據
CLR RI
MOV A, SBUF ;讀串口,
MOV KEYIN,A ;將接收到的數據保存到KEYIN
AJMP EXIT
S_END: CLR TI ;若是發送中斷標志TI=1,接清零退出中斷。
EXIT: RETI
END
|