C51在多级中断中强行跳回主函数的方法

请问如何在低级中断被高级中断打断后,执行完高级中断直接跳回主函数而不是原被打断的低级中断?清掉低级中断的中断标志?关掉低级中断?用return?还是其他方法

这个问题很深奥,我从来没有这样子考虑过,我觉得是不是你的算法出了问题。或者你想挑战单片机的极限。
在进入第二级中断的时候,已经保护了两个地方的现场,在退出的时候你想跳过那个低级中断。只能对栈进行操作,这个时候要用。也就是在第二级运行结束后,直接去调用第一级中断所保护的现场(用汇编完成)。这个时候中断不是自动返回,而是你的汇编操作返回,就可以直接进入到主函数中。
很复杂的。 :(
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-30
普通程序的做法是不可能的,中断是受硬件控制的。除非你非常懂,直接将栈里面的前一个中断的内容pop完,不然会出大问题的。我感觉是你在设计上没有将程序逻辑弄好,以至于出现这样的需求,否则就是你是搞系统的,那也不必问这个问题了。
第2个回答  2013-07-30
将SP寄存器值退回去,再return就可以了。
但你在调试时就要注意,一次中断堆栈增加了多少,然后根据你的观察结果,确定SP减多少。本回答被提问者和网友采纳
第3个回答  2017-01-12
首先为这个你要调用的c文件写一个头文件,比如这个文件叫fun.c,那你可以写一个叫fun.h的头文件。这个头文件的内容是fun.c文件里的函数声明。接着把fun.c加入你的项目里。下一步在主函数的上面用#include "fun.h"把头文件包含进来。

C51在多级中断中强行跳回主函数的方法
在进入第二级中断的时候,已经保护了两个地方的现场,在退出的时候你想跳过那个低级中断。只能对栈进行操作,这个时候要用。也就是在第二级运行结束后,直接去调用第一级中断所保护的现场(用汇编完成)。这个时候中断不是自动返回,而是你的汇编操作返回,就可以直接进入到主函数中。很复杂的。 :(...

单片机中,比如51单片机有五个中断源,两个外部中断源,两个定时器中断源...
INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。T0:定时器/计数器0中断,由T0计满回零引起。T1:定时器/计数器l中断,由T1计满回零引起。TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。整个中断系统的...

相似回答