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
|