51单片机 外部中断

一、中断的概念:

为了降低CPU的占有率,同时实现单片机对复杂情景的处理,引入了中断。

CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,为该外设服务(或者处理紧急事件),处理完毕后回到原断点继续执行原程序。该过程叫做中断。

二、什么是中断源

引起中断的原因和发出中断请求的来源
中断源可以是外设,紧急事件,定时器或者人为设置用于单步断点调试程序。

1.中断系统要解决的问题:

1.CPU在执行程序中,如何检测到随机发生的中断请求
2.是否允许中断
3.如何正确的进入中断
4.怎么排列优先级
5.中断完成后,怎么返回原断点处

2. 51单片机的中断源:

中断源名称引脚入口地址
INT0外部中断0P3.20003h
INT1外部中断1P3.30013h
T00号定时器中断P3.4000bh
T11号定时器中断P3.5001bh
TI/RI串行口中断P3.1 TXD0023h

基础型51单片机有5个中断源,增强型52系列增加了一个定时计数器2,共有6个中断源。

在这里插入图片描述
根据上图可知51单片机中断部分流程:
1.检测对应中断源标志位
2.检测对应中断开关是否打开
3.检测总中断是否打开
4.查询是否有优先级更高或同优先级中断正在执行
5.有更高优先级或同级,等待执行完毕进行中断,无高优先级和同级,直接进行中断

中断控制相关寄存器

中断控制寄存器 IE—中断的允许和接收

EAET2ESET1EX1ET0EX0
中断控制位T2串行口T1INT1T0INT0

中断控制主要由两方面:
A: 是否允许中断
B: 中断的优先级设置

三、如何使用外部中断:

1.开启总中断: EA
2.开启外部中断: EX0/1
3.设置中断触发方式: IT0/1(低电平或高电平触发)
4.编写中断服务程序:
void 函数名 (void) interrupt m using n

{

}

m范围为0~4,分别代表5个中断源,外部中断INT0就是0,T0就是1,INT1就是2,T1就是3,串行中断就是4

n的范围为0~3,分别表示4组工作寄存器,不写就用0. 不写也可以

#include "reg52.h"
#include <intrins.h>

sbit LED = P1^0;

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 22;
	j = 3;
	k = 227;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void init()
{
	EA = 1;			// 开启总中断
	EX0 = 1;		// 开启外部中断
	IT0 = 1;		// 低电平触发
}  

void main()
{
	init();

	while(1){

		}

}


void INTERR(void) interrupt 0      // 外部中断服务函数
{
	 	LED = 0;
		Delay500ms();
		LED = 1;
		Delay500ms();
}			
  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值