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

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 中断源                                
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
zydstart
1楼-- · 2019-07-21 07:24
没有大神指导一下吗?
正点原子
2楼-- · 2019-07-21 07:36
仿真找问题
zydstart
3楼-- · 2019-07-21 11:01
正点原子 发表于 2019-3-20 02:40
仿真找问题

请问仿真时候出现这个问题可能是因为啥?
正点原子
4楼-- · 2019-07-21 11:38
 精彩回答 2  元偷偷看……
zydstart
5楼-- · 2019-07-21 15:07
正点原子 发表于 2019-3-21 02:05
重试下呢?

好像如果下载程序直接跑不仿真试就没问题,但是连上仿真器就经常弹出这个BUG。
正点原子
6楼-- · 2019-07-21 18:25
zydstart 发表于 2019-3-21 11:33
好像如果下载程序直接跑不仿真试就没问题,但是连上仿真器就经常弹出这个BUG。

是我们开发板么?
联系下我们技术支持吧

一周热门 更多>