单片机中断时间过长为什么
A. 51单片机第一次进入中断的时间特别长
51单片机中,中断分高低两个优先级,高优先级的中断能打断低优先级的中断。
但同级中断是不能打断同级中断的!无论该中断函数有多长,在执行到一半这个中断又发生了,还是要等到该中断函数执行完毕,并再执行了一条主程序指令后才会再次进入该中断。
不过,若楼主恰好在这个低优先级中断服务程序中修改了该中断为高优先级,那么如果该中断函数比较长,执行到一半又触发了这个中断,则该中断函数就会被重新从头开始执行(中断嵌套)。这是因为除串口中断以外的其他中断,在 CPU 响应该中断,程序转入该中断函数前就已经将该中断的中断标志清零了。
另外,51的串口中断比较特别,因为需要软件清除串口中断标志,所以只要在未清串口中断标志前,是不会发生上述这样的中断嵌套的。
B. 51单片机中断程序服务时间长好还是短好
通常情况下越短越好。因为进入中断以后,主程序停止运行,再来中断可能会导致堆栈溢出。
看具体应用,有的程序一生都在等待那个唯一的中断,主程序就一句while(1){.....}
C. 影响51系列单片机中断响应时间的因素
您好:
因素有:
1、单片机自身的因素(晶振频率大小、机器周期是多少等)
2、程序中中断的优先级(有没有中断嵌套、中断优先级那个高等)
3、单片机正在执行的指令(单片机要执行完正在执行的指令再执行中断指令)
希望可以帮到您。
补充:
对于3,我再做讲解:
即使单片机中断产生,而且CPU准备响应它的中断,但CPU也要执行完正在执行的指令。对于不同的指令,指令执行的时间不同(有单周期、多周期的指令之分),而且,如果正在执行的是RETI指令,则CPU还要把之前压入堆栈的内容弹出再执行中断。所以CPU正在执行的指令不同,时间也就不同。
D. 有个问题,51单片机中外部中断采用跳沿触发方式,为什么中断执行完后得等好长时间主程序才开始恢复执行
因为你的中断程序执行的时间太长了吧!如果是大量的工作最好不要写在中断程序中执行,那样容易丢失中断事件!还有就是虽然用的是跳变沿出发,但是触发一次就要执行一次中断程序,结束之后才回到主程序的!希望可以帮到你
E. 51单片机定时器T2设置为自动装载,中断程序执行时间很长,超过定时时间会怎么样
你如何理解触发2字?
我的理解是:
中断过程分别触发(申请)、中断执行两个部分,任何中断源满足条件都可以申请中断,置中断标志位。
如果当前有中断正在执行,不同优先级的,高级别中断能够申请成功,中断当前中断;
同级或低级则必须等待当前执行完毕,且标志位仍在;如果标志位被清除或电平中断的电平不满足条件,则中断丢失。
具体到你这里,则会置标志位,但申请不了中断执行,待当前执行完毕,标志位仍在的话,则执行下次中断,实际上就没办法返回到主程序运行了。
要注意的是,如果中断子程序在开头清中断标志,则按上述执行;如果在子程序结尾处清标志位,则下次中断丢失。
重装是指令执行的,当然有时间差。
F. 为什么单片机定时越短,中断次数增多啦,反而出现死机
你的感觉是中断次数多,就不容易死机吗,是这样的,如果是正常的运行程序,此时的单片机的资源用的是最少的,也就是cpu的负担是最轻的,可是一旦有的中断,你就开了中断,每一个机器周期都要去查这些中断标志,标志有效,那么就要对当前的地址进行存储,还要对看是否有同级中断,是否满足中断的条件,满足,转向中断服务,完了,还要自动清除这些标志,这些都是你看不见的,大量的工作都是硬件在自动完成,这也就是cpu负担更重,如果你中断太频,内部硬件的电路出现问题的机率就会增大,当然死的快了。
G. 单片机串口中断函数中,如果在里面时间过长,后面来的数据会被自动丢弃吗
不是自动丢弃,而是反复接收,导致后来的数据将先收到、未处理的数据给覆盖了。
例如对方发给你一串0x01、0x02、0x03,假如你中断函数太过磨叽,可能在将0x01从缓冲区中取出后、在处理的过程中又先后收到了0x02、0x03,那么0x03会把0x02覆盖掉,导致你下次再进入串口中断函数时只能取出0x03了。
因此中断函数务必简洁高效,只要不是火烧眉毛的判断/处理,一律应当扔到主循环体或常规任务中处理。
另外现在很多的单片机串口是具有硬件FIFO的,善用FIFO也会大大提高整个系统的中断效率。
H. 51单片机主函数较短,定时中断设定的定时时间较长。是不是主函数一直重复运行
这么说也不无不可,在等待定时溢出中断的过程中,主程序一直都在循环中重复运行。比如:
main()
{
TMOD=0x01;
TH0=TL0=0;
TR0=1;
ET0=1;
EA=1;
while(1); //等待溢出中断时,主程序一直在这里原地循环。
}
I. 51单片机定时器中断
定时器一旦启动,除非你写命令让它停下,否则是一直在运行的。定时器的计数器一旦溢出,就会发生中断,程序就开始执行中断函数中的程序。而计数器依旧开始累加,直到下一次溢出,不断往复,永无休止。注意的是,当你的中断服务程序耗费时间过长的时候,意思是,CPU执行你的中断服务程序的时间大于中断计时时间的话。那么,CPU将在这段中断服务程序还没有还没有执行完就会收到下一次中断请求,此时CPU将不再执行之后的中断服务程序,转而重新从第一条中断服务程序开始执行。
J. 用定时器中断,单片机中断处理时间大于定时器定时时间会怎样
如果是自动初始值的,中断处理时间长,不会影响定时器工作的,只是中断处理结束后,单片机又马上进入新的定时器中断函数,主函数中的语句可能会没有机会运行下去。