📄 hongwai.asm
字号:
ORG 0000H
MAIN:
JNB P3.2,IR ;遥控扫描
LJMP MAIN ;主循环
IR: ;解码开始
MOV R6,#10
IR_SB:
;CPL P1.0
;LCALL DELAY882;延时882微秒
MOV R7,#202
DELAY882_A:;882us延时
NOP
NOP
DJNZ R7,DELAY882_A
JB P3.2,IR_ERROR;数据错误退出解码
DJNZ R6,IR_SB;重复10次检测
;识别连发码
JNB P3.2,$;等待高电平避开9MS低电平引导脉冲
;LCALL DELAY2400
MOV R7,#245
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
JNB P3.2,IR_RP;这里为低电平,认为是连发码
;LCALL DELAY2400 ;延时4.74MS避开4.5MS的结果码
MOV R7,#245
DELAY2400_B:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_B
;读取32位数据码
MOV R1,#1AH;存放数据的起始地址
MOV R2,#4
IR_4BYTE:
MOV R3,#8
IR_8BIT:
JNB P3.2,$;等待地址码第一位的高电平信号
;LCALL DELAY882;高电平来后开始延时882uS
MOV R7,#202
DELAY882_B:;882us延时
NOP
NOP
DJNZ R7,DELAY882_B
MOV C,P3.2
JNC IR_8BIT_0;延时后为为低电平则跳到IR_8BIT_0
;LCALL DELAY1000
MOV R7,#229
DELAY1000_A:
NOP
NOP
DJNZ R7,DELAY1000_A
IR_8BIT_0:
MOV A,@R1;将R1中的地址给累加器A
RRC A;将C移入A的最低位
MOV @R1,A;保存A中的值到RAM中
DJNZ R3,IR_8BIT;接收地址码的高8位
INC R1;下一地址
DJNZ R2,IR_4BYTE;接收完成8位数据,8位数据码和16位地址码
LJMP IR_GOTO ;解码结束
IR_RP:
LJMP IR_GOTO
IR_ERROR:
LJMP MAIN
IR_GOTO: ;执行部分
MOV A,1CH
CPL A
CJNE A,1DH,IR_ERROR
MOV P1,1DH ;接收到的数据显示到P1口
MOV 1AH,#00H ;接收区清0
MOV 1BH,#00H
MOV 1CH,#00H
MOV 1DH,#00H
LJMP MAIN;回到主循环
;DELAY1000:
; MOV R7,#229
;DELAY1000_A:
; NOP
; NOP
; DJNZ R7,DELAY1000_A
; RET
;DELAY2400:
; MOV R7,#245
; DELAY2400_A:
; NOP
; NOP
; NOP
; NOP
; NOP
; NOP
; NOP
; DJNZ R7,DELAY2400_A
; RET
; DELAY882: ;延时函数
; MOV R7,#202
; DELAY882_A:;882us延时
; NOP
; NOP
;DJNZ R7,DELAY882_A
;RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -