您现在的位置: 主页 > MCU > 51单片机 > 51系列单片机的RETI指令分析
本文所属标签:
为本文创立个标签吧:

51系列单片机的RETI指令分析

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-07-02 

最近在基于51单片机编程的过程中出现了个很奇怪的问题 “程序执行中在寄存器EA=1,ET0=1,TR0=1条件下,单TF0=1时并没有执行中断”。在有过单片机中断编程经历者都知道当EA=1,ET0=1的条件下,满足TF0=1时,如果在此期间没有更高优先级的中断执行的情况下定时器中断0必定会产生中断响应。而在我所编写的程序中仅使用了定时器中断0,一个中断也就谈不上存在优先级问题。

经过我对自己程序的检查并对各教材中断程序对比发现我的程序中的一个问题:由于中断的不可控性决定其跳出中断返回主程序的不确定,而由于程序需要中断跳出后能跳到指定的地址。为了解决这个问题我在中断结束的地方直接用了无条件跳转指令“LJMP ADR16”其中ADR16是我想在中断结束后程序所运行的地址,而没有经过指令“RE”。

问题找到了这就意味着我的程序和其他程序不同的地方就是没有执行“RE”而直接跳出。

为了解决问题所在我查阅了很多单片机方面的资料,教材。几乎所有的教材对指令“RETI”的作用千篇一律都是:“中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。”如果“RETI”的作用仅仅在于“把堆栈中保存着的地址取出送回PC”;那么我用指令“POP DPH”和“POP DPL”两条指令取代其做用不就可以达到同样的推出地址的效果么?这样可以解决由于只有进堆栈指令(硬件自动生成)没有出堆栈所导致的堆栈溢出错误,但是并不能解决文章开始所提到的“进不了中断”问题。这让我更加相信书上所介绍的关于指令“RETI”作用并不完全。

经过查阅各种资料文献,我发现了个以往在介绍单片机硬件,以及寄存器上教材,老师,没有提及的“‘优先级生效’触发器“的概念。资料指出“根据8051的结构特点,其中断系统中含有两个不可寻址的“优先级生效”触发器。一个用于指出CPU是否正在执行高优先级的中断服务程序,这个触发器为1时,系统将屏蔽所有的中断请求;另一个则指出CPU是否正在执行低优先级中断服务程序,该触发器为1时,将阻止除高优先级以外的一切中断请求。由此可见,若要响应同级甚至是低级中断请求,必须使得该“优先级生效”触发器清零。但该触发器又是不可寻址的,所以无法用软件直接清零。”问题是不是在这里呢?而“优先级生效”触发器清零过程是怎样执行的呢?是在硬件自动执行的那么是在什么时候执行的呢?带着问题我去解决问题。假设我可以将程序满足跳出中断后跳到自己原来指定地址“ADR16”又满足执行指令“RETI”。经过反复思考我用“DEC SP”;“DEC SP”;“MOV DPTR,#ADR16”;“PUSH DPL”;“PUSH DPL”“PUSH DPH”四条指令代替,问题得到了解决。

总结:

中断指令“RETI”做为中断跳出指令除了将堆栈中保存着的地址取出,送回PC;使程序从主程序的中断处继续往下执行。的作用外还有将“优先级生效”触发器清零。自己做的程序也是出现了这个错误,由于对“优先级生效”触发器清零,导致第二次进不了中断(相当于同优先级申请)。

后记:

在解决这个问题时候我所用的知识是课本上的,而又不完全是课本上的。在这个过程中我用已学的知识解决了自己的问题,并进一步推出中断过程的一些新的知识,我认为新知识的学习有很大程度的要靠自己在已学过知识的基础上通过运用,总结,推导等过程获得新知识。着也是当代大学生运用知识,获取新知识的一种能力。

you might also like

  • 美超微推出全新X11系列服务器和存储解决方案
  • [原创] Lattice iCE40UltraPlus FPGA系列移动开发平台(MDP)方案
  • ROHM 600V PrestoMOSFET R60xxMNx系列助力家电节能环保
  • 艾迈斯半导体推出符合ISO26262汽车安全标准的双晶圆集成电路,扩展磁性位置传感器产品系列
  • 美高森美推出新系列宽带塑封和裸片GaAs MMIC器件从DC至27 GHz提供高性能表现 扩展MMIC产品组合
  • 单片机代码写入的三种常用语句
  • 艾迈斯半导体推出符合ISO26262汽车安全标准的双晶圆集成电路,扩展磁性位置传感器产品系列
  • 东芝面向物联网解决方案的ApP Lite处理器系列产品
  • 业界最快trr性能的600V超级结MOSFET PrestoMOS新增更低Ron、更低Qg的“R60xxMNx系列”
  • “任意互联”系列研讨会:基于Zynq MPSoC 的KVM 扩展器,交换机和KVM-over-IP

  • (责任编辑:ioter)


                  查看评论 回复



    嵌入式交流网主页 > MCU > 51单片机 > 51系列单片机的RETI指令分析
     程序 中断 指令

    "51系列单片机的RETI指令分析"的相关文章

    网站地图

    围观()