1 外部中断——按键控制LED亮灭
1.1 需求描述
本案例通过检测SW3触发的外部中断实现P00对应LED的亮灭。
1.2 硬件设计
1.2.1 中断简介
单片机中断是一种重要的计算机编程概念,用于处理在程序执行过程中突然发生的事件或条件。这些事件可以是外部硬件触发的,如按下按钮、传感器数据到达或定时器溢出等,也可以是软件内部条件满足时触发的,如某个特定的计算结果或状态变化,如图所示:
中断的作用在于允许单片机暂时中止当前执行的程序,跳转到事先定义好的中断服务程序,以处理特定事件,然后再返回到原来的程序流程。这种机制使单片机能够实时响应外部事件,提高了系统的灵活性和响应能力。
查看手册可知,我们用的STC89C52共有8个中断,所有中断均可设置4个优先级,高优先级的中断可以打断低优先级的中断;当两个中断平级时,将按照查询顺序来决定哪一个先被响应。
(1)单片机中断系统结构如下
(2)所有8个中断按照查询顺序列表如下
(3)中断触发条件
(4)上表中涉及的寄存器
1.2.2 中断初始化
1.2.3 软件设计
#include <STC89C5xRC.H> //包含STC89C52的头文件
#define LED0 P00
void Init_INT0()
{
// 打开中断总开关
EA = 1;
// 打开外部中断0开关
EX0 = 1;
// 配置外部中断为下降沿触发
IT0 = 1;
}
void main()
{
Init_INT0();
while (1);
}
/**
* @brief 中断函数中打开LED0,代表当触发中断时,LED0会打开。
* 根据我们之前的设置,当按下SW3时,P32为低电平,此时LED0打开。
*
* interrupt 0表示0号中断触发时执行该函数的逻辑
* 如果用C语言编程,中断查询次序就是中断号
*/
void INT0_Func() interrupt 0
{
// 中断中打开LED0
LED0 = ~LED0;
}
2 定时器中断——闪烁LED
2.1 需求描述
本案例通过时钟中断实现P00对应的LED 0,1秒1次闪烁。