5.4 中断初始化及中断服务程序结构

5.4 中断初始化及中断服务程序结构

中断初始化实质上就是对4个与中断有关的特殊功能寄存器TCON、SCON、IE和IP进行管理和设置,具体实施如下:

①CPU的开、关中断(即全局中断允许控制位的打开与关闭,EA=1或EA=0);

②具体中断源中断请求的允许和禁止(屏蔽);

③各中断源优先级别的控制;

④外部中断请求触发方式的设定。

中断初始化程序一般都包含在主函数中,也可单独写成一个中断初始化函数,根据需要通常只需几条赋值语句即可。中断服务程序是一种具有特定功能的独立程序段,往往写成一个独立函数,函数内容可根据中断源的要求进行编写。

C51语言的中断服务程序(函数)的格式如下:

中断服务程序函数不会返回任何值,故其函数类型为void,void后紧跟中断服务程序的函数名,函数名可以任意起,只要合乎C51语言中对标识符的规定即可。中断服务函数不带任何参数,所以中断服务函数名后面的括号内为空。interrupt即“中断”的意思,是为区别于普通自定义函数而设,是中断服务函数的关键字,不能省略。中断序号是编译器识别不同中断源的唯一符号,它对应着汇编语言程序中的中断服务程序入口地址,因此在写中断函数时一定要把中断序号写准确,否则中断程序将得不到运行。

函数头最后的“using工作寄存器组编号”是指这个中断函数使用单片机RAM中4组工作寄存器中的哪一组,如果不加设定,C51语言编译器在对程序编译时会自动分配工作寄存器组,因此“using工作寄存器组编号”通常可以省略不写。

51子系列单片机的5个中断源的中断序号、默认优先级别及对应的中断服务程序的入口地址如表5-3所示。

表5-3 51子系列单片机的5个中断源的中断序号、默认优先级及对应的中断服务程序入口地址

【例5-1】 编写中断初始化程序,设置外部中断0和串行口中断为高级中断,其他中断源为低级中断,外部中断采用下降沿触发方式,禁止外部中断1中断,允许其他中断源中断,开总中断。

汇编语言的中断初始化程序如下:

C51语言的中断初始化程序如下:

【例5-2】 设外部中断0采用边沿触发方式,写出外部中断0的C51语言初始化程序段及中断服务函数。

主函数外部中断0初始化程序段:

【例5-3】 89S51单片机系统接口电路图如图5-4所示,编写程序实现下列要求:

按下K0时,L0熄灭;按下K1时,L1熄灭。

图5-4 电路图

汇编语言参考程序如下: