📄 keyrec.asm
字号:
STH0 EQU 41H
STL0 EQU 42H
TEMP EQU 43H
T1_BUF1 EQU 44H
T1_BUF2 EQU 45H
SIO_BUF EQU 46H
RPLAY_FLAG BIT 00H
SIO_FLAG BIT 01H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 0023H
LJMP SIO
ORG 0030H
MAIN:
MOV SP,#60H
MOV SCON,#50H
MOV TMOD,#21H
SETB TR1
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV PCON,#00H
SETB ES
SETB EA
SETB ET0
MOV R5,#00H
MOV R1,#80H
MOV R0,#40H
MOV 20H,#00H
LOOP: JBC SIO_FLAG,TAN
JBC RPLAY_FLAG,RPLAY
SJMP LOOP
TAN: MOV A,SIO_BUF
LCALL PLAY
SJMP LOOP
RPLAY: CLR ES
MOV 30H,#80H
RPLAY3: MOV A,R1
CJNE A,30H,RPLAY1
CLR RI
SETB ES
LJMP LOOP
RPLAY1: MOV R0,30H
MOV A,@R0
ANL A,#0FH
LCALL PLAY
MOV A,@R0
SWAP A
ANL A,#0FH
MOV B,#05H
MUL AB
MOV 31H,A
RPLAY2: LCALL DELAY
DJNZ 31H,RPLAY2
INC 30H
CLR TR0
SJMP RPLAY3
PLAY: RL A
MOV B,A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV TH0,A
MOV STH0,A
MOV A,B
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV STL0,A
SETB TR0
RET
SIO: PUSH ACC
PUSH B
CLR RI
CJNE R5,#00H,RECE1
MOV A,SBUF
CJNE A,#0EBH,RECE_ERR
INC R5
SJMP SIO_EXIT
RECE1: CJNE R5,#01H,RECE_ERR
MOV A,SBUF
MOV B,A ;-----------------
CJNE A,#0CH,RECE2
MOV R1,#80H
LJMP RECE4
RECE2: CJNE A,#0DH,RECE3
SETB RPLAY_FLAG
LJMP RECE4
RECE3: ANL A,#0FH
CJNE A,#0FH,RECE5
ANL B,#0F0H
MOV A,@R1
ORL A,B
MOV @R1,A
CLR TR0
INC R1
CJNE R1,#0C0H,RECE4
MOV R1,#80H
RECE4:
MOV R5,#00H
SIO_EXIT:POP B
POP ACC
RETI
RECE_ERR:MOV A,#0EH
SJMP RECE4
RECE5: MOV A,SBUF
CJNE A,#0CH,RECE6
RECE6: JNC RECE_ERR
MOV @R1,A
MOV SIO_BUF,A
SETB SIO_FLAG
SJMP RECE4
INT_T0:
MOV TH0,STH0
MOV TL0,STL0
CPL P2.0
RETI
TABLE1: DW 63742,63843,64029,64195
DW 64342,64409,64533,64644
DW 64695,64787,64870,64943
DELAY: MOV R7,#100
MOV R6,#0
DE1: DJNZ R6,$
DJNZ R7,DE1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -