;---------------------------------------------
;将存于R3R2中高电平或低电平时间值转为BCD码放于XCQ中
;---------------------------------------------
BtoD:
push 00h
mov r0,#BCD
mov r4,#3
bd0: mov @r0,#0 ;BCD缓冲区清0
inc r0
djnz r4,bd0
mov r6,#16
bd1: clr c ;将R3R2中的16位二进制值转换为三字节BCD码存入BCD缓冲区中
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
mov r4,#3
mov r1,#bcd
BD3: mov a, @r1
addc a,@r1
da a
mov @r1,a
inc r1
djnz r4,bd3
djnz r6,bd1
mov r0,#xcq ;将转换结果从BCD缓冲中存入XCQ中
mov r1,#bcd
mov r4,#3
bd4: mov a,@r1
xchd a,@r0
inc r0
swap a
xchd a,@r0
inc r0
inc r1
djnz r4,bd4
pop 00h
ret
通过上面的程序我们读出了按下一个键后的编码的本质的东西
那么动手把 图画下来 找规律 解码
我把我例子长虹解码后的波形图 发出来
此主题相关图片如下:01.jpg 点击图片放大
01。JPG 是脉冲开始时所有键前8个完全一样的高低脉冲
此主题相关图片如下:02.jpg
02。JPG 大家注意看按不同的键 中间只是有3个脉冲在变化 是EXCLE的 W列-AC列 而这3位数值就是我们解码的关键 01。JPG 中8位数 大家应该看出 所有键都是一样的11100010 后面02。JPG中我们把键码整理出来就是
按1键 00000000 00H
按2键 00010000 10H
按3键 00001000 08H
按4键 00011000 18H
按5键 。。。。。
后面就不写了
为了大家清晰可见 我把画出的最后的波形图03。JPG 贴出来 大家看下规律
此主题相关图片如下:03.jpg 点击图片放大
然后我们 来分析应该怎么解码 我相信到了这一步应该很简单了吧 比如在这个例子中 我们发现 后面的键码改变的部分完全是重复 那么为什么完全可以不去读后面的码 只读前面的16位的脉冲 放在寄存器中 再用比较指令 跳转 下面是针对这个波形图的解码程序 相信大家已经能用自己手中的利器 把它搞定了
写到这里 我觉得很疑惑 感觉自己没能把具体问题简单化 很多东西还是要*大家自己去消化理解了
程序看不懂。?那么OK 去翻指令 查书 一条一条看吧 程序我敢保证都是 编译通过的
下面是解码程序的关键代码 :
DYKJZ: JB P3.6,$
LCALL YKJM ;核心解码代码子程序
cpl a
jz no ;判断是否为错误代码(0FFH)
cpl a
AJMP JZPD
NO: LJMP DYKJZ
RET
JZPD: CJNE A,#09H,JZ1 ;键码为09H吗?
AJMP KAIS ;键码为09H 转开始程序()
JZ1: ;不为09H 转最开始 等待下一次遥控器按键到来
AJMP DYKJZ
RET
KAIS: ;放你需要执行的代码
;比如 点亮一个灯 给单片机接上串口 用单片机控制电脑的打开 放音乐。等等
;这些不属于本问讨论的范围 有兴趣的可以自己扩展
RET
;-----------------------
;核心解码代码子程序
;------------------------
YKJM:
PUSH PSW
PUSH 02H
PUSH 06H