野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17076|回复: 2

火哥,你这个红外遥控的程序是什么原理啊,我看别人都是用PWM的输入捕获功能

[复制链接]
发表于 2020-2-15 17:43:10 | 显示全部楼层 |阅读模式
2020-02-15_173930.jpg
回复

使用道具 举报

发表于 2020-2-16 20:19:30 | 显示全部楼层
资料里面  资料文件夹  原理分析文本写了
回复 支持 反对

使用道具 举报

发表于 2020-3-25 19:45:37 | 显示全部楼层
很想知道下降沿中断函数内的这个whil循环在接收到正常编码时是如何跳出来的?
    while(1)
    {
      if( IrDa_DATA_IN()== SET )        /* 只测量高电平的时间 */
      {      
        pulse_time = Get_Pulse_Time();
        
        /* >=5ms 不是有用信号 当出现干扰或者连发码时,也会break跳出while(1)循环 */
        if( pulse_time >= 250 )               
        {
          break; /* 跳出while(1)循环 */
        }
        
        if(pulse_time>=200 && pulse_time<250)         /* 获得前导位 4ms~4.5ms */
        {
          leader_code_flag = 1;
        }
        else if(pulse_time>=10 && pulse_time<50)      /* 0.56ms: 0.2ms~1ms */
        {
          irda_data = 0;
        }
        else if(pulse_time>=50 && pulse_time<100)     /* 1.68ms:1ms~2ms */
        {
          irda_data =1 ;
        }        
        else if( pulse_time>=100 && pulse_time<=200 ) /* 2.1ms:2ms~4ms */
        {/* 连发码,在第二次中断出现 */
          frame_flag = 1;               /* 一帧数据接收完成 */
          frame_cnt++;                  /* 按键次数加1 */
          isr_cnt ++;                   /* 进中断一次加1 */
          break;                        /* 跳出while(1)循环 */
        }
        
        if( leader_code_flag == 1 )
        {/* 在第一次中断中完成 */
          frame_data <<= 1;
          frame_data += irda_data;
          frame_cnt = 0;
          isr_cnt = 1;
        }
      }      
    }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 07:12 , Processed in 0.029202 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表