标题: 单片机定时器中断程序求助 [打印本页]

作者: baibai310    时间: 2020-3-5 20:06
标题: 单片机定时器中断程序求助
为什么在定时器的中断内调用一次函数之后,不能再进入定时器中断了(之前的进入都没问题,调用函数后就不能进入了)?调试发现程序一直在while(1)中不动,TH0、TL0已经赋值了。
中断内的调用函数部分:
if(t > (t1 + 10000))
{
        mode4();
}
调用的函数:
void mode4()
{        
        t = 1;
        restore = 0;
        t1 = 25000;
        t2 = 25000;
        t3 = 25000;
        TR0 = 1
        while(1);
}



作者: lovexulu    时间: 2020-3-5 22:57
void mode4()
{        
        t = 1;
        restore = 0;
        t1 = 25000;
        t2 = 25000;
        t3 = 25000;
        TR0 = 1
        while(1);
}
就在这个函数中的while(1);中无限循环了。。。。
作者: hantu    时间: 2020-3-5 23:27
你竟然在中断中调用一个带无限循环的子函数
作者: faguiq    时间: 2020-3-6 01:18
这样会一中断又跑这个函数,函数里又在whiel(1),所以就在函数与中断之间循环,其实是有产生中断,在你没感觉
作者: wulin    时间: 2020-3-6 09:44
使用定时器中断服务函数的一般要求:函数中任务尽可能简短,俗称打一枪就跑,不可久留。更不能接近或大于中断周期。不是必须不要在中断函数中执行具体任务,只要设置个标志,具体任务放在main函数主循环中完成。更不能调用带有阻滞型延时函数和while(1)死循环的子函数。在中断任务没有完成前CPU不会响应再入中断请求。除非有更高优先级中断才能打断此中断。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1