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

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

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

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

如何用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的中断沿,要根据时序,来改变。据此原理,很容易编出代码。
还有一个地方值得注意 ; 红外信号的衰减很厉害的,所以一定要考虑它的接受范围的选择 
其实用那种方法都可以,在接收数据时时间方面留够余量,这样对正确接收数据有好处 

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

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
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]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]