51单片机学习笔记5 -- 外部中断

Posted GenCoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机学习笔记5 -- 外部中断相关的知识,希望对你有一定的参考价值。

1.外部中断概念

外部中断是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。

2.引脚功能复用

51单片机芯片内部有很多外设,这些外设的引脚都是与IO口复用的。也就是说,一个IO口如果可以复用为内置外设的功能引脚,那么当这个IO口作为内部外设使用的时候,就叫做复用(一般来说,当某个引脚作为复用功能使用时,它将不能作为其他复用功能和普通IO来使用,即单个引脚只能作为普通IO或单个复用功能来使用)。
51单片机也有引脚具备复用功能,如下图P3端口的引脚可复用成串口收发或外部中断

3.中断号和中断类型

51单片机中有3类中断,分别是定时器中断、外部中断、串口中断,定时器中断有定时器0中断和定时器1中断,外部中断有外部中断0中断和外部中断1中断,这里每一个中断都对应1个中断号

中断源默认中断级别中断号
INT0(外部中断0)0(最高)interrupt 0
T0(定时器中断0)1interrupt 1
INT1(外部中断1)2interrupt 2
T1(定时器1中断)3interrupt 3
TX/RX(串口中断)4interrupt 4

在程序中用到对应中断时都需要编写中断服务函数,并标明该中断
对应的中断号

4.外部中断编程

由上面原理图可以看到51开发板上KEY1连接的P3.3引脚可以复用为INT1(外部中断1),因此可以使用KEY1来做外部中断1触发
外部中断1代码及注释如下,通过配置寄存器来配置引脚为复用功能即外部中断,编写中断服务函数 – 通过外部中断改变P1端口LED亮灯状态

#include<reg52.h>

sbit KEY1 = P3^3;

void delay_ms(unsigned int nms)

	unsigned int i,j;

	for(i=nms;i>0;i--)
		for(j=113;j>0;j--);


void EXIT_Init()

	IT1 = 0;		//设置外部中断1触发方式 0:低电平触发  1:下降沿触发
	EX1 = 1;		//使能外部中断1
	EA = 1;			//开启全局中断


void main()

	P1 = 0xff;		//关闭LED灯

	EXIT_Init();	//外部中断1初始化
	while(1);


//中断服务函数(外部中断1)
//函数名可自定义
//但必须在函数名后标明中断号
//interrupt 2为外部中断1中断号
void exint1() interrupt 2

	delay_ms(10);
	if(KEY1 == 0) P1 = ~P1;
	while(KEY1 == 0);

51开发板外部中断引脚设置在KEY1上, 所以在中断服务函数中做了跟按键检测一样的按下延时和松手延时的语句,以及在按下延时后的引脚电平判断(外部中断1在初始化中配置成低电平触发),如果外部中断IO在实际开发板上不连接按键,可不做延时操作

如果程序中配置了定时器0中断,那么定时器0中断函数名后面需要加上interrupt 1,当产生中断时,单片机会执行对应中断号的函数(中断服务函数)

以上是关于51单片机学习笔记5 -- 外部中断的主要内容,如果未能解决你的问题,请参考以下文章

51单片机学习笔记之中断(外部中断定时器中断中断嵌套)

51单片机2个外部中断实现5中模式4中速度跑马灯效果

关于51单片机的外部中断使用方法

51单片机外部中断0函数执行时,又来了个外部中断0信号

51单片机学习笔记6 -- 定时器中断

51单片机学习笔记6 -- 定时器中断