51单片机中断处理程序中关中断的问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 21:38:41
为什么中断处理程序开始的时候要关中断来保护现场呢?
个人觉得应该不用啊,直接保护现场就好了! 要是被高一级的中断嵌套,有下一次的中断程序实现对本次中断程序中的现场保护! 也就是说现场保护会有下一次的中断程序负责,所以关不关中断,应该是到达同样的效果的啊!!~
初学,不是太懂,望指教!!!!~!~
tianhj2001,你好!
我知道他们不可能是同一个中断子程序啊,他们只要把现场保护到同一个栈就行了啊!~ 你也说高一级的中断也要保护现场,那么它保护的是不是低一级的中断的现场,那么从高一级的中断返回时各寄存器的值是不是都恢复到没被高一级中断程序中断之前的值了,那么来说应该没什么问题啊!~!~ 不知道错过哪些细节了!~!~或者还有一些其他的原因!!

中断保护现场,是为了你中断子程序执行完以后能够返回到你程序中中断点,即产生中断的地方,使程序能够继续向下执行!!!!
如过你说的不用保护现场的话,那么程序执行完以后就不能够回到现场,那么你的程序将不知道要跳转到那里去了,也就是飞鸟,呵呵……
你说的中断嵌套,也是一样的,两者都要保护现场,不然你也不能够回到现场,程序也会飞的!!!!
而我们保护现场的数据都是放在堆栈中的,因此,你的中断次数也不能够超过堆栈的级数,那样数据也会丢失!!!!
说白了,中断它不同于子程序,子程序是固定好了的,返回的位置也固定了;而中断我们不能够预知它在那里发生中断,因此要保护现场,使中断子程序执行完后返回到中断的地方!!!
呵呵……说的太多了!!!

我知道你说的意思了,但是你要知道,中断现场保护是在中断子程序中进行的,因此当你高一级的中断发生的时候(他们不可能共用一个中断子程序,如果是同一中断,那也不可能,因为51中断中你进入中断子程序后要将禁止该中断再次中断,好象似的,嘿嘿……你可以试试),在高一级的中断子程序中也有现场保护,你的问题就是没有把现场保护放对地方!!!!!
============================================================
它们是把现场保护在同一堆栈中,我跟你打个比方吧,假如说堆栈的地址是80H,低一级的中断要保护的是1,2,3;高一级要保护的现场是4,5,6,那么在低一级的中断发生的时候,现场保护1,2,3将压如堆栈,(顺序书上应该有,这里是个比喻),那我先压入1,堆栈地址加1,压入2,堆栈地址再加1,如果这个时候高一级的中断发生,那么现在就应该跳到高一级中断的子程序,堆栈地址就是82H了,在将4,5,6分别压入堆栈,这样堆栈的地址就是85H,当高一级的中断子程序结束后,返回现场,堆栈的数据要从85H开始弹出,这样现场返回的就是6,5,4,这个时候程序就会跳到中断之前的地方,即底一级的中断那里,将要继续将3保护到堆栈中,在执行低一级的中断子程序.(其中,你要在中断保护现场完了后将中断标志清0啊,不然它始终会中断的,不可能去执行程序去了...)
这样讲解你应该知道它们的过程了吧,呵呵!!!!!!

<