PIC16F87X单片机中断系统应用须关注的问题
源。中断返回指令“RETFIE” 执行后,也由硬件自动对总屏蔽位进行设置GIE=1,重新开放所有的中断源。不论各种中断屏蔽位和全局中断屏蔽位GIE处于何种状态(是开放还是禁止),当某一中断源的中断条件满足时,都会发出中断请求,相应的中断标志位都会被置位(=1)。但是,是否能够得到CPU的响应,则要根据该中断源所涉及到的中断屏蔽位的状态而定。CPU响应中断后,由硬件自动对全局中断屏蔽位进行清零(GIE=0),屏蔽所有的中断源,以免发生重复中断响应,然后,由硬件自动把当前的程序计数器PC值(即程序断点地址)压入堆栈(实际为硬件堆栈),并且把PC寄存器置以中断向量地址(0004H),从而转向并开始执行中断服务程序。进入中断服务程序后,程序中必须安排指令,检查发出请求的中断源(如果同时开放多个中断源的话)。这可以通过检查各个中断源的标志位来实现。一旦确定出发出申请的中断源,就用软件把该中断源的标志位人为地清零,否则,执行中断返回指令“RETFIE”。重开中断后,由于中断标志位仍为“1”而引起 CPU重复响应同一个中断请求。中断服务程序的末尾必须放置1条中断返回指令“RETFIE”。执行该条指令后,不仅可以重开中断,而且还可以由硬件自动将保留在堆栈顶部的断点地址弹出,并放回到程序计数器PC中,使CPU返回和继续执行被中断的主程序。
1 中断的延时响应和延时处理
1次中断过程,从中断源发出请求到得到CPU的响应必然存在一定的延迟时间。各个相关信号的时序图如图2所示。

在图2中,第1行是系统时钟脉冲信号,每4个时钟周期对应1个指令周期。第2行就是指令周期信号。该信号只有在RC 振荡模式下,从OSC2脚上可以向片外送出。第3行是单片机外部引脚INT送入的中断脉冲信号。外部中断信号INT是用边沿触发的。假设预先设定的是 INT中断信号上升沿有效的话,则该信号的上升沿将会在1个时钟周期后引发中断标志位INTF被置位。第4行代表INTF信号。每个指令周期内的第2个时钟脉冲上升沿时,该信号被抽检1次。一旦检测到INTF信号被设置为“1”,则CPU会在接下来的1个指令周期内,将全局中断屏蔽位GIE清零。第5行是全局中断屏蔽位GIE。在GIE信号被清零的下一个指令周期内,程序计数器PC被置入中断向量0004H,见图2中第6行。同时在该指令周期内完成到中断服务程序的跳转,并且实现提取该子程序的首条指令,即指令(0004H),见图2中第7行。在其后的1个指令周期内,正式开始执行中断服务程序的第1条指令,见图2中第8行。自INT引脚输入有效信号,到中断服务程序的第1条指令得到执行,大约需要3~4个指令周期的延时。更精确的延迟时间取决于中断事件的发生时机。
以上描述的只是1次中断从申请到得到CPU的响应的延迟时间。下面分析从CPU响应1次中断到该中断得到有效处理的延迟时间。由于具有中断功能的PIC系列单片机(低档产品PIC16C5X和PIC12C5X系列不具备中断功能),采用的是“多源中断”的设计方案(即1个中断向量对应着多个中断源),只有惟一的1个中断向量,或者说只有1个中断服务程序入口地址。这就意味着,此类单片机的中断服务程序只能编写1个。这类单片机的硬件结构得到了简化,那么,相应的软件设计上就得多开销一些。在1个中断服务程序中,若想对多个中断源作出处理,就必须在进入中断服务程序后,首先执行调查具体中断源的一条或多条指令,其后才能对查到的中断源作出有针对性的服务。如此以来,就形成了1次中断从CPU响应到进入针对性处理的延迟时间。该时间有长有短,它会随着被开放的中断源的个数的增加而增加。最好情况是只有1个中断源被开放,这时不需要检测中断源就可以立即进入针对性处理;最坏情况是所有中断源全部开放,此时用在检测中断源上的时间会最长。
另外,PIC单片机中采用的是硬件堆栈结构。其好处是既不占用程序存储器空间,也不占用数据存储器空间,同时也不需用户去操作堆栈指针;但此时也带来1个不可回避的弱点,即不具备像其他单片机指令系统中的压栈(PUSH)和出栈(POP)指令那样,实现中断现场的保护会麻烦一些,并且占用的处理时间也相应多一点。
2 中断的现场保护问题
中断现场的保护是中断技术中一个很重要的环节。在进入中断服务程序期间,只有返回地址,即程序计数器PC的值被自动压入堆栈。若需要保留其他寄存器的内容,就得由程序员另想办法。由于PIC单片机的指令系统中没有像其他单片机那样的PUSH(入栈)和POP(出栈)之类的指令,所以要用1段用户程序来实现类
关注 问题 应用 系统 单片机 中断 PIC16F87X 相关文章:
- 牛人DIY:关注空气质量 Arduino检测器(教程)(01-30)
- 嵌入式系统的VxWorks安全性问题研究(11-06)
- DSP编程过程中的几个关键问题的研究(06-05)
- 教你构造一个51单片机的实时操作系统(08-22)
- DSP开发中值得注意的问题(02-16)
- 基于DSP编程的几个关键问题(03-26)
