本帖最后由 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
一周热门 更多>