单片机原理及应用:中断系统结构与控制寄存器

大家好啊,这几天因为考试断更了一段时间,现在放假了也可以恢复正常的更新速度了。今天我们来认识一下单片机的中断系统,这里可以说是我们学习单片机以来第一个核心功能,我们会分几期内容来深入了解中断系统的作用原理和应用方式。

中断的定义

中断的结构

TCON

SCON

IE

IP

中断的定义

  1. 当CPU正在执行某个程序时,由单片机内部或外部的原因引起的紧急事件,向CPU发出请求处理的信号
  2. CPU在允许的情况下响应请求信号,暂时停止正在执行的程序,保护好断点处的现场
  3. 转向执行一个用于处理该紧急事件的程序
  4. 处理完后又返回被中止的程序断点处,继续执行原程序
以上过程就称为中断,流程如图所示

它并不是单指在输入请求信号的作用下打断原程序,而是包括保存原程序、执行中断服务、返回原程序等多个步骤,重点是在立即执行中断程序的同时不影响原先进程。

中断的结构

先前提到中断是由单片机内部或外部的原因向CPU发送请求信号而引发的,那么我们就要提出一个中断请求源的概念。中断请求源是指产生中断请求的源头,在51单片机中共有5个中断请求源,包括外部中断引脚(INT0和INT1)以及内部中断源(如定时器中断、串口中断等)。

我们从左到右依次介绍,首先是最左侧的中断源,大家看到有6个名称,可能会感到疑惑——不是五个中断源吗。实际上图中的TX和RX对应的是同一个中断,即串口通信中断,TX负责发送功能,而RX负责接收功能。除了串口中断外,都是一个引脚对应一个中断源,INT0是外部中断0,由P3.2引脚输入;紧接着是定时器/计数器T0,由P3.4引脚输入;在之后是INT1和T1,分别对应外部中断1和定时器/计数器1,引脚号可以参考STC89C52的结构图。ST,C89C52STC89C52STC89C52

细心的朋友会发现,T0,T1,TX和RX是直接接到中断标志上的,为什么INT1和INT0后面还有IT0和1的选择呢。实际上这个选择也是由TCON控制的,只是外部中断信号在输入时,需要先设置相应的触发方式。在51单片机中,整个中断系统主要由与中断相关的4个特殊功能寄存器和硬件查询电路等组成,分别为:

  • 定时/计数器控制寄存器TCON
  • 串行口控制寄存器SCON
  • 中断允许控制寄存器IE
  • 中断优先级控制寄存器IP

TCON

TCON全称是定时/计数器控制寄存器,作用是控制定时器的启动与停止,并保存T0、T1的溢出中断标志和外部中断的中断标志。

地址88H8FH8EH8DH8CH8BH8AH89H88H
名称TCONTF1TR1TF0TR0IE1IT1IE0IT0

高四位控制定时器0和1,低四位控制外部中断0和1.

TF1TF0位分别表示定时器1和定时器0的溢出标志位。当定时器溢出时,对应的溢出标志位会被置位。

TR1TR0位用于控制定时器1和定时器0的开始/停止操作。当TR1或TR0位被置位时,对应的定时器开始计数;当TR1或TR0位被清零时,对应的定时器停止计数。

IE1IE0位分别表示外部中断1和外部中断0的使能位。当IE1或IE0位被置位时,对应的外部中断允许产生中断请求。

IT1IT0位用于设置外部中断1和外部中断0的触发类型。当IT1或IT0位为0时,对应的外部中断触发类型为电平触发;当IT1或IT0位为1时,对应的外部中断触发类型为边沿触发。

下面对两种触发方式做一些补充:

当外部中断引脚被设为电平触发时,对应的TCON寄存器的IT0或IT1位需要被清零。这样,当外部中断引脚检测到高电平(或低电平,具体取决于电平触发的方式)时,中断就会被触发,处理器会跳转到外部中断的中断服务程序执行相应的操作。那么电平触发的方式应该怎么确定呢?在上方的引脚图中,我们可以看到P3.2和P3.3对应的INT引脚被加上了横线,这代表“低电平有效”,也就是说当51单片机的外部中断引脚检测到低电平时才会触发中断。

边沿触发也叫跳沿触发,是指当外部中断引脚的电平发生变化时,中断被触发。边沿触发方式可以选择上升沿触发或下降沿触发。在51单片机中,由于“低电平有效”,所以采用下降沿触发。当外部中断引脚检测到高电平下降为低电平时,中断就会被触发,处理器会跳转到外部中断的中断服务程序执行相应的操作。

两种触发方式各有利弊,需要根据使用场景来选择。电平触发的中断响应速度更快,并且对中断源的响应更灵敏。但是如果中断源的电平被保持时间过长,那么中断服务程序可能会被频繁调用,导致额外的中断处理负担,而跳沿触发方式适合于以负脉冲形式输入的外部中断请求,检测规律性的变化电平。

SCON

SCON全称为串行口控制寄存器,由于笔者所在专业对通信无过多要求,这里只是简要介绍其功
能,仅作为参考。
  • SM0/FE: 串口通信模式位/帧错误位。SM0和SM1位用于设置串口通信的工作模式,而FE位用于指示接收到的数据帧是否有错误。
  • SM1: 串口通信模式位。SM0和SM1位组合起来用于设置串口通信的工作模式。不同的SM0和SM1位组合可以实现不同的通信模式,如8位单机通信模式、9位单机通信模式、多机通信模式等。
  • SM2: 多机通信模式位。SM2位仅在SM0和SM1位为10时有效,用于指示当前处于多机通信模式。在多机通信模式下,可以通过地址识别不同的串口设备。
  • REN: 接收使能位。REN位用于控制串口接收器的启用和禁用。当REN位为1时,接收器处于启用状态,可以接收数据;当REN位为0时,接收器处于禁用状态,不接收数据。
  • TB8/RB8: 发送/接收的第8位。TB8位用于指示发送的数据帧的第8位,而RB8位用于指示接收到的数据帧的第8位。
  • TI: 发送中断标志位。TI位用于指示发送操作是否完成,当发送操作完成后,TI位将置1。可以通过检测TI位来判断是否可以发送下一个数据。
  • RI: 接收中断标志位。RI位用于指示接收操作是否完成,当接收到数据后,RI位将置1。可以通过检测RI位来读取接收到的数据。

通过设置和操作SCON寄存器的不同位,可以实现对串口通信相关功能的控制和操作,实现单片机与外部设备的串口通信。

IE

IE全称为中断允许控制寄存器,用于控制CPU对中断的开放或屏蔽、每个中断源是否允许中断。
地址A8HAFHACHABHAAHA8HA9H
名称IEEA/ESET1EX1ET0EX0

EA: 总中断使能位,用于控制总体中断的使能和禁止。当EA位为1时,允许中断;当EA位为0时,禁止中断。

ET0: 定时器0中断使能位,用于控制定时器0中断的使能和禁止。当ET0位为1时,允许定时器0中断;当ET0位为0时,禁止定时器0中断。ET1: 定时器1中断使能位,同理。

EX0: 外部中断0使能位,用于控制外部中断0的使能和禁止。当EX0位为1时,允许外部中断0;当EX0位为0时,禁止外部中断0。EX1: 外部中断1使能位,同理。

ES: 串口中断使能位,用于控制串口中断的使能和禁止。当ES位为1时,允许串口中断;当ES位为0时,禁止串口中断。

通过设置和操作IE寄存器的不同位,可以控制不同中断的允许和禁止。同时,通过设置EA位可以一次性控制所有中断的允许和禁止。

IP

IP全称为中断优先级控制寄存器,作用是设定各中断源的优先级别,IP的每一位均可以由软件来置1或清0。

 

地址B8HBCHBBHBAHB9HB8H
名称IP///PSPT1PX1PT0PX0

 

PX0: 外部中断0的优先级位。当PX0位为1时,外部中断0的优先级为高优先级;当PX0位为0时,外部中断0的优先级为低优先级。

PT0: 定时器0中断的优先级位。当PT0位为1时,定时器0中断的优先级为高优先级;当PT0位为0时,定时器0中断的优先级为低优先级。

