5890|11

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

89C51制作 遥控高低8位用户识别码通过十六进制P0 P1 LED显示的测试疑问 [复制链接]

本人用P0 P1接了16颗LED灯,当执行如下程序指令,P1口显示了十六进制低8位用户编码,P0口显示了高8位用户编码,但通过仿真后,用HT6222遥控器发射红外波形,接收板解码后两组LED灯显示的规律不一样,P1组灯全亮、P0组显示为01100110 ,这个遥控器有48个键,按每一个键只有P0 口LED多了一种显示无变化10110011,我查看了很多遥控资料,只写出了低8位用户地址码和高8位用户地址码,只是用来区分不同的电器设备,防止不同机种遥控码互相干扰,如果我用P0和P1口显22H数据码和23H数据反码,两组LED显示为相反亮、灭状态,请问我的用户编解码成功了吗?遥控解码成功了吗?



22H数据码和23H数据反码头比较与键值数据处理
;20H存入低8位用户编码,21H存入高8位用户编码的
;---------------------------------------------------------------
IR_COMP:
          MOV A,22H
          CPL A                ;将22H取反后和23H比较
          CJNE A,23H,IR_OUT    ;如果不等表示接收数据发生错误,放弃
          MOV  P1,20H
          MOV  P0,21H
IR_CHULI:
          MOV  A,22H           ;22H地址的内容为A P113
          ANL  A,#0FH
          MOV  25H,A           ;送个位显示单元
          MOV  A,22H
          ANL  A,#0F0H
          SWAP  A              ;累加器高低半字节互换
          MOV  26H,A           ;送十位显示单元
          CALL  IR_SHOW        ;显示键值
          CALL  BEEP_BL        ;蜂鸣器鸣响表示解码成功
          JMP  IR_OUT

最新回复

今天我请教了一个专门搞遥控解码的高手,他指明用迟时方法去判断9MS引导码和4.5MS的不好用,假如要改用其它的遥控器整个程序不能修改了.比如用如下的计时器方法计算延时,请问大家,我可以用同一个计数器T0放式1做9MS\4.5MS\8位地址码 8位地址反码 8位数据码 8位数据反码 的计数吗???        ORG     0000H       ;复位入口指定        SJMP    START        ORG     000BH       ;T0中断入口指定        SJMP    TOSVR        ORG     0030H START: MOV     SP,     #40H        MOV     P1,     #0FH ;初始状态,发光二极管熄灭        MOV     A,     #1FH        MOV     TMOD,   #01H ;设置T0工作方式1        MOV     TH0,    #0ECH  ;设置10MS计数初值        MOV     TL0,    #78H        MOV     R0,     #64H ;计数100个10MS,即1S        SETB    EA          ;开放总中断        SETB    ET0         ;开放T0中断        SETB    TR0         ;启动T0   DISP: MOV     P1,     A        SJMP    DISP        ;循环显示   ;T0中断服务子程序 TOSVR: MOV     TL0,    #78H ;重启计数初值        MOV     TH0,    #0ECH        DJNZ    R0,     QUIT ;1S时间未到,退出        MOV     R0,     #64H ;1S时间到,重置R0计数初值(100)        ANL     A,      #0F0H ;L0-L3位于P1口的高4位        CLR     C        RLC     A           ;将点亮的LED循环左移        JNC     QUIT        MOV     A,     #10H ;移到L3后,复位到L0 QUIT:  ORL     A,      #0FH ;        RETI        END   详情 回复 发表于 2007-3-9 16:32
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
红外 是起始码+系统码+系统码反码+数据码+加数据码反码,
系统码、数据码都与其反码比较,如果都正确的话,可以认为你的接收是正确的了。
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
上一楼主,我明白了,我用了巨星的智能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

 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
当我以HT6222的波形分析设置了标准延迟时间和电压高低选择后,仿真过程无法解码,请大家给点建议
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
不知道是不是我理解错,草草看看,见笑 = =

第一  红外不同按键,不需要延时消抖di  = = (最怕延时,要我写10来个计时器已经想撞墙了,佩服楼主的毅力 ... m(_ _)m)

第二  首先声明,我是看你的注释说话的, 51的指令我忘记很多了,指令写错是你的事......

I21:     JB  IRIN,I3        ;等 IR 变为高电平 ,IRIN等于1则跳转
          CALL  DELAY2       ;*9.2MS
          ;JMP  I21
;---------------------------------------------------------------------------
;    延时 9.2ms 渡过引导码 进入 间隔码,间隔码是高电平的,这里貌似没有问题



I3:      MOV  R3,#0         ;8位数清为0
LL:      JNB  IRIN,I4       ;等 IR 变为低电平
          CALL  DEL          ;延时0.14MS
          JMP  LL
;---------------------------------------------
;   你这个是单纯的等待低电平,貌似什么都没有做,好,我当你这里是处理间隔码的
;   也不发表异议.间隔码是 4.5ms 的高电平.

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的内容不变


          .................
          .................




