51单片机外部中断详解与实例
创作时间:
作者:
@小白创作中心
51单片机外部中断详解与实例
引用
CSDN
1.
https://m.blog.csdn.net/BUG_MeDe/article/details/145807820
1,引入
CPU收到中断请求,将主函数中的事情停下来,转而执行中断处理函数中的事情。51单片机有5个中断源,包括2个外部中断(INT0/INT1)、2个定时器中断(T0/T1)和一个串口中断。
系统通过中断号来区分这些中断,并且中断有优先级,可以通过软件控制。高优先级的中断可以抢占低优先级的中断,当两个相同优先级的中断同时到来时,CPU会根据系统中的中断查询顺序来处理。
2,51单片机中断
51单片机的5个中断源如下:
- IE寄存器:中断控制寄存器,EA是总中断使能位,EX0、ET0、EX1、ET1、ES等是其他5个中断的使能位。
- IP寄存器:用于设置中断优先级。
对于外部中断INT0和INT1:
- INT0连接到P3.2管脚,INT1连接到P3.3管脚。
- IT0寄存器控制中断触发方式:IT0 = 1时为下降沿触发,IT0 = 0时为低电平触发。
- 当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)会被置1,向CPU申请中断。
3,中断相关的寄存器
要开启某个中断,需要将对应的寄存器设置为1,并开启总中断。例如,要使能外部中断INT0,需要设置EX0 = 1,EA = 1,并设置触发方式(IT0 = 1表示下降沿触发)。
4,外部中断INT0程序
下面是一个使用外部中断控制LED亮灭的程序示例:
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;
#define DC_RUNING_TIME 1000
void delay_10us(u16 time)
{
while(time--);
}
void delay_ms(ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void init_exti0()
{
// 初始化外部中断0
IT0 = 1; // 下降沿触发
EX0 = 1;
EA = 1;
}
void init_exti1()
{
// 初始化外部中断0
IT1 = 1; // 下降沿触发使能
EX1 = 1; // 启用外部中断1
EA = 1; // 开启中断
}
//interrupt 是一个关键字,表示 51 单片机中断。后面的“0”是中断号
void exti0_run() interrupt 0
{
delay_10us(DC_RUNING_TIME);
if(KEY3 == 0)
{
LED1 = !LED1;
}
}
void exti1_run() interrupt 2
{
delay_10us(DC_RUNING_TIME);
if(KEY4 == 0)
{
LED2 = !LED2;
}
}
void main()
{
init_exti0();
init_exti1();
while(1);
}
5,总结
CPU要正常响应中断需要满足以下三个条件:
- 中断源有中断请求
- 此中断源的中断允许位为 1
- CPU打开了总中断(即 EA=1)
本文原文来自CSDN。
热门推荐
三饶摆桌碗与彩青习俗
独立显卡没装驱动能显示吗
快递破损如何处理?法律指南来了
一分钟搞懂:什么是完全平方式?
防止苹果变色的 6 种简单方法
物业公司的性质与职责解析
錫膏使用指南
21世纪,中国又挖起了运河
4个哑铃练全身的动作,助你高效燃脂,降低体脂率!
天麻的功效与作用:从古至今的药用价值
车牌号字母的含义
晚间代谢两公斤是正常现象吗?医生专业解析
论“擦边”:文明不是盯着别人的边,而是守住自己的边
迄今为止,获得诺贝尔奖的11位华人,你知道是谁吗?
平仓是什么意思?一文带你全面了解平仓的定义与操作
青少年为何迷上Cosplay?一封写给家长的理解指南
菩提祖师与三清:道教与佛教的神话较量
夏日必备!6 款自制养生茶,解暑祛湿超有效
思考问题的底层逻辑——分清事实、观点、立场和信仰
麦肯锡报告:未来职场,哪些技能将被AI取代?
希特勒上台后,穷得揭不开锅的德国突然有钱了,是从哪里来的钱?
聚酯布防水施工工艺:基层处理、施工步骤和注意事项
顺义吴广义讲中医之调理脾胃为何很重要
神经损伤怎么锻炼好
列宁到底是死于中弹中风还是中毒
国漫质量大检视:为何《凡人修仙传》能在风波中独善其身?
油皮和混油皮可以用一样的护肤品吗
C语言fprintf函数使用详解:格式化输出到文件的完整指南
win10系统如何更新显卡驱动_更新显卡驱动能提升性能吗?
什么是市场的涨跌趋势?如何分析这种涨跌趋势?