PX1: 外部中断1的优先级位。当PX1位为1时,外部中断1的优先级为高优先级;当PX1位为0时,外部中断1的优先级为低优先级。

PT1: 定时器1中断的优先级位。当PT1位为1时,定时器1中断的优先级为高优先级;当PT1位为0时,定时器1中断的优先级为低优先级。

PS: 串口中断的优先级位。当PS位为1时,串口中断的优先级为高优先级;当PS位为0时,串口中断的优先级为低优先级。

IP寄存器中的位设置可以决定不同中断的优先级,高优先级的中断会优先被处理。当多个中断同时到达时,优先级高的中断会先被响应。需要注意,IP寄存器的设置需要与IE寄存器的设置相配合,才能正确地实现中断的优先级控制。

这里补充一点优先级的设定:单片机共有三个优先级,优先顺序分别是高优先级中断>低优先级中断>普通程序,普通程序可以有多个,中断源在无说明的情况下默认为低优先级,也就是5个,而高优先级需要在IP中设定,且只能有一个。正在执行低优先级的中断服务程序可被高优先级的中断源所中断,但不能被同级或低级别的中断源所中断; 正在执行的高优先级的中断服务程序不能被任何中断源所中断。

另外中断源还存在着自然优先级,如果几个同一优先级别的中断源,同时向CPU请求中断,CPU将通过单片机内部的硬件查询逻辑,首先响应自然优先级较高的中断源的中断请求。自然优先级由电路规定,如图所示:

今天我们一同学习了中断的基础概念和系统组成,之后会为大家介绍中断服务函数的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609503.shtml

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

相关文章

vue+springboot+mybatis-plus实现乡村公共文化服务系统

项目前端:https://gitee.com/anxin-personal-project/rural-public-cultural-services-front 项目后端:https://gitee.com/anxin-personal-project/rural-public-cultural-services-behind 1.系统简介 乡村公共服务文化提供给管理员、商家、村民。管理…

36-javascript输出方式,弹框:普通,confirm弹框,prompt弹框,控制台输出:普通,warm,error

1.页面打印 <body><p>你真是一个小机灵鬼</p><script>// 页面打印document.write("打印内容");</script> </body> 2.覆盖文档 <body><p>你真是一个小机灵鬼</p><script>// 覆盖文档window.onload f…

用Java编写图书网站信息采集程序教程

目录 一、准备工作 二、分析目标网站结构 三、选择信息采集方式 四、安装Jsoup库 五、编写信息采集程序 六、注意事项 总结&#xff1a; 编写图书网站信息采集程序需要掌握HTML、CSS、JavaScript、Java等前端和后端技术。下面是一个简单的教程&#xff0c;介绍如何使用…

1880_安装QEMU_for_ARC

Grey 全部学习内容汇总&#xff1a; https://github.com/GreyZhang/g_ARC 主标题 想学习一点ARC相关的知识&#xff0c;但是手里没有开发板。看了下&#xff0c;使用QEMU似乎是一个很好的选择&#xff0c;正好也有这么一个分支。在此&#xff0c;记录一下环境搭建的过程。 …

一文快速学会Docker软件部署

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;首期文章 &#x1f4da;订阅专栏&#xff1a;Docker 希望文章对你们有所帮助 做项目的时候&#xff0c;感觉很多地方的配置都特别…

扫码能看图片吗?图片怎么弄成二维码?

在外出游玩或者参加展览时&#xff0c;经常会看到很多的物品或者展物都会有一个对应的二维码&#xff0c;通过扫码就可以查看详情&#xff0c;其中很多的内容为了美观性都会单独将内容设计成图片存入二维码中&#xff0c;那么图片制作二维码怎么制作呢&#xff1f; 想要快速的…

数模学习day10-聚类模型

说明&#xff0c;本文部分图片和内容源于数学建模交流公众号 目录 K-means聚类算法 K-means聚类的算法流程&#xff1a; 图解 算法流程图 评价 K-means算法 基本原则 算法过程 Spss软件操作 K-means算法的疑惑 系统&#xff08;层次&#xff09;聚类 算法流程 Sp…

