技术热线: 4007-888-234
设计开发

专注差异化嵌入式产品解决方案 给智能产品定制注入灵魂给予生命

开发工具

提供开发工具、应用测试 完善的开发代码案例库分享

技术支持

从全面的产品导入到强大技术支援服务 全程贴心伴随服务,创造无限潜能!

新品推广

提供新的芯片及解决方案,提升客户产品竞争力

新闻中心

提供最新的单片机资讯,行业消息以及公司新闻动态

PIC单片机红外线控制方面的内容

更新时间: 2019-03-23
阅读量:2235

十年专注单片机方案开发的方案公司英锐恩,分享PIC单片机红外线控制方面的内容。英锐恩现提供服务产品涉及主控芯片:8位单片机、16位单片机、32位单片机及各类运算放大器等。

红外线控制方面的内容

如何用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的接收程序.