返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

 单片机教程 栏目导航   第一页..单片机入门教程    第二页..单片机c语言   第三页..红外遥控和步进电机    第四页..单片机问答

我使用的单片机是AT89C51,试过用弹出指令强行返回中断的方法,确实能够返回主程序,具体做法是:首先将堆栈中的地址弹出,然后压入主程序中新的地址,最后执行RETI指令就可以返回到该地址了。如果弹出指令执行完后直接用跳转指令而不通过RETI指令也能返回到主程序,但下次中断来时将不能再次响应。请问是从被嵌套的高优先级中断程序中怎样返回主程序,是不是还必须得通过最低级中断才能返回。要是直接返回的话,是否下次中断还能够正常响应?
答:对于51系列的单片机而言,当中端响应发生时,会将相应的优先级有效触发器职位;当退出中断时,执行RETI,单片机又自动将优先级有效触发器清0。因此,如果直接使用跳转指令从中断子程序出来的话,单片机没有清0优先级有效触发器,下一次中断发生时就不能响应了。

如果要从高优先级中断程序返回主程序的话,必须执行两条RETI指令,才可以清除高/低优先级有效触发器。具体的程序可以是:

MOV DPTR, #LABLE1
POP ACC ;将高优先级子程序返回地址出栈
POP ACC
PUSH DPL ;将LABLE1地址入栈
PUSH DPH
RETI
LABLE1:
POP ACC ;将低优先级子程序返回地址出栈
POP ACC
MOV DPTR, #LABEL2
PUSH DPL ;将LABLE2,即需要返回的主程序地址入栈
PUSH DPH
RETI

 

阅读本文的用户还阅读了下面的问题:

1.C语言和汇编语言在各有哪些优缺点?

2.C或汇编语言可以用于单片机,C++能吗?

3.搞单片机开发,一定要会C吗?

4.当开发项目时,用C还是用汇编开发好?

5.请问那里可以找到关于这方面的书或资料?

6.初学者到底是应该先学C还是汇编?

7.学了电子线路、C语言,感觉很迷茫怎么办?

8.请问作为学生,如何学好单片机?

9.如何才能才为单片机的高手啊?

10.女性是否适合单片机软件编程这个行业?

如果对本文有疑问,请到论坛提问 编辑:51单片机学习网 @ 2009-10-20校对 中国开发板最佳品牌  版权:部分由编辑摘引,权利属原著作人