打印

红外遥控实验内的中断的while是如何跳出的?

[复制链接]
483|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
哈金|  楼主 | 2020-4-2 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在红外遥控实验内,连接接收器的io口设置为下降沿中断,很想知道:
1.下降沿中断函数内的这个whil循环在接收到正常编码时是如何跳出来的?
2.难道是紧接着的下降沿中断继续使用这个中断函数,就不用退出来直接接着运行就好了吗?
    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;
        }
      }      
    }

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

432

主题

433

帖子

1

粉丝