一、单片机的中断系统

  中断资源的引入为单片机系统提供了更有效的事件处理和控制功能。MCS-51 系列单片机内部有 5 个中断,并且每个中断有完整的中断控制。

1、中断的基本概念

  在计算机系统运行过程中,当 CPU 正在处理某个事件时,外部或者内部发牛的其个事件请求,要求 CPU 迅速去处理,于是 CPU 会暂时中断当前的工作,转到运行请求的事件中。处理完请求的事件后,再返回到原来被中止的地方继续原来的工作,这个过程称为中断。

  如果单片机没有中断控制系统,那么无论是否有内部事件或外部事件发生,CPU 都必须去查询,这样CPU的大量时间就会浪费在查询是否有内部事件或者外部事件的操作上。采用中断技术完全消除了CPU在查询方式中的等待现象,大大提高了单片机的工作效率和实时性。由于中断方式的优点极为明显,因此单片机的硬件结构中都带有中断系统。

2、中断组成原理

  单片机中断系统的结构如下图,5 个中断分别有 5 个中断源,并提供 2 个中断优先级控制,能够实现两级中断服务程序的嵌套。单片机的中断系统 4 个相关的特殊功能寄存器 TCON、SCON、IE 和 IP 来进行管理,因此用户可以用软件对每个中断的开和关以及优先级进行控制。

  定时器控制寄存器 TCON 用于设定外部中断的中断请求信号的有效形式,同时用于保存定时器/计数器 T0 和 T1 的中断请求标示位。串行接口控制寄存器 CSON 用于保存串行接口(SIO)的发送中断标志和接收中断标志。中断控制寄存器 IE 用于设定各个中断源的开放关闭。各个中断源的优先级可以由中断优先级寄存器 IP 中的相应位来确定,同一优先级中的各中断源同时请求中断时,由中断系统的内部查询逻辑来确定响应的顺序。

BO4EX0FQ88TNXTL4E.png

二、仿真

  利用外部中断实现按键的输入是外部中断的简单应用,下图所示的电路中,单片机 P0.0 接口驱动 1 只 LED,按键接至单片机外部中断脉冲输入引脚 P3.2 。当按下按键后,改变 LED 的状态。

S4E9ZT292F1R7ORGJ.png

三、程序

1、中断服务函数

  中断服务函数又叫中断子程序,采用单片机的 5 个中断时需要事先对相应的特殊功能寄存器初始化,中断初始化在以后的章节中具体应用时再作说明。当中断发生并被接受后,单片机就自动换行相对应的中断服务子程序(即中断服务函数),以处理中断请求。中断服务子程序有一定的编写格式,中断服务函数编写格式为:void 中断服务函数名_isr (void) interrupt x 其中 interrupt 为关键字,x 为中断对应的中断号或中断矢量。

  对于 Keil 软件而言,单片机的 5 个中断的中断号关键字已经设定,并在头文件 reg51.h 中定义了这些常量,如下:

1#define IEO_VECTOR 0	//0x03 外部中断 0
2#define TFO_VECTOR 1	//0x0B 定时器/计数器 0
3#define IE1_VECTOR 2	//0x03 外部中断 1
4#define TF1_VECTOR 3	//0x1B 定时器/计数器 1
5#define SIO_VECTOR 4	//0x23 串行接口

  用户只需使用以上所定义的常量即可,下面的例子是设置 Timer0 的溢出中断服务程序。

1void timer0_isr (void) interrupt 1
2{
3	...
4}

应用中断需要注意一下几点:

  1. 中断函数没有返回值,如果定义了一个返回值,将会得到不正确的结果。因此建议在定义中断函数时,将其定义为 void 类型,以明确说明没有返回值。
  2. 中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。
  3. 在任何情况下都不能直接调用中断函数,否则会产生编译错误。
  4. 如果在中断函数中再调用其他函数,则被调用的函数所使用的寄存器区必须与中断函数使用的寄存器区不同。

2、代码实现

  程序运行过程中,子程序是被主函数调用,但中断服务函数是被系统自动调用。通过上面中断组成原理的图,可以发现 EA 是中断的总允许,EX0 是 IT0 的源允许,使用中断前需要先将中断控制开启。

 1#include<reg51.h>
 2sbit LED=P0^0;
 3// 外部中断服务函数
 4void init0_isr(void) interrupt 0
 5{
 6	LED = !LED;
 7}
 8void main(void)
 9{
10	IT0 = 1;	//TCON 中控制 INTO 触发方式位,INT0下降沿触发中断
11	EA = 1;		//总中断允许
12	EX0 = 1;	//中断允许
13	while(1);	//等待 INT0 中断
14}

标题:项目五:利用外部中断实现按键的输入 —— AT89C51
作者:Yi-Xing
地址:http://zyxwmj.top/articles/2020/10/09/1602206349003.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!