程序:
#define key0 (1<<15)
void EXTI15_10_IRQHandler(void)
{
EXTI->  R |= (1<<15); //挂起中断,即清除中断标志位
delay_ms(10); //消抖
if( GPIOB->IDR & key0 ==0 ) // 说明按键按下,外部中断15发生
{
flag = ~flag;
}
}
main函数一段:
while(1) {
if( flag==1)
{
LED_ON();
delay_ms(100);
LED_OFF();
delay_ms(100);
}
else( flag==0 )
{
LED_ON();
delay_ms(1000);
LED_OFF();
delay_ms(1000);
}
}
问题:
中断可以产生,为什么产生中断后,flag只能短时间内取反,之后又会变回原来的值。
是这样的:初始值flag==0,中断一次,只有瞬间flag==1,之后又flag==0,
按理说,每中断一次,flag值就取反一次呀,而且退出后,flag值会保持不变,直到下次中断发生才会再取反呀,但是.......?!!!
期待回帖 谢谢
|