跟你交流很开心, 以下纯粹探讨. 如有空盼回。
为了一个按键占用了一个外中断和一个定时器,算不上占用系统少吧?
我还是那句话,如果中断空着不用,严格意义上来讲,不是节约资源,而是资源浪费,而且外部中断判断按键的话,按键未按下时,在主循环中,连1个时钟的系统时钟都不会占用,这还不算占用系统资源少么?
只能滤掉按下那一刹那的抖动,滤不掉放开那一刹那的抖动吧?
是的,实际上,我自己写的代码,不是这样的,发上来的时候精简了一下,正常自己使用的时候,主程序也不会有按键标志判断的,代码如下:
(另,个人爱好,非工作,所以没有测试设备,大多功能都是自己写代码烧录,然后通过LED状态来测试验证,你这边方便的话可帮忙测试,实际应用中STC15以上系列,IT0 =1 时,释放按键时,只要不是故意手抖,抖不出IE0=1, 即不会触发中断,原因不明,可能和 IT0 的判定变更了有关,你那边有条件的话,不知能否也帮忙验证一下?)
void EX0_INT interrupt 0
{
EX0 = 0; //关外部中断
TR0 = 1; //开定时器消抖
//此处按键按下后的 需要执行的操作
}
sbit INT0 = P3^2;
void T0_INT interrupt 1
{
if((IE0) || (!INT0)) //判断按键释放&消抖
{
IE0 = 0; //继续消抖
}
else
{
EX0 = 1; //消抖完成,重开外部中断
TR0 = 0; //关定时器
}
}
|