[求助]一个关于红外解码不稳定的问题求教大家

2020-01-23 14:31发布

本帖最后由 lxa0 于 2014-7-6 17:43 编辑

本人用的是50462芯片红外遥控手柄
解码过程没问题
问题是:
当按下某个键后解码成功
这时候再换一个键按下后
有时候会出现上次那个键的动作
就是说出现了误动作

检查代码没找出问题所在
困扰我很久
无奈在此求助大家
看这个问题怎么解决
不胜感激



下面是我写的原代码:
;tt1 T1读红外代码子程序<占用区2 >*******************************
org 0290h
tt1:push dph         ;保护现场
push dpl
push acc
push psw
jb 01h,t3
jb 02h,t3           ;全部动作未完成则返回
jb 00h,t2           ;如果收到遥控引导码则进入接收识别模式
mov th1,#00h        ;清T1,为接收做准备
mov tl1,#00h
setb 00h            ;设接收遥控波头准备好标志位
setb tr1            ;开T1中断
sjmp t3
t2:setb psw.4       ;进入区2
clr psw.3
mov a,th1           ;将收到的第一个遥控波头存到30h单元
mov @r0,a
mov th1,#00h        ;清T1,准备读下一位
mov tl1,#00h
inc r0
djnz r1,t3        ;全部信号接收完闭否?
mov 10h,#30h        ;接收完,则恢复10h、11h单元初值
mov 11h,#2fh
clr tr1             ;关T1中断
clr ex1             ;关外部中断1
mov 20h,#00h        ;恢复接收标致位
setb 01h            ;设读取完成标志并允许转换标志位
t3:pop psw
pop acc
pop dpl
pop dph
reti

;zh转换子程序<占用区1>*********************************************
org 0300h
zh: push dph            ;将识别后的遥控信号转换成16位动作代码
push dpl
push acc
push psw
setb psw.3              ;进入区i
clr psw.4
mov r0,#2fh
mov r1,#07h             ;8位一小组
jb 00h,h01
jb 02h,h01
jb 01h,h0
h00:setb ex1
mov 20h,#00h           ;清除上次的标志           
mov 21h,#00h           ;清除上次的动作指令
h01:mov 08h,#2fh
mov 09h,#07h
pop psw
pop acc
pop dph
pop dpl
ret
h0: inc r0               ;取第一组第一位
cjne r0,#51h,h1          ;是否干扰?
sjmp h00                 ;是则返回
h1: jc h2
sjmp h00
h2: cjne @r0,#03h,h0     ;开始转换第一组第一位
inc r0
cjne @r0,#03h,h0
inc r0
cjne @r0,#03h,h0
inc r0
cjne @r0,#01h,h0
inc r0
cjne @r0,#01h,h0
inc r0
cjne @r0,#01h,h0
inc r0
cjne @r0,#03h,h0
inc r0
cjne @r0,#01h,h0
cjne r0,#59h,h3       ;地址码正确否?
sjmp h00
h3: jc h4
sjmp h00
h4: inc r0            ;开始转换指令码
mov a,@r0
jb acc.1,h5
clr 08h
sjmp h6
h5: setb 08h
h6: mov a,21h
rl a
mov 21h,a
djnz r1,h4            ;8位指令码转换完否?
setb 02h              ;设置允许执行动作标志位
clr 01h               ;清除允许转换标志位
ajmp h01
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。