单片机中的中止体系对电子工程师来说是处理突发事件和多任务实时处理的最好办法,熟练掌握中止技能的运用是一个合格电子工程师必备的才能。
PIC与51系列单片机一个明显的差异便是:PIC只要一个中止进口地址(为04H),而51有多个中止源。这样对PIC来说,不管发生何种中止程序将主动搬运履行04H处的程序句子,为了区别到底是哪种中止发生就有必要在中止服务程序中经过判别中止标志位来确认并搬运到相应的中止服务程序中。在发生中止时,断点地址被首要压入硬件仓库,而现场的一些参数须用户经过软件保存,有必要保存的寄存器包含W寄存器、程序寄存器的高位字节PCLATH及状况标志寄存器STATUS等,别的一些在中止服务程序和主程序中均运用到的寄存器也有必要保存,不然或许会导致不行预知的过错。假如需求保存的现场参数过多就会到来两个坏处:一是形成RAM资源的糟蹋,特别是对RAM资源严重的运用体系;二是增加了中止服务程序的运转时刻而导致中止体系的实时性变差,乃至影响正常功用的完成,比如用单片机中的CCP模块完成对高速脉冲宽度的丈量,则就要求中止服务程序的运转时刻越短越好,不然会丢掉捕捉的时机而形成过错。因而主张在中止服务程序中尽量不要运用主程序中用到的寄存器,将中止中的寄存器设为专用,这样就省去了这些寄存器的维护和康复程序并削减犯错的几率。
别的一个留意的是,在中止服务程序中尽量防止运用有多级嵌套的子程序,本人在实践运用进程中曾遇到过此类问题,在很长一段时刻内找不出问题的本源。PIC中档单片机的硬件仓库为8级,假如在主程序中调用了一个具有6级嵌套的子程序,当主程序履行到最内层的子程序时,则8級仓库中已用去了6级,假如刚好此刻发生了中止,则断点被压入仓库,此刻仓库中保存了七个地址,又假如在中止服务程序中存在一个二级嵌套的子程序,则仓库将发生溢出,这必将导致程序不能正确返回到本来的地址,然后导致程序跑偏。由于该状况的发生需求满意必定的条件,即主程序运转到最内层的子程序时发生中止,因而具有很大的不确认性,在产品开发开发调试阶段或许根本就没有发现有什么问题,比及产品经用户长期运用时才开端露出出来,但此刻现已给产品在用户心目中的形象形成了极坏的影响,丢失现已无法挽回。因而作为开发人员应该特别留意。
还有一个问题也是值得留意的,便是在中止服务程序中防止翻开大局中止答应位,由于PIC单片机不支持中止嵌套,不然在履行一个中止服务程序还未完毕就进入另一个中止服务程序后,上一个中止的现场参数将遭到损坏,然后导致程序发生不行预知的过错。
来历;21ic