C语言51单片机中断嵌套问题
正在学习51单片机,我用的C。最近遇到一个问题,我用两个中断进行嵌套,正确设置了IP寄存器。我想请问如何让我优先级高的中断执行完毕后直接返回主程序,而不再返回低优先级的中...
正在学习51单片机,我用的C。最近遇到一个问题,我用两个中断进行嵌套,正确设置了IP寄存器。我想请问如何让我优先级高的中断执行完毕后直接返回主程序,而不再返回低优先级的中断。具体用什么指令,最后有实例,谢谢!
展开
4个回答
展开全部
对于这个,要这么看:
假设中断A是优先级高的中断,中断B是优先级低的中断
如果在正常执行的过程中,发生中断A,那么,中断A执行完成后,会返回正常程序;
如果在正常执行过程中,发生中断B,又在中断B处理过程中发生中断A,那么,中断A执行完成后,一定要返回的是中断B,这是由硬件决定的,不是软件决定的,所以,软件没有任何指令可以让中断A执行完成后直接跳过还没有执行完的中断B而直接回到主程序,因为这是硬件决定的,软件做不到,即便你在高级中断A中关闭了中断B,但是因为你原来的中断B还没有执行完,所以,仍然要把没执行完的部分执行下去,才能返回到正常程序.
对于ARM系列的可以,对于51来说,是不行的,因为51软件指令不允许修改PC寄存器的值
假设中断A是优先级高的中断,中断B是优先级低的中断
如果在正常执行的过程中,发生中断A,那么,中断A执行完成后,会返回正常程序;
如果在正常执行过程中,发生中断B,又在中断B处理过程中发生中断A,那么,中断A执行完成后,一定要返回的是中断B,这是由硬件决定的,不是软件决定的,所以,软件没有任何指令可以让中断A执行完成后直接跳过还没有执行完的中断B而直接回到主程序,因为这是硬件决定的,软件做不到,即便你在高级中断A中关闭了中断B,但是因为你原来的中断B还没有执行完,所以,仍然要把没执行完的部分执行下去,才能返回到正常程序.
对于ARM系列的可以,对于51来说,是不行的,因为51软件指令不允许修改PC寄存器的值
更多追问追答
追问
还有一个问题,我发现有个中断每次结束后过几秒又会重新执行一次然后程序结束,我把别的中断删掉后还是这样。我调了很久还是不知道问题出在哪里,后来我尝试把该中断的触发方式改为低电平触发就正常了。请问这是什么原因?
追答
那你这个是外中断了,但是这也不可思议.
如果你的是下降沿触发,那么,过几秒又执行,说明过几秒后,有下降沿
如果是这种情况,即使你修改成低电平触发,一样会有上述问题,甚至比下降沿结果还糟糕,最好,你能把程序贴出来,不然没办法判断
展开全部
只能将低优先级的中断屏蔽,需要进入时再打开。
单片机中不建议使用中断嵌套,特别是中断执行时间较长的时候。
因为单片机的堆栈较小,每次进中断都要讲一些寄存器压到堆栈,嵌套几次后可能会导致堆栈溢出。
有一些单片机还规定了程序调用和中断的层数,比如低端的PIC单片机,程序调用+中断不能超过7层。
单片机中不建议使用中断嵌套,特别是中断执行时间较长的时候。
因为单片机的堆栈较小,每次进中断都要讲一些寄存器压到堆栈,嵌套几次后可能会导致堆栈溢出。
有一些单片机还规定了程序调用和中断的层数,比如低端的PIC单片机,程序调用+中断不能超过7层。
更多追问追答
追问
还有一个问题,我发现有个中断每次结束后过几秒又会重新执行一次然后程序结束,我把别的中断删掉后还是这样。我调了很久还是不知道问题出在哪里,后来我尝试把该中断的触发方式改为低电平触发就正常了。请问这是什么原因?
追答
查查程序,好像是跑飞了。
看看中断服务程序过程中有没有改了堆栈中的数据,导致退出中断后程序跑飞了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于普通51而言,不会存在中断嵌套的情况,只有如STC系列的51,可以设置4个级别的中断优先级才有嵌套情况的发生。虽然外部中断0、定时器0,外部中断啊1.....表明了其优先级的高低,只是同时申请中断时高级的先响应而已,不会打断低优先级的中断。
更多追问追答
追问
还有一个问题,我发现有个中断每次结束后过几秒又会重新执行一次然后程序结束,我把别的中断删掉后还是这样。我调了很久还是不知道问题出在哪里,后来我尝试把该中断的触发方式改为低电平触发就正常了。请问这是什么原因?
追答
要么该中断口真有一个下降沿,触发了中断,要么就是干扰信号造成的,估计你的电源不好,纹波较大。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
必须返回低级中断,你可以设定一个标志位,在退出高级中断时设定为1,在低级中断中需要的位置加入判断,以达到直接退出低级中断的目的。
追问
我设置了一个标致,确实有效果。但是我发现有个中断每次结束后过几秒又会重新执行一次,我把别的中断删掉后还是这样。我调了很久还是不知道问题出在哪里,后来我尝试把该中断的触发方式改为低电平触发就正常了。请问这是什么原因?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询