请教定时中断延时函数的问题

2019-07-21 04:03发布

写了一段程序用按键去控制接触器(YX、BZ)吸合断开,想通过定时中断去处理延时问题,但是仿真只有第一次按按钮的时候有延时效果,请问我的中断函数哪里错了吗?

主程序:
        while(1)                                       
        {
                t=KEY_Scan(1);                                                //设置为MODE1,支持连按模式
                switch(t)
                {                                 
                        case KEYUP_PRES:                                //如果KEY0=1且WKUP=1则输出上行信号;KEY0具有优先级,如果KEY0=1则取消KEY1下行信号(避免同时按导致变频器同时输出上下行)
                                OUT_YX=1;                                        //主接触器吸合
                                YXADZ=1;               
                        if        (BZADZ==1)                                        //延时500ms,打开抱闸接触器
                        {                                                       
                                OUT_BZ=1;                                        //抱闸接触器吸合
                                BZADZ=0;
                        }
                        break;

                        case KEYDOWN_PRES:                                //如果=1输出下行信号;
                                OUT_YX=1;                                        //主接触器吸合
                                YXADZ=1;               
                        if        (BZADZ==1)                                        //延时500ms,打开抱闸接触器
                        {                                                       
                                OUT_BZ=1;                                        //抱闸接触器吸合
                                BZADZ=0;
                        }
                        break;

                        default:
                                OUT_BZ=0;
                                BZATZ=1;
                                if(YXATZ==1)
                                {
                                OUT_YX=0;                               
                                YXATZ=0;
                                }
                                break;
                }
        }                 

延时函数:
void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
        {
                if(YXADZ==0) i=0;
                if(YXADZ==1) i++;
                if(i>=100)
                {
                BZADZ=1;
                YXADZ=0;
                i=0;
                }

                if(BZATZ==0) j=0;
                if(BZATZ==1) j++;
                if(j>=100)
                {
                YXATZ=1;
                BZATZ=0;
                j=0;
                }               
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源                                
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。