|
上一楼主,我明白了,我用了巨星的智能600 DVD遥控器 50按键,可以做到系统码、数据码都与其反码比较,但这个遥控器发射芯片以经用胶盖了,看不出型号,所以不采用这个设备,用HT6222遥控器发射红外波形,又出现用户编码解码不成功,操作解码成功,我发程序给大家看看,给我提出毛病吧!!!
; IR 译码子程序
;---------------------------------------------------
IR_IN:
CLR EA ;暂时关闭CPU的所有中断请求 P168*
PUSH ACC ;P174*
PUSH PSW ;*
SETB PSW.3 ;选择工作寄存器组1,RS0=1 RS1=0 P41*
CLR PSW.4 ;*
MOV R2,#04H ;*
MOV R0,#IRCOM
I1: JNB IRIN,I2 ;等待 IR 信号出现,IRIN=0则跳转到I2
DJNZ R2,I1 ;R2-1不为0则跳到I1*
JMP IR_OUT ;IR信号没出现,退出。*
I2: MOV R4,#20
I20: CALL DEL ;延时0.14MS
DJNZ R4,I20 ;80us
JNB IRIN,I1 ;*确认IR信号出现,IRIN等于0则跳到I1
JMP $+2
I21: JB IRIN,I3 ;等 IR 变为高电平 ,IRIN等于1则跳转
CALL DELAY2 ;*9.2MS
;JMP I21
I3: MOV R3,#0 ;8位数清为0
LL: JNB IRIN,I4 ;等 IR 变为低电平
CALL DEL ;延时0.14MS
JMP LL
I4:
JB IRIN,I5 ;等 IR 变为高电平 IRIN等于1跳转
CALL DEL ;延时0.14MS
JMP I4
I5: MOV R2,#0 ;0.14ms 计数
L1: CALL DEL ;延时0.14MS
JB IRIN, N1 ;等 IR 变为高电平 IRIN等于1跳转
;IR=0,检查R2中的计数值
CALL DEL ;延时0.14MS
MOV A,#8
;CLR C
SUBB A,R2 ;判断高低位 8-0-1=7=A P126
;IF C=0 BIT=0
MOV A,@R0 ;A=20H,R0的内容不变
RRC A ;00100000 \00010000 C=0 P=124 即A=10H 将C中的值0或1移入A中的最低位
MOV @R0,A ;处理完一位 地址20H的内容10H,R0和A的内容都不变 P116
INC R3 ;R3内容加1
CJNE R3,#8,LL ;需处理完8位,寄存器与立即数不相等则跳转
MOV R3,#0 ;8位数清0 看I3:
INC R0 ;20H+1
CJNE R0,#24H,LL ;收集到4字节了即32位,1字节8位
JMP IR_COMP
N1: INC R2 ;R2地址内容加1
CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开
IR_OUT: POP PSW
POP ACC
SETB EA
RETI
|
|