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.mzph.cn/bicheng/66498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VVenC 编码器源码结构与接口函数介绍

VVenC VVenC&#xff08;Fraunhofer Versatile Video Encoder&#xff09;是由德国弗劳恩霍夫海因里希研究所&#xff08;Fraunhofer Heinrich Hertz Institute, HHI&#xff09;开发的一个开源的高效视频编码器。它实现了最新的视频编码标准——Versatile Video Coding (VVC)…

耗时一天,我用AI开发了AI小程序

小码哥从事前后端开发近十年&#xff0c;但是随着技术的更新迭代&#xff0c;有时候没有时间和精力去优化UI、实现一些前后端功能&#xff0c;以及解决一些bug。特别是我想开发小码哥AI的移动端&#xff0c;但觉得自己没有那么多时间去研究移动端了&#xff0c;准备放弃了&…

C#中的关键字out和ref的区别

目录 一、out 二、ref 三、拓展 一、out 在 C# 中&#xff0c;out 是一个关键字&#xff0c;通常用于方法参数&#xff0c;表示该参数是输出参数。使用 out 关键字的参数要求在方法内部必须被赋值&#xff0c;而这个参数的值会在方法返回时传递给调用者。可以理解为&#xf…

SpringBootWeb案例-1(day10)

准备工作 需求 & 环境搭建 需求说明 环境搭建 步骤&#xff1a; 准备数据库表(dept、emp)创建 springboot 工程&#xff0c;引入对应的起步依赖&#xff08;web、mybatis、mysql 驱动、lombok&#xff09;配置文件 application.properties 中引入 mybatis 的配置信息&…

VUE条件树查询 自定义条件节点

之前实现过的简单的条件树功能如下图&#xff1a; 经过最新客户需求确认&#xff0c;上述条件树还需要再次改造&#xff0c;以满足正常需要&#xff01; 最新暴改后的功能如下红框所示&#xff1a; 页面功能 主页面逻辑代码&#xff1a; <template><div class"…

保险丝驱动电路·保险丝有什么用应该如何选型详解文章!!!

目录 保险丝基础知识 保险丝常见类型 保险丝功能讲解 保险丝驱动电路 ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电…

李宏毅机器学习课程笔记02 | 机器学习任务攻略General Guide

第一步&#xff1a;分析loss on training data 先检查在训练数据上模型是否很好的学习 情况1&#xff1a;如果在训练集上&#xff0c;loss很大&#xff0c;说明在训练资料上没有训练好 可能性1&#xff1a;设置的模型太简单了&#xff0c;模型存在model bias模型偏差&#x…

Gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置

gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置 1. 说明2. 实操&#xff08;以docker执行器为例&#xff09;2.1 修改默认的builds_dir2.1.1 调整gitlab-runner的配置文件2.1.2 CI文件 2.2 启用custom_build_dir2.2.1 调整gitlab-runner的配置文件2.2.2 CI文件…

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…

QT RC_FILE 应用程序图标设置

1.先做一个app.ico 文件&#xff0c;并将文件放入资源文件夹中 2.打开QT项目的.pro文件在最下面增加 RC_FILE $$PWD/res/app.rc 3.在资源文件夹中创建一个app.rc文件。在QT开发工具中编辑并输入下在内容 IDI_ICON1 ICON "app.ico" 4.测试效果

SQLark:高效数据库连接管理的新篇章

在我们日常工作中&#xff0c;不同的项目使用的数据库不同&#xff0c;比如我这边涉及的数据库就有达梦、Oracle、Mysql&#xff0c;每种数据库都有自己的数据库连接工具&#xff0c;我们不得不在电脑上针对每个数据库都装一个客户端&#xff0c;使用时还得在不同数据库连接工具…

Minio-Linux-安装

文章目录 1.Linux安装1.下载源码包2.上传到/usr/local/minio1.进入目录2.上传 3.开放执行权限4.创建minio文件存储目录及日志目录5.编写启动的shell脚本1.脚本编写2.赋予执行权限 6.启动&#xff01;1.执行run脚本2.查看日志3.开放9001和9000端口1.服务器2.安全组3.访问&#x…

基于Springboot + vue实现的小型养老院管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

大模型思维链推理的进展、前沿和未来分析

大模型思维链推理的综述&#xff1a;进展、前沿和未来 "Chain of Thought Reasoning: A State-of-the-Art Analysis, Exploring New Horizons and Predicting Future Directions." 思维链推理的综述&#xff1a;进展、前沿和未来 摘要&#xff1a;思维链推理&#…

下载ffmpeg执行文件

打开网址&#xff1a;Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了&#xff0c;需要通过命令行进行使用&#xff1a; ffmpeg命令行使用参考&#xff1a; ffmpeg 常用命令-CSDN博客

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》&#xff0c;主要目的是…

【跨域问题】

跨域问题 官方概念&#xff1a; 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域本质来说&#xff0c;是前端请求给到后端时候&#xff0c;请求头里面&#xff0c;有一个 Origin &#xff0c;会带上 协议域名端口号等&#xff1b;后端接受到请求&…

STLG_01_19_程序设计C语言 - 总结

为了让刚上大一的大千金在IT征途中打下坚实的基础&#xff0c;闲暇之余重新梳理一遍C语言的知识结构&#xff0c;整理了一下学习C语言的纲要笔记。 IT学习首先要了解其过往、现状、未来发展趋势&#xff1b;其次要建立前、后端、应用的技术知识体系&#xff1b;还要学会具体应用…

2024网络安全运营方案概述(附实践资料合集)

以下是网络安全运营方案的详细内容&#xff1a; 一、目标与原则 目标&#xff1a;建立一套安全高效、灵活性强的网络安全运营体系&#xff0c;实现对网络安全的全面监控、防护和应急响应。原则&#xff1a; 全员参与&#xff1a;网络安全是全员共同的责任&#xff0c;所有员工…

“转移”的理解

“转移”的理解 一般情况下指令是顺序执行的&#xff0c;而在实际工程中&#xff0c;需要改变程序的执行流程。 操作符offset 用操作符offset取得标号的偏移地址