C51 中断

中断的概念

通过标志位的设定,降低CPU的占用率,另一方面也实现了单片机对复杂情景的处理。
什么是中断呢?
我在放家里打游戏,有人敲门,出去开门,然后回房间继续打游戏。
打游戏->CPU;敲门->发生了中断;按门铃的人->中断源
出去开门->中断过程;继续打游戏->返回工作
 
CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,转而为该外设服务(或者是处理紧急事件),处理完毕后再回到原断点继续执行原程序。这个过程称为中断。

一般情况下指 片上外设,如定时器,串行口等。

什么是中断源

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

中断系统要解决什么问题?

①CPU在不断的执行程序的过程中,如何检测到随机发生的中断请求
②是否允许中断
③如何正确的进入中断
④怎么排列优先级
⑤中断完成后,怎么返回原断点处

中断源

基础51单片机有5个中断源,增强型52系列增加了一个定时计数器2,共有6个中断源。其中包含两个外部中断源,其余为内部中断源。

中断源符号名称中断引起原因中断服务程序入口地址(汇编用)
INT0外部中断0P3^2引脚低电平或者下降沿信号0003H
INT1外部中断1P3^3引脚低电平或者下降沿信号0013H
T0定时器0中断定时器/计数器0计数回0溢出000BH
T1定时器1中断定时器/计数器1计数回0溢出001BH
T2定时器2中断定时器/计数器2计数回0溢出002BH
TI/RI串行口中断串行通信完成一帧数据发送或接受引起中断0023H

在这里插入图片描述
从图中可以看出,我们的51单片机中断部分流程如下:

①检测对应中断源标志位
②检测对应中断开关是否打开
③检测总中断是否打开
④查询是否有优先级更高或同优先级中断正在执行
⑤有高优先级或同级,等待其执行完毕进行中断;无高优先级和同级,直接进行中断

中断控制相关寄存器

在这里插入图片描述
在这里插入图片描述
中断控制主要由两方面:
A: 是否允许中断
B:中断的优先级设置
EA :中断总控开关 , 1-CPU开中断,0-关闭

如何使用外部中断

在这里插入图片描述
1.开启总中断   : EA
2.开启外部中断  : EX0/1
3.设置中断触发方式: IT0
4.编写中断服务程序:
返回值 函数名([参数])[模式][ 再入]interrupt n [using m]
interrupt n
n=0  外部中断
n=1  定时/计数器0溢出
n=2  外部中断1
n=3  定时计数器1溢出中断

代码

注意:震动传感器引脚连接的是P3.2(INT0)
main.c

#include <REGX52.h>
#include <INTRINS.H>

/*¼ÌµçÆ÷µÆ*/
sbit LED = P2^1;

/**
 *¹¦ÄÜ£ºÑÓʱ500ms
 *²ÎÊý£ºvoid
 *·µ»ØÖµ£ºvoid
 */
void Delay500ms(void)		//@11.0592MHz
{
	unsigned char i, j, k;

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

/**
 *¹¦ÄÜ£º³õʼ»¯ÖжÏ
 *²ÎÊý£ºvoid
 *·µ»ØÖµ£ºvoid
 */
void interruptInit(void)
{
		EA  = 1;//¿ªÆô×ÜÖжÏ
		EX0 = 1;//¿ªÆôEX0µÄÍⲿÖжÏ
		IT0 = 1;//µÍµçƽ´¥·¢·½Ê½

}

int main()
{
		interruptInit();

		return 0;
}

/**
 *¹¦ÄÜ£ºÖжϷþÎñ³ÌÐò
 *²ÎÊý£ºvoid
 *·µ»ØÖµ£ºvoid
 */
void int0(void) interrupt 0
{
		LED = 0;
		Delay500ms();
		LED = 1;
		Delay500ms();

}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只小阿大:)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值