红外接收目前用的比较多的有三种方法.
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"
[1] [2] [3] 下一页
本文关键字:程序 红外线 PIC单片机,单片机-工控设备 - PIC单片机