红外解码实验用到定时器更新中断来做什么求指点

2019-08-20 19:17发布

[mw_shl_code=c,true] if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)//更新中断, { if(RmtSta&0x80)//上次有数据被接收到了 引导码标志是1 { RmtSta&=~0X10; //取消上升沿已经被捕获标记 if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//标记已经完成一次按键的键值信息采集 if((RmtSta&0X0F)<14)RmtSta++; else { RmtSta&=~(1<<7);//清空引导标识 RmtSta&=0XF0; //清空计数器 } } }[/mw_shl_code] 这段程序干什么的。实在没有看懂用这个定时器的更新中断来做什么, 他们的帖子也看了但是也不懂,纠结一天了。还请明白人指点一二。 那个14 是干什么的 ,还有那个清空计数器  清楚的什么???

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-08-20 20:34
红外接收通过定时器溢出中断来判断是否结束解码(就是编码的接收),这里的14是最大溢出次数,用于标记定时器的溢出次数,这里其实应该是15才对(0X0F)。不过不影响使用。
exv
2楼-- · 2019-08-21 01:29
14 是用来判定干扰/无效信号的。
既然判定之前信号无效,于是清空计数器。
尘封守候
3楼-- · 2019-08-21 02:37
回复【2楼】exv:
---------------------------------
还是不懂给详细说说怎么判断为干扰。为什么是14,20行不行、还有那个计数器,记得是什么数?? 。。还有这个更新中断时干什么的?? 还有给rmtsta 第六位一个按键信息完成位置1为什么在这里置,。。。谢谢了。。
exv
4楼-- · 2019-08-21 05:11
回复【3楼】尘封守候:
---------------------------------
20不行,高位会吞。

if((RmtSta&0X0F)<14)RmtSta++;
写为
if((RmtSta&0X0F)!=0X0F)RmtSta++;
会好理解些

建议按照NEC规范自己写一遍再调一调;
有的时候,去看懂别人的代码比自己写一遍要难得多。
fjqzzhangzhibin
5楼-- · 2019-08-21 08:29
 精彩回答 2  元偷偷看……
船长23
6楼-- · 2019-08-21 11:49
回复【6楼】fjqzzhangzhibin:
---------------------------------
回复【5楼】正点原子:
---------------------------------
原子哥,我解释下你看看对不对,耽误你一点时间,我也琢磨了一天呢,后来我发现在开发指南里有这么一句话,遥控接收头在收到脉冲时候为低电平没有脉冲时候为高电平。这样的话我们在按键完成之后一直是高电平捕获中,自然就会溢出,溢出之后判断是不是第一次溢出,也就是if(RmtSta&0X0F)==0X00,说实话我当时最最不明白的就是这句,如果是第一次溢出的话就标记完成一次采集。可是下面那句判断是不是14次溢出的我觉得是不是有点没必要呢?那句话我还是有点疑惑。原子哥看到的话帮忙解答下吧。

一周热门 更多>