此程序适用于PT2221/2、uPD6121/2芯片的解码。
程序中设计精确定时0.1ms延时位基础,以计数实际的波形宽度,若读数
值位4,则位0.4ms,若位16,则位1.6ms。程序中用减法指令SUBB来完成
SUBB A,R2
R2为计数值
A值为8
当8-R2有借位,借位标志C=1,则编码值为1
当8-R2无借位,借位标志C=0,则编码值为0
将错位标志C经过右移RRC A转入A寄存器,再由R0寄存器间接寻址存入内存。
IR_IN: ; 红外解码子程序
I1: JNB IRIN,I2 ; 等待信号出现
JMP I1
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,I1 ;信号确认
CLR WLED ;工组指示灯亮
I21: JB IRIN,I3 ; 等待高电平
CALL DEL
JMP I21
I3: MOV R3,#0 ;
LL: JNB IRIN,I4 ; 等待低电平
CALL DEL
JMP LL
I4: JB IRIN,I5 ; 等待高电平
CALL DEL
JMP I4
I5: MOV R2,#0 ;0.1ms计数
L1: CALL DEL
JB IRIN,N1
MOV A,#8
CLR C
SUBB A,R2
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,LL ;需处理8位数据
MOV R3,#0
INC R0
CJNE R0,#34H,LL ;处理4个字节
JMP OK
N1: INC R2
CJNE R2,#30,L1 ; 0.1ms计时过长,则自动离开
OK: SETB WLED ;关掉指示灯
RET
文章评论(0条评论)
登录后参与讨论