访问电脑版页面

导航:老古开发网手机版Pic单片机PIC单片机经验总结

在处理PIC单片机的中断服务程序时需要注意哪些问题

导读:
关键字:
中断服务,51单片机,PIC单片机,

单片机中的中断系统对电子工程师来说是解决突发事件和多任务实时处理的最好方法,熟练掌握中断技术的应用是一个合格电子工程师必备的能力。

PIC与51系列单片机一个显著的区别就是:PIC只有一个中断入口地址(为04H),而51有多个中断源。这样对PIC来说,无论发生何种中断程序将自动转移执行04H处的程序语句,为了区分到底是哪种中断发生就必须在中断服务程序中通过判断中断标志位来确定并转移到相应的中断服务程序中。在发生中断时,断点地址被首先压入硬件堆栈,而现场的一些参数须用户通过软件保存,必须保存的寄存器包括W寄存器、程序寄存器的高位字节PCLATH及状态标志寄存器STATUS等,另外一些在中断服务程序和主程序中均使用到的寄存器也必须保存,否则可能会导致不可预知的错误。如果需要保存的现场参数过多就会到来两个弊端:一是造成RAM资源的浪费,特别是对RAM资源紧张的应用系统;二是增加了中断服务程序的运行时间而导致中断系统的实时性变差,甚至影响正常功能的实现,比如用单片机中的CCP模块实现对高速脉冲宽度的测量,则就要求中断服务程序的运行时间越短越好,否则会丢掉捕捉的机会而造成错误。因此建议在中断服务程序中尽量不要使用主程序中用到的寄存器,将中断中的寄存器设为专用,这样就省去了这些寄存器的保护和恢复程序并减少出错的几率。

在处理PIC单片机的中断服务程序时需要注意哪些问题

另外一个注意的是,在中断服务程序中尽量避免使用有多级嵌套的子程序,本人在实际应用过程中曾遇到过此类问题,在很长一段时间内找不出问题的根源。PIC中档单片机的硬件堆栈为8级,假如在主程序中调用了一个具有6级嵌套的子程序,当主程序执行到最内层的子程序时,则8級堆栈中已用去了6级,如果刚好此时发生了中断,则断点被压入堆栈,此时堆栈中保存了七个地址,又假如在中断服务程序中存在一个二级嵌套的子程序,则堆栈将发生溢出,这必将导致程序不能正确返回到原来的地址,从而导致程序跑偏。由于该情况的发生需要满足一定的条件,即主程序运行到最内层的子程序时发生中断,因而具有很大的不确定性,在产品开发开发调试阶段可能根本就没有发现有什么问题,等到产品经用户长期使用时才开始暴露出来,但此时已经给产品在用户心目中的形象造成了极坏的影响,损失已经无法挽回。因此作为开发人员应该特别注意。

还有一个问题也是值得注意的,就是在中断服务程序中避免打开全局中断允许位,因为PIC单片机不支持中断嵌套,否则在执行一个中断服务程序还未结束就进入另一个中断服务程序后,上一个中断的现场参数将遭到破坏,从而导致程序产生不可预知的错误。
来源;21ic

来源:工程师周亮   作者:21ic  2019/10/28 16:45:00
栏目: [ PIC单片机经验总结]

相关阅读

减少空间提高效率:PIC单片机A/D转换数据打包

PIC单片机软件异步串行口实现技巧

如何解决PIC单片机硬件死锁的问题

为什么PIC单片机的另一个为外部中断进不去

PIC单片机低功耗系统的设计

在对PIC单片机进行程序设计时应注意的四个问题

影响PIC单片机功耗主要有以下几个因素

PIC单片机电平变换中断的那些坑

PIC单片机抗静电处理解决方案

PIC单片机红外遥控编码与解码的问题分享

PIC单片机选用存储体0或1的方法

PIC单片机开发的一些经验和技巧解析

PIC单片机低功耗系统的设计方法介绍

在处理PIC单片机的中断服务程序时需要注意哪些问题

PIC单片机的程序设计经验分享

PIC单片机在线调试中的一些问题

PIC单片机A/D转换数据存储效率的提升

PIC单片机软件开发技巧

PIC单片机存储体0或1的选用说明(程序)

PIC单片机开发的经验、技巧总结分享