初中生
最后登录1970-1-1
在线时间 小时
注册时间2021-9-2
|
发表于 2021-9-2 21:23:04
|
显示全部楼层
1.下降沿中断函数内的这个whil循环在接收到正常编码时是如何跳出来的?除开长按情况 ,一般 按两次 遥控器的时间都大于5ms ,无论是引导码 ,地址码 ,还是 数据码 判断他们的条件都是高电平的时间,并且这个时间没有超过5ms
数据码 和 地址码 接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高
同步码由一个 9ms 的低电平和一个 4.5ms 的高电平组成,
连发码 : 如果在一帧数据发送完毕之后,按键仍然没有放开,则发射连发码,(由 9ms 低电平+2.5m 高电平(判断这个时间)+0.56ms 低电平
+97.94ms 高电平组成),
2.难道是紧接着的下降沿中断继续使用这个中断函数,就不用退出来直接接着运行就好了吗?
是的,要在 中断函数里把 数据给读完
中断函数里有个死循环 ,而这个死循环里又在不断判断 接受引脚是否遇到高电平 ,高电平时间是多少 高电平时间 对应着不同的处理 例如 数据暂存位赋逻辑位 0/1 ,再根据leader_code_flag标志,把 数据暂存位写入到 frame_data(32位)的不同位中.
对于连发码的处理 由于
else if(pulse_time>100&&pulse_time<200) //2000<pulse_time<4000
{// NEC 码规定的连发码(由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高电平组成)
frame_flag=1;//一帧数据接收完成 连续码在第二次中断 出现
frame_cnt++; /* 按键次数加1 */
isr_cnt ++; /* 进中断一次加1 */
break; /* 跳出while(1)循环 */
}
frame_flag=1;/* 一帧数据接收完成标志 */
break;退出中断 |
|