单片机定时中断的问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 18:09:24
当进去定时钟断的过程的时候,为了记住之前程序的位置和状态,应该会把当前指令指针的值还有其他寄存器的值压栈。
那么,这个操作,好像在程序里没有见到过。
请问:
进入定时中断后,栈中保存的数据是什么样的?
那假如我想得到那个指令指针的内容呢,那么在中断的过程中栈里存放的就只是进入中断前程序指令指针的值吗?

在执行中断子程序或者调用别的子程序时,系统会自动把当前的断点地址压入堆栈进行保护,执行完子程序即遇到RET或者RETI时,把断点地址弹出装入PC中,从而返回原程序的断点处继续往下执行。当你的主程序和子程序都用到某些标志位时,需要把他们也进行堆栈保护。比如你的主程序有加减乘除法,中断子程序中也有,那么你就必须对ACC,PSW等标志寄存器进行保护,因为你在执行中断程序的加减法时可能已经有进位或者借位,已经改变了某些标志位,而回到主程序中时若主程序的加减法没有进位时,标志位在子程序中已被改变,现在就可能出错了。所以在进入中断子程序时要首先把这些标志位(即ACC和PSW)保存起来即PUSH ACC和PUSH PSW,子程序结束时释放:POP PSW和POP ACC,以便回到主程序时能正确的继续运行。如果用不到这些,也可以不操作,但是建议你最好进行保护,这样不容易出错的。

正常情况下,进入中断51会自动将PC压栈,其他寄存器要指令去进栈的
如:PUSH PSW 等
中断返回时,原来的PC也是自动出栈的。

在响应中断程序时,51会自动将地址压入栈内,但其他数据不会放进去,需要你对重要数据手工压栈。

同意楼上的!自动压入当前程序地址!