1、在日常生活中,我们经常会碰到这样的情况:我们正在处理某一项事情,忽然电话响了,或者有更重要的事情要去做,这时我们就需要停下正在做的事情,转而去处理更重要的事情,等忙完更重要的事情后,我们会回头接着做之前被打断的事情。这就是现实生活中的“中断”的例子。
2、在单片机系统中,也有同样的情况,中断在单片机引用系统中起着非常重要的作用,中断技术的采用,使单片机系统能够对突发事件进行及时处理,从而大大提高系统对外部事件的处理能力。可以说,正是有了中断技术,单片机才能够普及。所以,只有掌握了中断技术,才能开发出灵活、高效的单片机系统。
3、要让单片机种植当前正在执行的程序去执行其他的程序。需要向单片机发出请求信号,单片机接收到这些中断信号后,才能产生中断。这种信号就称为“中断源”。
51单片机总共有5个中断源:两个外部中断源,两个定时器中断源,一个串行口中断源。在以后的学习中我们将会逐步学到。
3、中断优先级:单片机工作时,如果一个中断源向他发出中断请求信号,他就会响应该中断,并去执行相应的中断程序,但是如果同时有两个或多个中断源同时发出中断信号,单片机会根据中断优先级的高低依次响应各个中断。
单片机响应该中断后,要去执行相关的程序,这些程序被称为中断程序。
使用keil c51编写中断程序有相应的规定,编程者应严格遵守这些规定。
中断函数的格式如下:
函数类型 函数名(形式参数列表)interrupt n [using m]
其中n表示中断编号,取值范围为0-4,m表示使用的工作寄存器组号,一般情况下采用默认值0即可。
4、中断寄存器,中断寄存器是控制中断响应条件和中断响应信号的控制器,编程时应根据需要进行相应设置。
5、本例采用外部中断0实现按键的检测。
在编写程序时,首先应使能全局中断控制位EA,然后使能外部中断0控制位EX0,最后还要设置中断发生条件:电平下降沿触发还是上升沿触发。中断寄存器设置完成后,编写中断函数。
6、在keil c51中新建工程ex42,编写如下程序代码,编译并生成ex42.hex文件
#include <reg51.h> //包含头文件
sbit KEY=P3^2; //端口位定义
//主函数
void main(void)
{
EA = 1; //开总中断
EX0 = 1; //开外部中断0
IT0 = 1; //选择电平负跳变触发方式,
P1 = 0xff; //关闭LED
while(1)
{
}
}
//外部中断T0中断函数
void int0(void) interrupt 0 using 0
{
P1 = 0xfe; // 点亮LED
}
7、在proteus中新建仿真文件ex41.dsn,电路原理图如下所示:
8、将ex41.hex文件载入at89c51中,启动仿真,分别按下4个按键,程序运行结果如下图所示