📄 6122decode.asm
字号:
CLK BIT P3.2
DOUT BIT P3.3
TXBUF EQU 35H
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#63H
MOV R6,#10H
LCALL CH2
LCALL CH2
MOV R6,#0CH
LCALL CH2
MOV R6,#14H
LCALL CH2
MOV R6,#0DH
LCALL CH2
MOV R6,#0EH
LCALL CH2
MOV R6,#10H
LCALL CH2
MOV R6,#06H
LCALL CH2
MOV R6,#01H
LCALL CH2
MOV R6,#02H
LCALL CH2
MOV R6,#02H
LCALL CH2
MOV 1AH,#00H
MOV 1BH,#00H
MOV 1CH,#00H
MOV 1DH,#00H
B0: JB P3.4 , B0
LCALL DELAY900
LCALL DELAY900
LCALL DELAY900
LCALL DELAY900
LCALL DELAY900
JNB P3.4 , IR
SJMP B0
; 解码程序
IR:
;以下对遥控信号的9000微秒的初始低电平信号识别
MOV R6,#3 ;延时一次
IR_SB:
ACALL DELAY900 ;调用900微秒延时子程序
JB P3.4,IR_ERROR ;延时900秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R6,IR_SB ;重复3次,目的是检测在2700微秒内如果出现高电平就退出解码程序
JNB P3.4, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL DELAY900 ;等待低电平避开4.5毫秒低电平引导脉冲
JB P3.4,$
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#4 ;只收一个字节
IR_4BYTE:
MOV R3,#8
IR_8BIT:
JNB P3.4,$ ;等待地址码第一位的高电平信号
LCALL DELAY900 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.4 ;将P3.2引脚此时的电平状态0或1存入C中
JNC IR_8BIT_0 ;如果为0就跳转到IR_8BIT_0
LCALL DELAY900
IR_8BIT_0:
MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1中
DJNZ R3,IR_8BIT ;接收地址码的高8位
INC R1 ;对R1中的值加1,换下一个RAM
DJNZ R2,IR_4BYTE ;接收完16位地址码和8位数据码和8位数据,
;存放在1AH/1BH/1CH/1DH的RAM中
;解码成功
JMP IR_GOTO
IR_ERROR:
;错语退出
MOV R1,#0BH
BB5: MOV R6,#0EH
LCALL CH2
DJNZ R1,BB5
LJMP B0 ;退出解码子程序
;=================================================
;遥控执行部份
IR_GOTO:
MOV R0,#01H
MOV R1,#1AH
AA4:MOV A,@R1 ;将按键的键值显示出来!
ANL A,#0F0H
SWAP A
MOV R6,A
LCALL CH2
MOV A,@R1
ANL A,#0FH
MOV R6,A
LCALL CH2
INC R1
DJNZ R0,AA4
MOV R6,#03H
LCALL CH2
MOV R6,#0AH
LCALL CH2
MOV R6,#10H
LCALL CH2
OUT:MOV R6,#10H
LCALL CH2
LCALL CH2
LCALL CH2
LCALL CH2
LCALL CH2
LCALL CH2
MOV 1AH,#00H
MOV 1BH,#00H
MOV 1CH,#00H
MOV 1DH,#00H
LJMP B0
;=================================================
; 延时子程序
;=============================400
DELAY400: ;1x((90+4)+4)=400
MOV R7,#90
DELAY400_A:
NOP
NOP
DJNZ R7,DELAY400_A
RET
;=============================900
DELAY900: ;1x ((224x4)+6)=900
MOV R7,#205
DELAY900_A:
NOP
NOP
DJNZ R7,DELAY900_A
NOP
RET
;=============================2400
DELAY2400: ;1x ((239x10)+10)=2400
MOV R7,#220
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
NOP
NOP
NOP
NOP
NOP
NOP
RET
;______________________________________====================
CH2: MOV A,DPH
PUSH ACC
MOV A,DPL
PUSH ACC
MOV A,R6
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV TXBUF,A
TX: MOV R7,#08H ;依次传8个位
MOV A,TXBUF
TX1:RRC A
MOV DOUT,C
NOP
NOP
CLR CLK
NOP
SETB CLK
DJNZ R7,TX1
POP ACC
MOV DPL,A
POP ACC
MOV DPH,A
RET
TAB: DB 03H ;0 数码管段码
DB 9FH ;1
DB 25H ;2
DB 0DH ;3
DB 99H ;4
DB 49H ;5
DB 41H ;6
DB 1FH ;7
DB 01H ;8
DB 09H ;9
DB 11H ;A
DB 0C1H ;B
DB 63H ;C
DB 85H ;D
DB 61H ;E
DB 71H ;F
DB 0FDH ;- 10H
DB 0FFH ;WU 11H
DB 0DFH ;i 12H
DB 0F5H ;r 13H
DB 0A3H ;O 14H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -