问题描述
- 在单片机开发中,我遇到了一个很奇怪的关于外部中断的问题
-
void button_int0 () interrupt 0 { //当函数正确时,需改正delay(大数目)为delay_stop(大数目);
uchar timp;
uint i=0;
/****
IE=0x80时,程序执行完了,但是没有办法退出中断,
当使用EA=0时,就可以退出中断了。很肯定的是,并没有重复进入中断。
*****/
//IE=0x80;
EX0=0;
EA=0;light =1; timp=P1; exit_flag=off; # if test test_define(); # endif //closs door while(P1!=0XFF); //waiting the (button)interrupt 0 relax # if test light=!light; // test why doesn't IE equal 0x80 delay(20000); # endif while((P1!=0xEF)&&(exit_flag==off)){ //按下P14口实现“取消”功能 并且在调用函数中没有按“取消” timer_selection(trace_kb(0,0,0)); //trace_kb(0,0,0); } LIGHT_off(); // test why doesn't IE equal 0x80
# if test
light=!light; // test why doesn't IE equal 0x80
delay(20000);
# endifdelay_stop(22500); // 等待松开按键,预防按键出错再次进入到中断中 EX0=1; EA=1; return;
}
解决方案
实际按键时会跳动,也就是中断口容易多次快速触发,中断程序中 用 delay 是不可取的。用while()也是不可取的,建议 重新设计按键程序。
解决方案二:
实际按键时会跳动,也就是中断口容易多次快速触发,中断程序中 用 delay 是不可取的。用while()也是不可取的,建议 重新设计按键程序。
时间: 2024-08-07 08:43:36