void EXTI9_5_IRQHandler(void)
{
//上行传感器中断
if((EXTI_GetITStatus(EXTI_Line9) != RESET)&&(mark==1))
{
TIM_Cmd(TIM2, ENABLE); //开定时器2//开定时器
biaozhi1++;
if(biaozhi1>3)
{
// delay_ms(100);//延时
TIM_Cmd(TIM2, DISABLE); //关闭定时器2,取消误触发
TIM_SetCounter(TIM2, 0);//定时器2清零
TIM_SetCounter(TIM3, 0);//定时器3清零
TIM_Cmd(TIM3, ENABLE); //使能TIM3 开定时器3.延时3分钟
key=2;
}
EXTI_ClearITPendingBit(EXTI_Line9); //清除EXTI9线路挂起位
}
else EXTI_ClearITPendingBit(EXTI_Line9); //清除EXTI9线路挂起
//
请大家看上面的中断程序,需求是,中断一次,biaozhi1加1,在5秒钟之内中断三次以上,进入if,执行if里面的语句,现在的情况是中断一次,就进入if执行里面的语句了,biaozhi1已在其他处置零,开机就这样的,如果把biaozhi1屏蔽掉,if里面的语句是不执行的,请问大家,这个中断里biaozhi1++;这个,为什么会循环加1,是哪里的问题,请大咖赐教,biaozhi1已在其他处清零
以下是做过的实验,
1,biaozhi1>3,biaozhi1<3,biaozhi1=3,这三种情况都试过,都是触发一次,就执行了if
2,biaozhi1++;这句屏蔽掉,中断多少次,都不能执行if,
3,biaozhi1>300,这种情况,执行不了if,biaozhi1>30,可以多次中断后执行if,
这个中断函数里的另一个端口,完全正常,但这两部分的配置,程序语句都一样的
请大家帮忙解决
|