中断标志位不清除会怎么样?
中断标志位不清除, 结果是完成中断处理程序后, 它就继续再进中断, 根本不会回到主程序。
代码如下(示例):
void EXTI2_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY2==0)
{
LED0=!LED0;
}
//EXTI_ClearITPendingBit(EXTI_Line2);//清除LINE2上的中断标志位
这里的清除中断标志位的一行代码被我注释掉了,所以并没有清除中断标志位。这样的话会发生什么呢?按下KEY2时,完成中断处理程序后仍然进入中断,中断服务函数里的内容会被一直重复执行,知道松开KEY2。这样的话并不能控制LED0的翻转了,所以中断结束之后一定要清楚中断标志位。