安卓逆向某脚本-autojs逆向

引言 上次讲到,为了静态分析,逆向了所有加密字符串。来看下今天我们看下他的流程。 分析app 启动之后会出现一个更新按钮,如图:我们先看下一般autojs 项目是怎么打包的,打包的时候可以选择加密类型,选择dex 类型,然后就是把js 文件变成dex 。 我们先看下一般autojs 项目是…

【python】TCP测速程序

一、服务端 下面是一个简单的 Python 服务端程序的示例&#xff0c;使用标准库中的 socket 模块来建立一个 TCP 服务器。该服务器接收客户端的连接请求&#xff0c;客户端发送一定大小的数据流以测试 TCP 带宽。 实际场景中带宽测试可能需要更复杂的逻辑来确保测试的准确性。 …

万能字符单词拼写 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个"单词"(字符串),那么我们就认为你掌握了这个单词。 words 的字符仅由 a-z 英文小写宁母组成,…

浅析内存一致性:内存屏障

文章目录 概述内存乱序访问Store Buffer和Invalidate QueueStore BufferStore ForwardingStore Buffer与内存屏障 Invalidate QueueInvalidate Queue与内存屏障 内存屏障分类编译器屏障CPU内存屏障 相关参考 概述 内存屏障&#xff0c;是一类同步屏障指令&#xff0c;是CPU或编…

分布式锁3: zk实现分布式锁2 使用临时节点(需要自旋)

一 使用临时节点实现分布式锁 1.1 代码截图 1.2 代码如下 由于zookeeper获取链接是一个耗时过程&#xff0c;这里可以在项目启动时&#xff0c;初始化链接&#xff0c;并且只初始化一次。借助于spring特性&#xff0c;代码实现如下&#xff1a; package com.atguigu.distri…

Spring MVC MVC介绍和入门案例

1.SpringMVC概述 1.1.MVC介绍 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#xf…

逆向数据宽度与符号

正数与负数的 刚好是半 所以 0 表示正数 1表示负数 有符号与无符号是程序员定的 并不是开头是1就表示负数 0表示正数 得看有无符号 双字 32bit 4字节

【UE Niagara学习笔记】04 - 火焰喷射时的黑烟效果

目录 效果 步骤 一、创建烟雾材质 二、添加新的发射器 三、设置新发射器 3.1 删除Color模块 3.2 减少生成的粒子数量 3.3 设置粒子初始颜色 3.4 设置烟雾的位置偏移 3.5 设置烟雾淡出 在上一篇博客&#xff08;【UE Niagara学习笔记】03 - 火焰喷射效果&#xf…

机器学习(四) -- 模型评估(4)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…

【JAVA】怎么确保一个集合不能被修改

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 示例&#xff1a; 不可修改的List&#xff1a; 不可修改的Set&#xff1a; 不可修改的Map&#xff1a; 结语 我的其他博…

SpringBoot 如何增强PageHelper入参的健壮性

PageHelper.startPage(int pageNum, int pageSize, boolean count) 参数为外部输入&#xff0c;故存在异常输入场景。比如 pageNum 和 pageSize 输入的值 负数 或者 0&#xff0c;所以引入PageUtils来对入参进行判断矫正&#xff0c;从而避免引入异常。 第1步&#xff1a;支持…

conda新建、配置python3.8虚拟环境,torch-cuda1.8,torchtext0.9.0,huggingface安装transformers库

起因是我在用bert的时候&#xff0c;导包报错 Python 环境缺少 importlib.metadata 模块。importlib.metadata 是 Python 3.8 引入的模块&#xff0c;而我的环境中使用的 Python 版本为 3.7。所以我得重新配置一个python3.8的环境 准备工作 在开始菜单找到anaconda prompt(an…

Vscode中的node.js的安装与使用

前往官网下载安装包 Node.js 中文网 选择较为稳定的版本 安装全选下一步就好了&#xff0c;这里可以选择配置环境变量是否自动启动node.js 在控制台输入指令如果出现了版本号就代表成功了