赞
踩
本案例通过检测SW3触发的外部中断实现P00对应LED的亮灭。
单片机中断是一种重要的计算机编程概念,用于处理在程序执行过程中突然发生的事件或条件。这些事件可以是外部硬件触发的,如按下按钮、传感器数据到达或定时器溢出等,也可以是软件内部条件满足时触发的,如某个特定的计算结果或状态变化,如图所示:
中断的作用在于允许单片机暂时中止当前执行的程序,跳转到事先定义好的中断服务程序,以处理特定事件,然后再返回到原来的程序流程。这种机制使单片机能够实时响应外部事件,提高了系统的灵活性和响应能力。
查看手册可知,我们用的STC89C52共有8个中断,所有中断均可设置4个优先级,高优先级的中断可以打断低优先级的中断;当两个中断平级时,将按照查询顺序来决定哪一个先被响应。
(1)单片机中断系统结构如下
(2)所有8个中断按照查询顺序列表如下
(3)中断触发条件
(4)上表中涉及的寄存器
#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; }
本案例通过时钟中断实现P00对应的LED 0,1秒1次闪烁。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。