新闻  |   论坛  |   博客  |   在线研讨会
开关(switch)中断(Interrupt)程序要点
Johnsonhk88 | 2008-07-03 00:34:37    阅读:3390   发布文章

开关(switch)中断(Interrupt)程序要点:

1.      当人们按开关来产生服务中断时,MCU通常操作速度比人们按制速度快很多。虽然人们只按一次开关,MCU已产生很多服务中断信号,这样会导致程序乱跑和产生错误。

2.      人们按一次开关后,开关不会只产生一个中断信号。而是在一个大中断信号后, 连续产生小信号,直至信号减至0为止。(rebound现象 )MCU是会产生很多服务中断信号,这样会导致程序乱跑和产生错误。

3.      为了避免以上的问题,需要设计一个延时程序(Time delay program),用来延长中断程序的反应时间(response time),来避开开关按键时的不稳定状态和MCU中断反应过快现象。

4.      通常延时程序(Time delay program)控制在6ms20ms()内。如果延时太短,便失去避免(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();

              }

            }

        }

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
Tony  2008-07-03 09:27:26 

感谢楼主分享!

推荐文章
最近访客