友情推荐网上购书渠道:
EDN网(ednchina)购书入口   >>>
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

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

天气预报
百宝日历

百宝专栏

  • 首页 相册 标签
  • 电脑应用(65)
  • 供需信息(22)
  • 写书近况(82)
  • 匠人文集(115)
  • 硬件技术(171)
  • 匠人公告(86)
  • 与非门专栏(545)
  • 匠人笔记(115)
  • 团队撰写(96)
  • 汽车电子(52)
  • 编程技巧(465)
  • 程序宝典(476)
  • 网络酷文(472)
  • 开发工具(19)
  • 资料宝藏(274)
  • 项目管理(11)
  • 藏经宝阁(42)
  • 趣味设计(5)
  • 社区热贴(2)
  • 比尔盖茨熊专栏(0) 
  • 百宝信息

    载入中...

    百宝流量

    (2006-07-01开始)



    匠人手记

    芯片专题

    器件专题

    软件专题

    硬件专题

    综合专题

    项目专题

    原创专题

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

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

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

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

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

    红外接收目前用的比较多的有三种方法.

    1,查询法,既软件不停地查询是否为低(遥控信号)然后通过精确延时读头码.和
    数据0或1码.
    2,读到有信号输入时开打开定时计数器,然后通过读定时器的中断次数,来判定头码和0,1的.
    3 RB0或RB4-RB7加定时器(或软件延时)利用输入中断的好处是可做实时控制.

    如下:
    ;***发射为6221,把接收到的码值送到ICD的PORTC口显示******
    ;**************** ***************
             org    0000h
             nop
             goto   start
             org    0004h
             goto   serv
    ;**************************************************
    start
             bsf     status,rp0      ;体1
             movlw   0000h
             movwf   trisc          ;C口输出
             movlw   0ffh           ;B口RB0输入
             movwf   trisb
             movlw   B'00000100'     ;1:64
             movwf   option_reg      ;TMR0定时器
             bcf     status,rp0      ;体0
             clrf    intcon            ;10010000
             bsf     intcon,7          ;开放INT下降沿中断
             bsf     intcon,4
             bcf     intcon,1
             clrf  portc
    loop    
             sleep
             nop
             goto  loop
    ;*************现场保护********************************
    serv     
             movwf   w_temp
             swapf   status,0      
             clrf    status        
             movwf   status_temp   
             movf    pclath,0
             movwf   pclath_temp
             clrf    pclath
       
    ;***************遥控处理.******************************

             bcf  intcon,1
             btfsc    portb,0        ;检测RB0是否为0.
             goto     zdhh           ;RB0不为0,误中断.反回
             call     delay8         ;调用8MS延时.头码检测.
             btfsc    portb,0        ;检测头码
             goto     zdhh           ;不是中断反回
             call     delay5          ;延时5MS后进行数据检测.
             btfss    portb,0         ;检测RB0是否为高电平.
             goto     zdhh            ;不是继续检测.
    ;*********************************************
           
             clrf     data1          ;20H
             clrf     data2          ;21H
             clrf     data3          ;22H
             clrf     data4          ;24H
             clrf     jsp2           ;32位计数器
             clrf     sj             ;接收的数据寄存器
             clrf     jsp1           ;8位计数器
             movlw    0x20           ;20H寄存器送W
             movwf    fsr            ;由W送20H到FSR
    jc       btfsc    portb,0        ;检测RB0是否为低电平.
             goto     jc             ;不是继续检测.
    ;**************0和1数据检测****************************      
    js       call     delay1         ;延时1.3MS
             btfsc    portb,0        ;检测头码过后是0还是1,
             goto     s1             ;检测的数据不"1"
    ;*************0数据处理*****************************
             bcf      sj,c            ;数据是"0"
             rrf      sj,1            ;0数据右移到SJ寄存器
             goto     j1
    ;**************1数据处理.*************************
    s1       bsf      sj,c
             rrf      sj,1
    ddp      btfsc    portb,0
             goto     ddp
    ;**************RAM移位***************************
    j1       incf     jsp1     ;8位计数寄存器
             incf     jsp2      ;32位数,计存器.
             btfss    jsp1,3   ;是否有8位
             goto     js
             clrf     jsp1
             movf     sj,0     ;移8位数到W
             movwf    indf     ;W到DATA
             incf     fsr      ;RAM地址加1
             clrf     sj
    ;*****************************
             btfss    jsp2,5     ;检测是否接收完32位.
             goto     js         ;否,再检测.
             movlw    B'10001111' ;送IC高8位码
             xorwf    data1,0    ;相减(Z:1=结果为0;0=结果不为0)
             btfss    status,2    ;结果为0则下一步.
             goto   zdhh        ;相减结果不为0中断返回
              movlw    B'101010101'  ;低8位IC码检测
              xorwf    data2,0
             btfss    status,2
              goto    zdhh
             ;comf     data4,0   ;数据反码检测.暂不用.
             ;subwf    data3,0
             ;btfss    status,2
             ;goto      zdhh
             movf     data3,0    ;送数码到C口
             movwf    portc
              goto     zdhh           ;接收完32位则中断返回
    ;****************zdhh中断返回程序*********************
    zdhh   
             movf     pclath_temp,0
             movwf    pclath
             swapf    status_temp,0  ;交换STATUS与W内容,将体选还原.
             movwf    status         ;将W内容送STATUS寄存器
             swapf    w_temp,1       ;交换w_temp
             swapf    w_temp,0       ;交换w_temp与w内容,将w_temp内?       
             bcf      intcon,1
             retfie                  ;中断返回,

    ;****************8ms*********************************
    delay8   bcf     intcon,5
             bcf     intcon,2
             movlw   D'15'
             movwf   tmr0
    loop1    btfss   intcon,2
             goto    loop1
               return
    ;****************5ms*********************************
    delay5   bcf    intcon,5
             bcf    intcon,2
             movlw  D'120'
             movwf  tmr0
    loop2    btfss  intcon,2
             goto    loop2
               return
    ;****************1.3ms*******************************
    delay1   bcf    intcon,5
             bcf    intcon,2
             movlw  D'240'
             movwf  tmr0
    loop3    btfss  intcon,2
             goto    loop3
             return
    ;*************
              end



      错码的可能有两种
    一个是字头对不好
    一个是数据传输有错误 特别是时序错误
    后面的可以用软件校验
    字头不好确认 最好可以在软件规定上连续多发几个 然后用移位方法判断有多次连续相同子头出现 对齐字头 比如连续出现20个1 0转换后 表示准备发送数据 然后等待1 0 传输结束后 跟着有一个字头 如11110000 这样 后面就可以接数据了
     
    A 我在外面买了一个万能遥控器,他就是用pic16c57c作的,那就说明它是没有中断的,我真搞不懂他是怎么做的,它是没有解码芯片的,请问有谁知道,我现在也在做这个,有谁能提示一下,谢谢。

    B 这很容易 
    上次我用两片PIC16C57C作了一个发射与一个接收的小模块。有效控制,没能出现乱码,但有一缺点就是会受到其它红外线产品的干扰!! 

    C 红外接受 
    用外中断,加定时,即可检测出编码,非常准确。我用的是PIC16F72芯片。 


    D 我使用红外线接受管加两级放大,看红外线的输出波形,用长虹的遥控器当信号源,在示波器上要打到10ms才能看到完整的信号波形,像个稳压后的波形一样的东西,我看了有关方面的书说,红外线信号时调制在38khz的信号上的,那我将示波器打到50ns上为什么看不到波形,这样的话程序不是没有办法编了,望哪位高人帮帮我,谢谢 


    E 可以用CCP中的input capture(输入捕捉)功能,很好用的,仔细阅读一下input capture有关内容,很容易的
    在CCP的引脚上若有事件发生(可设置为上升沿,下降沿或其他方式),TMR1的内容背记录,这样很准确的,即使中断响应较慢也没问题的,这样的功能来做红外遥控最恰当不过!!

    F 回复红外定时接收原理 
    用RB0做中断(FIRST:RISING TRIG,SECOND:FALLING TRIG),同时启动TIMER2定时100US)计数.当下一个中断来临时,由TIMER2有88个数,9MS就检测出来。其余时间,
    类推。注意,RBO的中断沿,要根据时序,来改变。据此原理,很容易编出代码。
    还有一个地方值得注意 ; 红外信号的衰减很厉害的,所以一定要考虑它的接受范围的选择 
    其实用那种方法都可以,在接收数据时时间方面留够余量,这样对正确接收数据有好处 

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

    发表评论:
    载入中...

    广告5号位 [投放]


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

    站内搜索


    站外搜索


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

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

     
     
     

    新鲜货色

    匠人手记

    近期动态

    载入中...

      《匠人手记》购书全攻略 
     书友近况:淘书手记答疑与讨论:什么是散转程序 
     《匠人手记》新书艳照
     EDN《匠人手记》签名售书优惠活动开始报名啦!
     欢迎加入《匠人手记》EDN书友会
     欢迎加入《匠人手记》书友会Q群
     《匠人手记》终稿目录
     《匠人手记》封面,请大家先睹为快
     上周六收到了北航寄来的《匠人手记》清样,让大家先睹为快

    匠人原创

    粉丝评论

    往日酷贴

    载入中...

    载入中...



     网络酷文:博客,改变的不仅仅是图书 
     网络酷文:C语言宏定义技巧C语言 条件编译详解

      21IC上海2008-04聚会报名进行中。。。 
     两分钟让你明白什么是ERP![转]
      神奇的Duff's Device 算法
      实用一线通讯电路及软件设计方法
      程序员的“七年之痒”
      史上最短但最精彩的武侠小说
      网络无厘头文学《缺钙水浒》(爆笑)

     你的博客还能持续多久(转贴)
     电动车无刷电机控制器软件设计要点(作者:谢渊斌)

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!