当前位置:   article > 正文

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

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

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

2 定时器中断——闪烁LED

2.1 需求描述

本案例通过时钟中断实现P00对应的LED 0,1秒1次闪烁。

2.2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/482353
推荐阅读
相关标签
  

闽ICP备14008679号