电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章单片机学习PIC16F87X单片机中断系统应用须关注的问题

PIC16F87X单片机中断系统应用须关注的问题

11-20 00:14:47 | http://www.5idzw.com | 单片机学习 | 人气:291
标签:单片机开发,单片机原理,单片机教程,http://www.5idzw.com PIC16F87X单片机中断系统应用须关注的问题,http://www.5idzw.com

  (1) 在主程序和中断服务程序中不都存在跨页跳转。例如:用户程序没有使用第0页2KB空间之外的程序存储器,或者用户程序虽然超出了2KB的范围,但是,在主程序和中断服务程序中没有同时用到GOTO或CALL指令,都能满足该条。

  (2) 在主程序和中断服务程序中没有同时使用以PCL为目标的操作指令(比如查表)。

  保护现场的操作次序与恢复现场的操作次序应该相反。程序中的第8~11条就是按照相反的顺序恢复寄存器PCLATH和 STATUS内容的。但是,不要忘记保护现场时采用“SWAPF STATUS,W”指令产生的多余的交换操作,在此只好再采用同样的方法将其交换回来(对应程序中第10条指令)。最后2条指令,将W_TEMP内容的高、低半字节交换了2遍,才被恢复到工作寄存器W中。如果只用1条传送指令“MOVF W_TEMP,W”又会产生1个新的问题:“MOVF W_TEMP,W”指令会影响“Z”标志位,会破坏此前已经被恢复的寄存器STATUS的内容,这是我们所不希望的,也是不能容忍的。因此,在程序中利用了2条不影响标志位的SWAP指令(即第12,13两条指令)。虽然麻烦一点,但可以使这个问题得到圆满的解决。

  最后必须进一步强调的是,并不是所有情况下编写的中断服务程序中都需要现场保护,或者都需要像以上范例程序那样进行现场保护。有些情况下仅仅保护W、STATUS和PCLATH这3个寄存器还不够。不过在此程序片段的基础上,再增加或者减少需要保护的寄存器的个数都是轻而易举的事。不要忘记,在保护任何文件寄存器之前都必须先把工作寄存器W保护起来才行得通。

  3 需要注意的几个问题

  (1) 中断标志位的状态与该中断源是否产生中断无关。换句话说,不管是否允许其中断,只要满足中断的条件,中断标志位就会被置位。另外,也可以利用软件将中断标志位置“1”或清“0”。

  (2) 当开放某一中断源时,该中断源就是通过中断标志位向CPU申请中断的。无论什么原因,只要将中断标志位置位,就会产生中断。如果用软件强行将中断标志位置位,也会产生中断。

  (3) 如果在中断被屏蔽(或禁止)的情况下,中断标志位被置位,只要不被清除就会一直潜伏下来,那么,一旦解除屏蔽,就会立即产生中断。

  (4) 如果在中断被禁止的情况下,中断标志位已经被置位,但是,假如在允许其中断之前将它清除,那么,即使解除禁止,它也不会产生中断。

  (5) 当CPU相应的任何一个中断时,全局中断屏蔽位GIE将会自动清0;当中断返回时它又会自动恢复为1。如果在中断处理期间用软件将已经复位的GIE重新置位,这时再出现中断请求,就可以形成中断嵌套。也就是说,如果在响应某一中断期间又响应了其他中断请求,就形成了中断嵌套。发生中断嵌套时,前一中断处理过程被暂停而进入后一中断处理,当后一中断过程被处理完毕之后,才会继续处理前一中断。照此方式,还可以形成多级嵌套,甚至自身嵌套。不过嵌套的级数绝对不能超过硬件堆栈的深度。

  (6) 对于中断响应和处理时间有严格要求的应用,保护现场的指令安排也应考虑延时问题。

  (7) 如果同时发生多个中断请求,得到优先处理的中断完全取决于在中断服务程序中检查中断源的顺序。原因是各个中断源之间不存在优先级别之分。

  如果清除中断标志位的指令安排在中断服务程序的尾部,就有可能丢失响应在处理中断期间该中断源第2次中断请求的机会。


上一页  [1] [2] [3] 

,PIC16F87X单片机中断系统应用须关注的问题
关于《PIC16F87X单片机中断系统应用须关注的问题》的更多文章