day05 51单片机-外部中断、定时器

本文介绍了如何使用51单片机实现外部中断和定时器中断。外部中断部分通过按键控制LED亮灭,详细阐述了中断的概念、中断初始化和软件设计。而在定时器中断部分,通过定时器0实现LED的1秒闪烁,讲解了定时器工作原理和软件配置方法。
摘要由CSDN通过智能技术生成

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次闪烁。

2.2 硬件设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路x飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值