码迷,mamicode.com
首页 > 其他好文 > 详细

红外通信原理

时间:2015-03-08 09:17:05      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

EXTI15_10_IRQHandler()
begin
 
  pulse_time = 0
  leader_code_flag = 0 /* 引导码标志位,当引导码出现时,表示一帧数据开始 */
  irda_data = 0 /* 数据暂存位 */
 
  while 1
    if 红外接收头数据引脚的电平 == 高电平
 
    //获取高电平时间
    pulse_time = Get_Pulse_Time()
 
    //>=50ms 不是有用信号 当出现干扰或者连发码时,也会break跳出while(1)循环 
         if( pulse_time >= 50ms
             break;
 
    //0.56ms:低电平0
    if pulse_time > 0.2ms and pulse_time < 1ms
      irda_data = 0
 
    //1.68ms:高电平1
    else if pulse_time > 1ms and pulse_time < 2ms
      irda_data = 1
 
    //4.5ms:前导位
    else if pulse_time > 4ms and pulse_time < 4.5ms
      leader_code_flag = 1
 
    //2.1ms:连发码,在第二次中断出现,40ms:16位操作码后的高电平时间,位于重复码之前
          else if (pulse_time > 2ms and pulse_time < 4ms) or (pulse_time > 36ms and pulse_time < 44ms)
              frame_flag = 1;               /* 一帧数据接收完成 */
              frame_cnt++;                  /* 按键次数加1 */
              break
 
 
    //在第一次中断中完成
    if leader_code_flag == 1
      frame_data <<= 1
      frame_data += irda_data
      frame_cnt = 0
  清除中断标志
end

 


红外通信原理

标签:

原文地址:http://www.cnblogs.com/cposture/p/4321293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!