在红外遥控实验内,连接接收器的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;
}
}
} |