《单片机中断多优先级的软件扩展方法.docx》由会员分享,可在线阅读,更多相关《单片机中断多优先级的软件扩展方法.docx(9页珍藏版)》请在金锄头文库上搜索。
1、单片机中断多优先级的软件扩展方法摘要:为了解决MCS-51系列单片机只能由IP寄存器设定两级优先级的问题,文中给出了利用软件对中断优先级进行扩展的方法,同时给出了高于两个优先级的多优先级软件扩展程序。关键词:单片机;中断;优先级;寄存器引言所谓中断是指当正在处理某件事情的时候,外部发生的某一事件请求迅速去处理,于是暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件以后,再回到原来被中止的地方继续原来的工作,这样的一个过程称之为中断。以为例,中断系统含有个中断源,分别是外部中断请求,外部中断请求,定时计数器溢出中断请求,定时计数器溢出中断请求以及串行口中断请求。既然系统含有个中断源,
2、就有可能出现数个中断源同时提出中断请求的情况,这样,设计人员必须事先根据它们的轻重缓急来为每个中断源确定对其的响应顺序。然而,对于中断优先级寄存器来说,只可能设定两级优先,即控制位为时对应的中断源为高级中断,反之,控制位为时对应的为低级中断。这样就出现一个问题:如果一个中断正在执行,如何才能让它响应同级甚至是低级中断请求呢?中断多优先级的扩展根据的结构特点,其中断系统中含有两个不可寻址的“优先级生效”触发器。一个用于指出是否正在执行高优先级的中断服务程序,这个触发器为时,系统将屏蔽所有的中断请求;另一个则指出是否正在执行低优先级中断服务程序,该触发器为时,将阻止除高优先级以外的一切中断请求。由
3、此可见,若要响应同级甚至是低级中断请求,必须使得该“优先级生效”触发器清零。但该触发器又是不可寻址的,所以无法用软件直接清零。遍历系统所提供的条指令,只有可以达到此目的。该指令可在执行该指令时,一方面清除中断响应时所置位的“优先级生效”触发器,另一方面可从当前栈顶弹出断点地址送入程序计数,从而返回主程序。软件扩展方法 高级中断源响应低级中断源的软件设计现以当前,设定为高优先级正在执行外部中断服务子程序为例来进行说明。如欲响应串行口中断,也就是要实现高级中断源响应低级中断源,设计时可加入如下代码而无须改变寄存器的内容 ;内容入栈保护 , ;开放串行口中断 ;继续执行原中断子程序,但可随时响应串行
4、口中断请求 ;恢复原内容: 同级中断源之间的响应上述代码体现了高级中断源响应低级中断源的软件实现方法。但是, 系统共含有个中断源,因此必须解决同优先级中断之间的嵌套问题,具体源程序 ;入口地址 ;入口地址 ;入口地址 ;入口地址 ;串行口入口地址: , ;开放所有中断 , ;设定、为高优先级 : , ;,清高优先级生效触发器,此时可响应其它中断请求: ;子程序的真实入口地址 : , ;,清高优先级生效触发器,此时可响应其它中断请求: ;子程序的真实入口地址 : , ;,清“高优先级生效”触发器,此时可响应其它中断请求: ;子程序的真实入口地址 : , ;,清高优先级生效触发器,此时可响应其它中
5、断请求: ;子程序的真实入口地址 : , ;,清高优先级生效触发器,此时可响应其它中断请求: ;串行口子程序的真实入口地址 上述程序利用寄存器给出了两级优先级,其中、为高优先级,、串行口为低优先级。为使某中断能响应同级甚至低级中断,只要在中断服务子程序中用指令清除相应的不可寻址的“优先级生效”触发器即可。程序一开始的两条指令的作用是对原始数据进行入栈保护,然后将其真实子程序入口地址入栈,并经出栈后弹给指针,以便在执行完后正确执行真实子程序。当该中断服务子程序执行完毕后,将返回主程序断点处以继续执行原来程序。结束语本文所阐述的多优先级扩展方法是纯软件方法,该方法只需在程序中加入为数不多的相应代码,便可进行各种中断嵌套。此方法的代价是要花费更多的中断响应时间,但相对于添加硬件扩展的方法而言,这点代价还是值得的。