对于PIC单片机来说,一次中断活动的全过程大致可以归纳成一下9个阶段:
1、中断请求:中断事件一旦发生或者中断条件一旦构成,中断源就提交“申请报告”(将中断标志位置1),欲请求CPU暂时放下目前的工作而转向为该中断源作为专项服务;
2、中断屏蔽:虽然中断源提交了“申请报告”,但是,是否得到CPU的响应,还要取决于“申请报告”是否能够通过2道或者3道“关卡”(中断屏蔽)送达CPU(相应的中断屏蔽位等于1,为关卡放行;反之相应的中断屏蔽位等于0,为关卡禁止通行);
3、中断响应:如果一路放行,则CPU响应中断后,将被打断的工作断点记录下来(把断点地址保护到堆栈),挂起“不再受理其他申请报告牌”(清除全局中断标志位GIE=0),跳转到中断服务子程序;
4、保护现场:在处理新任务时可能破坏原有的工作现场,所以需要对工作现场和工作环境进行适当保护;
5、调查中断源:检查“申请报告”是由哪个中断源提交的,以便作出有针对性的服务;
6、中断处理:开始对查明的中断源进行有针对性的中断服务;
7、清除标志:在处理完毕相应的任务之后,需要进行撤消登记(清除中断标志),以避免造成重复响应;
8、恢复现场:恢复前面曾经被保护起来的工作现场,以便继续执行被中断的工作;
9、中断返回:将被打断的工作断点找回来(从堆栈中恢复断点地址),并摘下“不再受理其他申请报告牌”(GIE=1),继续执行原先被打断的工作。
在上述的9个阶段中,第1、2、3和9阶段是由硬件自动实现的,而第4、5、6、7、8阶段则是用户软件完成的。
PIC16F877单片机的中断源多达14种,不过中断向量只有一个(0004H),并且各个中断源之间也没有优先级之分,不具备非屏蔽中断(即所有中断都是可以被屏蔽的)。具有中断功能的PIC系列单片机采用的是多源中断的设计方案(即一个中断向量对应着多个中断源),只有唯一的一个中断向量,或者说只有一个中断服务子程序入口地址。
参考文献:
李学海 《PIC单片机实用教程——基础篇》 北京航空航天大学航出版社
________________________________________转自Jarod's Blog