jianhong_wu 发表于 2014-10-29 10:35:12

每次进定时中断就关闭定时器,执行完程序再打开定时器,时间误差会不会很大?已解答。

本帖最后由 jianhong_wu 于 2014-10-29 11:09 编辑

土豆づMr.--浙江:
鸿哥,你的按键扫描都放在终端里的。而且每次进去就要关闭定时器,执行完程序再打开定时器,这样 会不会让每次进入中断的时间误差很大?
void T0_time() interrupt 1
{
TF0=0;//清除中断标志
TR0=0; //关中断

key_scan(); //按键扫描函数
鸿哥--深圳:
误差是会有的,但是误差不大,一般的项目不会有影响的。如果要求很高的项目,中断里就不要放按键扫描,直接放在main函数的while(1)循环里就可以了.

土豆づMr.--浙江:
前面您不是说while 中也有很大的弊端呀,会被遗漏.

鸿哥--深圳:
要看具体项目的情况,一般被遗漏的可能性不大。我在我个人最所做过的最难项目中,就是把按键扫描放在主函数的while循环里的。当然,大部分普通的项目我还是把它放在定时中断里。

土豆づMr.--浙江:
要是我用一个定时器输出PWM驱动电机的话,能不能把keyscan放到另一个定时器去呢?

鸿哥--深圳:
这个你自己去判断吧,凭感觉。

土豆づMr.--浙江:
放在中断不好的,如果不关定时器就溢出,关了就会增加进入时间。我觉得前提是中断进入时间要稍长,至少大于终端函数中所有代码的执行时间。

鸿哥--深圳:
是不是好纠结呀?所以我们搞单片机的跟做人一样,要明白舍得这个道理。没有十全十美的,必然要进行取舍。只要满足系统要求就可以了,时间有点误差又如何,很多项目根本就不在乎这个时间误差,能满足系统就行了。

土豆づMr.--浙江:
嗯,但是,如果PWM输出频率过高,我就怕影响程序运行了呀。

鸿哥--深圳:
所以你要进行取舍。如果怕影响定时时间误差,你就把按键放在主函数里。这个你自己去选择
。大胆一点,不要啥事都问鸿哥,我只能给你一些建议。你自己挂帅做项目,最终选什么方案你要自己拍板。

土豆づMr.--浙江:
谢谢鸿哥,多问问长知识多好呀,反正有这个机会嘛。
页: [1]
查看完整版本: 每次进定时中断就关闭定时器,执行完程序再打开定时器,时间误差会不会很大?已解答。