最近在基于51单片机编程的过程中出现了个很奇怪的问题“程序执行中在寄存器EA=1,ET0=1,TR0=1条件下,单TF0=1时并没有执行中断”。在有过单片机中断编程经历者都知道当EA=1,ET0=1的条件下,满足TF0=1时,如果在此期间没有更高优先级的中断执行的情况下定时器中断0必定会产生中断响应。而在我所编写的程序中仅使用了定时器中断0,一个中断也就谈不上存在优先级问题。经过我对自己程序的检查并对各教材中断程序对比发现我的程序中的一个问题:由于中断的不可控性决定其跳出中断返回主程序的不确定,而由于程序需要中断跳出后能跳到指定的地址。为了解决这个问题我在中断结束的地方直接用了无条件跳转指令“LJMPADR16”其中ADR16是我想在中断结束后程序所运行的地址,而没有经过指令“RETI”。问题找到了这就意味着我的程序和其他程序不同的地方就是没有执行“RETI”而直接跳出。
为了解决问题所在我查阅了很多单片机方面的资料,教材。几乎所有的教材对指令“RETI”的作用千篇一律都是:“中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。”如果“RETI”的作用仅仅在于“把堆栈中保存着的地址取出送回PC”;那么我用指令“POPDPH”和“POPDPL”两条指令取代其做用不就可以达到同样的推出地址的效果么?这样可以解决由于只有进堆栈指令(硬件自动生成)没有出堆栈所导致的堆栈溢出错误,但是并不能解决文章开始所提到的“进不了中断”问题。这让我更加相信书上所介绍的关于指令“RETI”作用并不完全。经过查阅各种资料文献,我发现了个以往在介绍单片机硬件,以及寄存器上教材,老师,没有提及的“‘优先级生效’触发器“的概念。资料指出“根据8051的结构特点,其中断系统中含有两个不可寻址的“优先级生效”触发器。一个用于指出CPU是否正在执行高优先级的中断服务程序,这个触发器为1时,系统将屏蔽所有的中断请求;另一个则指出CPU是否正在执行低优先级中断服务程序,该触发器为1时,将阻止除高优先级以外的一切中断请求。由此可见,若要响应同级甚至是低级中断请求,必须使得该“优先级生效”触发器清零。但该触发器又是不可寻址的,所以无法用软件直接清零。”问题是不是在这里呢?而“优先级生效”触发器清零过程是怎样执行的呢?是在硬件自动执行的那么是在什么时候执行的呢?带着问题我去解决问题。假设我可以将程序满足跳出中断后跳到自己原来指定地址“ADR16”又满足执行指令“RETI”。经过反复思考我用“DEC SP”;“DEC SP”;“MOVDPTR,#ADR16”;“PUSHDPL”;“PUSHDPL”“PUSHDPH”四条指令代替,问题得到了解决。
总结:中断指令“RETI”做为中断跳出指令除了将堆栈中保存着的地址取出,送回PC;使程序从主程序的中断处继续往下执行。的作用外还有将“优先级生效”触发器清零。自己做的程序也是出现了这个错误,由于对“优先级生效”触发器清零,导致第二次进不了中断(相当于同优先级申请)。
后记:在解决这个问题时候我所用的知识是课本上的,而又不完全是课本上的。在这个过程中我用已学的知识解决了自己的问题,并进一步推出中断过程的一些新的知识,我认为新知识的学习有很大程度的要靠自己在已学过知识的基础上通过运用,总结,推导等过程获得新知识。着也是当代大学生运用知识,获取新知识的一种能力
关键字:RETI 51单片机 中断跳出指令
引用地址:
ET 与RETI 基于51单片机中断跳出指令“RETI”浅议
推荐阅读最新更新时间:2024-03-16 15:25
基于51单片机的自动门设计
一.硬件方案 本设计是用STC89C52单片机作为控制器,步进电机、热释电型红外传感器、led指示灯、蜂鸣器相结合的系统。热释电红外传感器给单片机传输检测信号,通过单片机控制电机驱动,从而控制电机转动,实现门的自动开关。 主要由51单片机+5线4相步进机+人体感应模块+发光二极管+按键设计而成;如图: 二.设计功能 (1)具有自动开门和手动开门两种模式的功能。 (2)采用两个红外人体感应传感器,一个是安装在进门口,一个安装在出门口,自动模式下:任意一个感应到人都会自动打开门步进电机正转一圈,开门后当没有感应人系统会自动延时3秒自动关门,如果在关门的时候感应人到,门就会自动打开,防止误伤到人。优点:安全可靠。 (3)手动模式
[单片机]
C51单片机中断函数的定义及应用
C51函数声明对ANSI C作了扩展,具体包括: 1.中断函数声明: 中断声明方法如下: void serial_ISR () interrupt 4 [using 1] { /* ISR */ } 为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。 /* define not used interrupt, so generate “IRET” in their entrance */ void extern0_ISR() interrupt 0{}/* not used */ void timer0_ISR () interrupt 1{}/* not used */ void extern1_IS
[单片机]
AT89C51单片机电机转速测量系统仿真
单片机电机转速测量系统仿真统采用单片机中T1计数器对转速脉冲进行计数。定时器T1 工作于外部事件计数方式,对转速脉冲计数; T0 工作于定时器方式。每到1 s 读1 次计数值,此值即为脉冲信号的频率,根据式( 1) 可计算出电机的转速。转速检测装置的软件系统主要包括: 测速主程序、数据处理子程序和显示子程序。单片机上电后,系统进入准备状态。首先进行初始化,然后读取脉冲数据进行运算,将转速显示在LCD上。需要这款仿真及C语言程序的爱好者可从文章配图左上角网址上了解。 该单片机电机转速测量系统仿真仿真采用测频法“M法”测量电机转速。即在一定测量时间T内,测量脉冲发生器(替代输入脉冲)产生的脉冲数m1来测量转速,计算式如下:n=6
[单片机]
AT89S51单片机实验系统的开发与应用
目前单片机应用已渗透到各个领域,单片机技术的发展也因此日新月异。作为实践性很强的应用型学科,单片机研发及教学离不开实验。传统的单片机实验系统需要频繁拔插烧写单片机芯片来编程,依赖于仿真机调试,实验成本高且效率低,已不适应现代科技开发需求。如何充分合理利用单片机的性能,方便用户高效学习与开发产品成为当前的研究热点。 单片机在电子产品中的应用已经越来越广泛,并且在很多学校也开设了相关的课程。通过对在校学生的调查,以及网络上收集到资料的综合分析,得知:目前无论是社会上还是在校学生,学习单片机的人数呈不断增加之势,对于单片机实验板的需求也不断增加。但是由于目前多数实验板价钱较高,实验项目不适于初学者学习。所以,开发出一套价格低廉,易
[单片机]
泛华恒兴推电子节气门(ETC)耐久测试台
北京泛华恒兴科技有限公司(简称:泛华恒兴)近日推出了电子节气门(ETC)耐久测试台。该产品可用于温度环境下的性能耐久测试,并广泛用于实验室和产线的ETC电子节气门测试。
该系统属于ETC实验室耐久类设备,通过上位机软件可预先设定ETC寿命曲线,根据采集的ETC传感器输出信号,通过PID调节实现对ETC电机的闭环控制,同时对ETC电机电流和传感器输入输出信号进行测量,并进行显示、限值判断和数据存储。系统可最多同时测试16个ETC,且各通道间互不影响;平均一次实验需要1500到2000小时,同时需配合环境温度实验(-40℃~150 ℃),增加了系统整体调试难度。
电子节气门(ETC)耐久测试台在技术上通过FPGA实现了更加
[测试测量]
51单片机的LCD1602液晶密码锁C语言程序
#include reg52.h #include intrins.h #define uchar unsigned char sbit rs=P2^0; sbit rw=P2^1; sbit en=P2^2; sbit psb=P2^3; sbit ret=P2^5; sbit gg=P3^7; uchar importcode ={0,0,0,0,0,0}; uchar i; uchar kk; uchar js; uchar j; uchar ecode;
[单片机]
51单片机电梯控制系统软硬件设计
电梯系统的升降的方案 为了更有效的进行电梯控制,现在使用最左边的数码管表示电梯上升和下降状态,使用另外一个一个数码管表示电梯此时所在的楼层,使用按键来控制电梯上升或者下降的状态。在每层楼之后需要进行判断上升或者下降。如果是在上升过程中,应先判断是否继续上升,然后在判断是否下降。如果是在下降过程中,应先判断是否继续下降,在判断是否上升。在上升改变为下降状态时,或者下降改变为上升状态时。数码管的状态应该相应改变 总体硬件设计 2.3按键系统设计 运用单片机的按键模拟电梯的楼层按键系统,可以在由一楼上升到八楼过程中,按下下降按键则可以改变上升状态变为下降状态。然后在八楼到一楼的下降过程中,按下上升按键则可以改变下降状态为上升状
[单片机]
工业以太网向EtherCAT®及更高标准发展之路
工业以太网向EtherCAT®及更高标准发展之路 在过去二十年里,工业系统的通信方式发生了巨大变化。从这一变化中我们可以看出,许多公司从基于现场总线的系统转向基于以太网的通信系统。基于以太网的工业通信发展势头迅猛,预计会继续加速,分析机构MarketsandMarkets的最新研究发现,工业以太网的总体市场份额预计将 从2020年的92亿美元增长到2026年的137亿美元 ,在研究期间的复合年增长率为7.3%。 工业以太网在相对较短的时间内占据了如此大的市场份额,这并不令人意外。尽管基于现场总线的系统已经过改进,但仍然存在一些不足。此类系统非常适合简单的控制功能,但随着越来越多的制造商致力于实现工业4.0战略,这些不足变
[工业控制]