红外遥控应用广泛,而编码及识别往往是单片机初学者最头痛的问题,其实红外编码及识别并不难,关键是要掌握红外编码及识别的方法,首先让我们来了解下红外编码. 一.红外编码. 红外编码一般是以下格式. 9ms 高电平的头+2.4ms低电平的结果码+8byte address code+8byte address code+8 byte user data+ 8byte data 由于采用一体化红外接收头,所以这里要注意发送的高电平实际上是38K的载波,就是高低电平按38K的频率不断地变换,一体化接收头会自动识别,整理为低电平. 另外一点要注意的是,发送的1,和0如图所示,其实是低电平的时间长短不同.高电平的时间都为560us.判断低电平的时间是识别0,1的关键. 二,红外识别. 红外识别实际上是发送的相反过程.如高电平接收后是低电平,以下是识别流程, 1.判断9MS头是否OK 2.判断结果码. 3.数据560us低电平结束,高电平开始,开始判断接收数据. 长的高电平为1,反之为0. 4.32BYTE接收完否?没有,重复第三步. 三,连续码的问题. 如果用户长按,实际上是只发送一个9MS头,和一个结果码,还有一个560us高电平即可.这样读出的数据实际上是一个固定的值.根据这个值就可以判断是否是连发代码. 这里简单讲了红外编码及识别的初步知识,以下是部分识别代码. ;--------------------------------------------------- ir_rec movlw 0x20 movwf IPOD3 ;4*8=32 bits. ir_begin movlw 0x09 ;9 movwf IPOD2 ir_rec_data call delay120us ;delay delay120us btfss _IR goto ir_low ;low.... decfsz IPOD2,F goto ir_rec_data ;9*120us...if low then 0, setc ;still high? 1 goto ir_save_data ir_low clrc ir_save_data rlf IPOD5,F rlf IPOD6,F rlf IPOD7,F rlf IPOD8,F ;4*8=32 bits. movlw .80 ;80 movwf IPOD2 ir_next call delay120us ;delay120us btfss _IR goto ir_next_bit ;next bit decfsz IPOD2,F ;80*120us=9.6ms goto ir_next bsf _IROK retlw 0 ;return |
|