ORG 00H
SJMP INIT
ORG 0023H
LJMP LOOP
ORG 0030H
INIT: MOV SP,#5FH
MOV SCON,#50H ;串行口工作方式1,允许接收
MOV TMOD,#20H ;定时器1工作方式2
MOV PCON,#0H ;波特率不加倍
MOV TH1,#0FDH ;波特率9.6kbit/s
MOV TL1,#0FDH
SETB TR1 ;启动定时器1
SETB EA
SETB ES
CLR TI
CLR RI
KEYS: MOV P0,#0FFH
MOV R1,#0EFH ;初始化各寄存器
MOV R2,#4
MOV R3,#0FFH
MOV 20H,#11101111B
MOV 21H,#11111110B
KEYREAD: MOV A,R1
MOV P0,A ;送扫描码至P0口
MOV A,P0 ;读P0口按键状态
MOV R3,A ;将此状态保存在寄存器R3中
ORL A,#0F0H ;屏蔽P0口高四位
CJNE A,#0FFH,KEYDOWN ;若P0口低四位不全为1,有按键落下
MOV A,R1
RL A ;若低四位