PIC单片机红外遥控编码及识别.

2019-04-15 11:44发布


红外遥控应用广泛,而编码及识别往往是单片机初学者最头痛的问题,其实红外编码及识别并不难,关键是要掌握红外编码及识别的方法,首先让我们来了解下红外编码.           一.红外编码.            红外编码一般是以下格式.              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