当前位置: 首页 > news >正文

51单片机——中断(重点)

        学习51单片机的重点及难点主要有中断定时器串口等内容,这部分内容一定要认真掌握,这部分没有学好就不能说学会了51单片机

1、中断系统

1.1 概念

        中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。

        eg::你打开火, 烧上一壶水。然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的报警 声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完 开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断

对于单片机来讲,中断是指CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作(中断响应),转去处理事件B(中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。

 1.2 中断结构

        STC89C5X 系列单片机提供了8个中断请求源,它们分别是:外部中断0(INTO)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)、定时器0中断、定时器1中断、定时器2中断、串口(UART)中断。

        注意:51 系列单片 机一定有基本的 5 个中断,但不全有 8 个中断,需要查看芯片手册,通常我 们使用的都是基本的5个中断:INT0、INT1、定时器0/1,串口中断

        ①INT0对应的是P3.2口的附加功能,可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。

        ②INT1对应的是P3.3口的附加功能,可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。

        ③T0对应的是P3.4口的附加功能,TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。

        ④T1对应的是P3.5口的附加功能,TF1(TCON.7),片内定时/计数器T1 溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中 断。

        ⑤RXDTXD对应的是P3.0P3.1口的附加功能,RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

1.3 中断相关寄存器

1.3.1 中断允许控制 IE

        CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的

EX0(IE.0):外部中断0允许位

ET0(IE.1):定时/计数器T0中断允许位

EX1(IE.2):外部中断0允许位

ET1(IE.3):定时/计数器T1中断允许位

ES(IE.4):串行口中断允许位

EA (IE.7):CPU中断允许(总允许)位

1.3.2  中断请求标志 TCON

IT0(TCON.0):外部中断0触发方式控制位。当IT0=0 时,为电平触发方式; 当IT0=1 时,为边沿触发方式(下降沿有效)

IE0(TCON.1):外部中断0中断请求标志位

IT1(TCON.2):外部中断1触发方式控制位

IE1(TCON.3):外部中断1中断请求标志位

TF0(TCON.5):定时/计数器T0溢出中断请求标志位

TF1(TCON.7):定时/计数器T1溢出中断请求标志位。

1.3.3  中断优先级

 

高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级及同优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断

1.3.4  中断号

 1.3.5 中断响应条件

(1)中断源有中断请求

(2)此中断源的中断允许位为1

(3)CPU开中断(即EA=1)

eg:外部中断0初始化函数

 void exti0_init(){
    EA=1;  //打开总中断开关
    EX0=1;  //打开INT0的中断允许
    IT0=1;  //跳变沿触发方式(下降沿)
}

1.3.6  中断服务函数

 void exti0() interrupt 0 using 1{
    //编写用户所需的功能代码
}

interrupt是一个关键字,表示51单片机中断

0”是中断号,外部中断0的中断号为0

using 1可省略不写

2、外部中断实验

要实现的功能是:使用独立按键K4控制LED1亮灭

#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
void delay_10us(u16 us){
    while(us--);
}
sbit KEY4=P3^3;
sbit LED1=P2^0;
//外部中断1初始化函数
void exti1_init(){
    EA=1;  //打开总中断开关
    EX1=1;  //打开INT1的中断允许
    IT1=1;  //跳变沿触发方式(下降沿)
}
void main(){
    exti1_init();
    while(1){
        
    }
}

void exti1() interrupt 2{
    delay_10us(1000);
    if(KEY4==0){
        LED1=!LED1;
    }
}

要实现的功能是:使用独立按键K3控制LED流水灯

#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
void delay_10us(u16 us){
    while(us--);
}
sbit KEY3=P3^2;

#define LED P2
//外部中断0初始化函数
void exti0_init(){
    EA=1;  //打开总中断开关
    EX0=1;  //打开INT0的中断允许
    IT0=1;  //跳变沿触发方式(下降沿)
}
void main(){
    exti0_init();
    while(1){
        
    }
}
void exti0() interrupt 0{
    u16 i=0;
    delay_10us(1000);  //消抖
    if(KEY3==0){
        LED=0xfe;
        delay_10us(50000);
        for(i=0;i<7;i++){
            LED=_crol_(LED,1);
            delay_10us(50000);
        }
        for(i=0;i<7;i++){
            LED=_cror_(LED,1);
            delay_10us(50000);
        }
    }
}

        有人就会问,在主函数中怎么没有看到按键对LED的控制呢?因为我们在exti0_init()函数内就已经把按键管脚配置为外部中断0下降沿触发,当有按键按下,即会进入对应中断服务函数执行相应的功能程序,LED的控制就在中断函数内完成的。 

http://www.lryc.cn/news/517284.html

相关文章:

  • 企业级Java 实体对象类定义规范
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/07】小测-【第7章 GVRP链路捆绑】理论和实操
  • 蓝桥杯算法|练习记录
  • C语言 扫雷程序设计
  • CSS语言的文件操作
  • 前端-计算机网络篇
  • 行为分析:LSTM、3D CNN、SlowFast Networks。这三者的优缺点
  • 【HarmonyOS NEXT】鸿蒙应用使用后台任务之长时任务,解决屏幕录制音乐播放等操作不被挂起
  • STM32-WWDG/IWDG看门狗
  • 基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪
  • Matlab仿真径向受压圆盘光弹图像
  • 网络安全抓包
  • WebSocket 测试调试:工具与实践
  • ArmSoM RK3588/RK3576核心板,开发板网络设置
  • 【学Rust开发CAD】1 环境搭建
  • 数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)
  • Java 多线程之@Async
  • 代码随想录day38 动态规划6
  • LabVIEW无标题的模态VI窗口的白框怎么去除?
  • iOS - 原子操作
  • Go语言的语法
  • 【MySQL 保姆级教学】用户管理和数据库权限(16)
  • 什么是 ES6 “模板语法” ?
  • [项目实战2]贪吃蛇游戏
  • 关于FPGA中添加FIR IP核(采用了GOWIN EDA)
  • 1. 使用springboot做一个音乐播放器软件项目【前期规划】
  • 【Dify】Dify自定义模型设置 | 对接DMXAPI使用打折 Openai GPT 或 Claude3.5系列模型方法详解
  • 【Rust自学】10.8. 生命周期 Pt.4:方法定义中的生命周期标注与静态生命周期
  • 121 买入股票的最佳时机
  • PID学习资料