《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

如何用PIC做红外线遥控接收?(一)
程序匠人 发表于 2006-8-2 8:21:00  阅读全文 | 回复(0) | 引用通告 | 编辑

相关的连接:红外线编码分析仪(产品编号:301)

如何用PIC做红外线遥控接收? 
============================   
先用20106之类的片子解调后,你用示波器挂在20106的输出端就可以查看遥控波形。
=============================
NEC遥控接收第一次正常,以后就不行了(附遥控子程序)请指正。
不才是PIC领域的新手,最近写了一个关于NEC遥控接收解码的测试程序,下面是此程序的遥控解码部分但是它只能第一次正确判断出接收码,以后就不行了请高手指点》

我知道遥控码的连发情况,但我已经设置了32位接收码的计数器,应该不会有问题的

我判断0(1.125ms)和1(2.25ms) 由于我用的是C57,只能通过查询方式来确定.通过高电平的时间(以下程序中延时0.9MS)不同来决定0或1的。

;NEC格式遥控码的接收与解码子程序
;本程序中采用PORTA  0口接收红外遥控,地址码为00H,高位FFH,数据码为00H,反码为FFH,接收到的依次存放到  25H   ADD8L,   26H   ADD8H,DAT8    27H ,28H      DAT8F寄存器中。
;第一次接收到此信号即关机.

;====================================
REMOTE_RECEIVER 
         CLRF 20H              ;设定遥控接收正确与否标志位。若20H的第0位为1,
         BTFSC     PORTA,0     ;遥控接收无效。
         GOTO      BACK        ;判断9MS低电平和4.5MS高电平。
;----5ms delay----------------
         MOVLW     06H         ;防止抖动,延时5ms
         MOVWF     30H
LOOP4 MOVLW 0FFH
         MOVWF 31H
LOOP5    DECFSZ 31H,1
         GOTO LOOP5
         DECFSZ 30H,1
         GOTO LOOP4 

;-----------------------------
         BTFSC PORTA,0
         GOTO BACK       ;遥控接收无效。
LOOP0    BTFSS PORTA,0        ;遥控接收,等待高电平出现,约9-5ms
         GOTO LOOP0

;------------------------------以下是接收代码的步子
STEP      MOVLW D'32'         ;设置32位接收码的计数器.
          MOVWF BIT32
STEP1     BTFSC PORTA,0       ;等待4.5ms
          GOTO STEP1
STEP2     BTFSS PORTA,0
          GOTO STEP2       ;测一个脉冲,

          MOVLW D'180'         ;延时0.9ms,测试高电平的脉宽。
          MOVWF 29H
          BCF STATUS,C
WAIT      NOP
          NOP
          DECFSZ 29H,1
          GOTO WAIT 
          BTFSS PORTA,0         ;PA0 TO C
          GOTO C0
          GOTO C1
C0        BCF STATUS,C
          GOTO STEP3
C1        BSF STATUS,C

STEP3     MOVLW D'4'
          MOVWF 2AH
          MOVLW 28H        ;28H是DAT8F的地址
          MOVWF FSR        ;利用FSR进行间接寻址。
STEP4     RLF INDF,1
          DECF FSR,1
          DECFSZ 2AH,1
          GOTO STEP4
          DECFSZ BIT32,1
          GOTO STEP1
          MOVF ADD8L,0
          XORLW 00H
          BTFSS STATUS,Z
          GOTO BACK        ;低8位地址码不对,返回
          MOVF ADD8H,0
          XORLW 0FFH
          BTFSS STATUS,Z
          GOTO BACK
     MOVF DAT8,0       ;8位数据码不对,返回
  XORLW 00H
    BTFSS STATUS,Z
    GOTO BACK
     MOVF DAT8F,0      ;8位数据反码不对,返回
     XORLW 0FFH
      BTFSS STATUS,Z
      GOTO BACK 
  GOTO REM_OK       ;代码接收正确
BACK      BSF 20H,0
REM_OK    RETURN


 
 
回复  先清32位数据再接收.
然后每接收完8位后,RAM要清0

如;**************RAM移位***************************
j1       incf     jsp1     ;8位计数寄存器
         incf     jsp2      ;32位数,计存器.
         btfss    jsp1,3   ;是否有8位
         goto     js
         clrf     jsp1
         movf     sj,0     ;移8位数到W
         movwf       **    ;W到DATA
         incf     f       ;RAM地址加1
         clrf     sj       ;注意这里!!!!!!!!!!!!!!!
;*****************************
         btfss    jsp2,5     ;检测是否接收完32位.
         goto     js         ;否,再检测.
这是6122和6121  IC的接收程序.
发表于:2003-03-04 17:34:51    

 
小宝:很高兴看到你的提示,不过我的程序不是按照每8位接收后经过RAM放入寄存器中,而是每位都经过4次循环移位后直接放入存放数据的寄存器中(参见接收程序中的STEP4),所以不可能按昭你所说的那样清0。

          可能是接收程序与你所说的流程不同。请问你能把你完整的接收程序发给我吗?万分感激!我的EMAIL是tanga08@sina.com


你的程序单独看是没有问题的。我想关键在于发射编码究竟如何?你所谓“第一次可以,以后就不行了”,是不是每次复位后的第一次发射和接受是正常的?如果是这样的,说明还是连发的处理不是很合适。发生连发时,应该将25H-28H清空。否则第二次发射时,25H-28H已经有了部分不完整的数据,造成移位过程中的错误数据,接受失败。
我的意见不一定正确,仅供参考。



NEC遥控接收问题 
NEC遥控接收问题出错在位接收上。
我看程序有点问题,主要是在接收位上,应该是每接受8位后才把FSR-1,在回到接受程序上。如此进行4次可以接受32位的数据。
发表于:2003-03-04 20:46:38    

并不是位接收问题  
我那程序的位接收问题不是先接收8位再保存的,那个4次循环指的是每接收一位后即改变STATUS标志位C,同时4个接收寄存器依次带C位移位,等到接收32位后(即第1位移位32次后恰好保存到了第一个接收寄存器的第7位,第2位移到了第6位)你可以自己演示一下,这样32位正好保存到了4个寄存器中。
可以参见我那段程序的STEP3,STEP4。
很感谢有这么多热心的朋友关心这个问题!

=========================
红外线遥控编码有几种类型  

类型不知道,但格式有上千种 
 
我要做个通用型的红外接收器, 就是不管遥控器发送什么码,反正照收不误, 然后按原样把它发送出去, 我想用PIC做,你看要用哪种型号的控制器做较好!
发表于:2003-08-26 17:26:08    

  既然是转发你管他格式干什么? 
你又不解码,只要检测联接红外管的PIC的I/O口的电压变化就行了,再在另一个脚把他发送出去。送你一个检测红外的小程序。只不过要自己做一点电路。点击浏览该文件 

 
我用他做过东西,不是十分精确,但是如果是误码是可以看出来的,有时连续测量的话他会误操作,所以我一般只看前面的十来次,要精确还是用示波器看好,不知到有人在网上推销的叫电脑示波器的东西什么样好不好使? 



最后一位数据位的宽度如何检测!! 
以红外接收器为准,如果没有遥控信号的情况下,接收器的输出端是不是高电平,如果是,最后一位码,0.56ms低电平过后,接着是出现高电平对吧,那高电平的宽度如何确定就不好办了

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    推荐阅读

    往日酷贴

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]