"); //-->
开关(switch)中断(Interrupt)程序要点:
1. 当人们按开关来产生服务中断时,因MCU通常操作速度比人们按制速度快很多。虽然人们只按一次开关,但MCU已产生很多服务中断信号,这样会导致程序乱跑和产生错误。
2. 人们按一次开关后,开关不会只产生一个中断信号。而是在一个大中断信号后, 连续产生小信号,直至信号减至0为止。(rebound现象 )MCU是会产生很多服务中断信号,这样会导致程序乱跑和产生错误。
3. 为了避免以上的问题,需要设计一个延时程序(Time delay program),用来延长中断程序的反应时间(response time),来避开开关按键时的不稳定状态和MCU中断反应过快现象。
4. 通常延时程序(Time delay program)控制在6ms至20ms(秒)内。如果延时太短,便失去避免(rebound现象)的效果。如果延时太长,会让人们感觉开关没反应。还有当人们连续按开关,因为中断反应太慢,会出现中断程序没有完成下, 连续再做中断程序,导致程序乱跑和产生错误。
以下是AVR开关(switch)中断(Interrupt)程序例如:
SIGNAL(SIG_INTERRUPT1)
{
cli(); // disable all interrupt response
unsigned char check_int1;
check_int1 = ((PIND) & 0x08);
if (check_int1 ==0) // test switch is push
{
_delay_ms(10);
check_int1 = ((PIND) & 0x08);
if (check_int1 ==0)
{
Power_ONOFF();
while(check_int1 == 0) // test the switch is release
{
check_int1 = ((PIND) & 0x08); // update the switch status
}
sei();
}
}
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。