十年专注单片机方案开发的方案公司英锐恩,分享基于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的接收程序.
(文源网络,侵删)