;*************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 这样 后面就可以接数据了
上一页 [1] [2] [3] 下一页
本文关键字:程序 红外线 PIC单片机,单片机-工控设备 - PIC单片机