首页 理论教育51单片机中断处理实战教程

51单片机中断处理实战教程

【摘要】:CPU对中断处理过程包括中断初始化、中断响应、保护现场、中断服务程序处理、中断撤销和中断返回。所以在进入中断服务子程序后,一般都要保护现场,再执行中断服务程序,返回主程序前再恢复现场,用户在编制中断处理程序时必须要考虑上述问题。

CPU对中断处理过程包括中断初始化、中断响应、保护现场、中断服务程序处理、中断撤销和中断返回。

1.中断初始化

中断初始化设置,对中断的允许位和中断优先级设置,包括TCON、SCON、IE、IP与中断有关的功能位置进行设置,如3.3.3节所述。

2.中断响应

单片机一旦响应中断,首先设置响应的优先级,通过执行硬件程序调用把断点地址压入堆栈,并与各中断源对应的中断服务程序首地址送到程序计数器PC,同时清除中断请求标志(TI和RI除外),从而控制程序转移到中断服务程序,中断响应过程由中断系统自动完成。

3.保护现场

CPU在执行任务过程中由于中断响应执行中断事件,为了在执行完中断服务程序后,回头执行原先程序时,知道程序原来在何处打断,各有关寄存器的内容如何,必须在转入执行中断服务程序前,将当前状态内容进行备份以便保护好现场。一旦缺乏现场保护和恢复现场,程序运行混乱,单片机无法正常工作。所以在进入中断服务子程序后,一般都要保护现场,再执行中断服务程序,返回主程序前再恢复现场,用户在编制中断处理程序时必须要考虑上述问题。

4.中断服务程序处理

中断服务程序一般以子程序的形式出现,所有的中断都要转去执行中断服务程序,进行中断服务。C51编辑器支持在C语言程序中直接编写51单片机的中断服务程序,C51编译器对函数的定义进行了扩展,无需考虑堆栈出栈保护问题,增加了一个扩展关键字inter-rupt。关键字interrupt是函数定义时的一个选项,加上此选项可以对函数定义为中断服务函数。定义中断服务函数的格式如下:

函数类型 函数名(形式参数)[interrupt n][using n]

关键字interrupt中的n是中断号,n的取值为0~31单片机芯片型号不同n不同。

在C语言中定义中断服务函数:(www.chuimin.cn)

void intersvr0(void)interrupt 0 using 1//定义外部中断0,使用第一组寄存器。

5.中断请求撤销

CPU响应中断请求后,执行中断服务子程序,一旦中断任务执行完毕,必须清除中断请求标志,否则中断响应返回后将再次进入该中断,从而进入死循环。

中断撤销方式有4种方式:

1)对定时/计数器T0、T1中断,CPU响应中断时就用硬件自动清除相应的中断请求标志TF0或TF1。

2)对外部中断INT0、INT1,若采用边沿触发方式,CPU响应中断后,内部硬件自动复位中断标志IE0或IE1。

3)对串行中断,CPU响应中断后并不自动清除相应的中断标志位TI或RI,用户应在串行中断服务程序中用软件清除TI或RI。

4)若CPU对中断引脚的信号缺乏控制能力,可以利用单稳态触发器对中断信号进行整形,使其符合要求。

6.中断返回

中断任务处理完成后,CPU需要返回到中断的地方继续执行。同时需把保存现场内容从堆栈中弹出,恢复寄存器和存储单元的原有内容。正常中断响应时间至少为3~8个机器周期,如果有同级或高级中断服务,将延长中断响应时间。

以上为中断内容的详细描述,关于中断的实际应用在中断章节第8章单片机外部中断控制项目中重点介绍。