是试验用的程序吧?实用意义不大,整个程序的时间都在等待,其他事都干不了 = =
时间的闸门是非常重要的,红外接收要好好的注意这个,要求定时时间比较准  = =
不过楼主有个思想值得学习,算在下贪婪,我拿过去用了,hoho~~~
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
据我所知,遥控器有 8位系统码+8位系统码反码+8位数据码+8位加数据码反码 和 13位系统码+13位系统码反码+8位数据码+8位加数据码反码 两种,在不知到是什么型号IC的情况下,两种都要考虑!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
I5:      MOV  R2,#0         ;0.14ms 计数
L1:      CALL  DEL          ;延时0.14MS
          JB  IRIN, N1       ;等 IR 变为高电平 IRIN等于1跳转
                             ;IR=0,检查R2中的计数值
          CALL DEL           ;延时0.14MS

;--------------------------------------------- 又是等高电平? 不会吧
本人解答  这段是数据变为低位后再作计数时间处理
                  
                         是 ─  计数时间大于是100─  否
               │             │
                         置1左移                  置0左移
             ┖──────┌─────┛
                                      24减1为0? 是 就结束程序
                    │
                                     否计数器清零
所以这段没错!!
---------------------------------------------------------------------------
           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的内容不变


          .................
          .................




是试验用的程序吧?实用意义不大,整个程序的时间都在等待,其他事都干不了 = =
时间的闸门是非常重要的,红外接收要好好的注意这个,要求定时时间比较准  = =
-----------------------------------------------------------------------
这部份指令请大家多给意见,怎样更改,请大家指点.
HT6222的红外码标准延迟时间在网上可以查找,但以上程度可以用在巨星的智能600 DVD遥控器 50按键,更换了遥控器,程序一定要更改延时时间,我在仿真过程以经设定了间隔码是 4.5ms 的高电平,请大家多给意见!!!问题到底怎样更改好啊??


                                               
                                    
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
请问大家令天我在HT6222的红外码解码仿真当中,在接收32位后作了断点,看到RAM内的低8位00H
和高8位99H用户码,请问大家这两对码是不是解码错了,不是反码,而我用开的巨星的智能600 DVD遥控器用户码是 00H和FFH 我听高手们讲过用户码和反码不一定是00H和FFH 的,请大家尽快回复啦
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

9
 
说说你的思路算了,我看程序真晕 = =
确定是HT6222的发码芯片的话,0和1码的低电平时间都是 0.56ms ,关键在于 高电平的时间不同
0码是 0.56ms ,1码是1.5ms左右的
貌似你是计算高电平的时间来判断是0码还是1码的吧?

另外HT6222的32位码的组成 8位地址码 8位地址反码 8位数据码 8位数据反码
所谓的反码就是取反,也就是说  0001 的反码是 1110 ,所以肯定相加之后为F的
这个是收到码之后必须写的程序判断收码是否成功
收到的8位地址码和8位地址反码相加是否为 ffff ,不是就出错了.数据码的判断同样.

怎么调程序,啰嗦多嘴说说吧 = =
在引导码结束的时候放断点 ,确定每次按键都能进来 ,否则程序有问题,然后在间隔码结束
的地方放断点........进去之后单步运行,看实际结果和预想结果是否相同

能说的只有这么多了,剩下的看造化吧,调多几天没有问题,俺当年也调了4-5天了 - -
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
应用以上程序在引导码9MS—10MS结束的时候放断点 ,在仿真器调试观察地址20H、21H的用户地址码和反码都有是显示 00H、99H,第一步以经不正确,这种调试行不通啊!!


 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
        测试方法没问题,应该检查一下接受部分精度,量码宽一定要准
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
今天我请教了一个专门搞遥控解码的高手,他指明用迟时方法去判断9MS引导码和4.5MS的不好用,假如要改用其它的遥控器整个程序不能修改了.比如用如下的计时器方法计算延时,请问大家,我可以用同一个计数器T0放式1做9MS\4.5MS\8位地址码 8位地址反码 8位数据码 8位数据反码
的计数吗???
       ORG     0000H       ;复位入口指定
       SJMP    START
       ORG     000BH       ;T0中断入口指定
       SJMP    TOSVR
       ORG     0030H
START: MOV     SP,     #40H
       MOV     P1,     #0FH ;初始状态,发光二极管熄灭
       MOV     A,     #1FH
       MOV     TMOD,   #01H ;设置T0工作方式1
       MOV     TH0,    #0ECH  ;设置10MS计数初值
       MOV     TL0,    #78H
       MOV     R0,     #64H ;计数100个10MS,即1S
       SETB    EA          ;开放总中断
       SETB    ET0         ;开放T0中断
       SETB    TR0         ;启动T0
  DISP: MOV     P1,     A
       SJMP    DISP        ;循环显示
  ;T0中断服务子程序
TOSVR: MOV     TL0,    #78H ;重启计数初值
       MOV     TH0,    #0ECH
       DJNZ    R0,     QUIT ;1S时间未到,退出
       MOV     R0,     #64H ;1S时间到,重置R0计数初值(100)
       ANL     A,      #0F0H ;L0-L3位于P1口的高4位
       CLR     C
       RLC     A           ;将点亮的LED循环左移
       JNC     QUIT
       MOV     A,     #10H ;移到L3后,复位到L0
QUIT:  ORL     A,      #0FH ;
       RETI
       END
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表