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,当产生中断时,单片机会执行对应中断号的函数(中断服务函数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GenCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值