51单片机的中断相关知识

51单片机的中断相关知识点

一、中断概念和功能

概念

程序执行过程中CPU会遇到一些特殊情况,是正在执行的程序被“中断”,cpu中止原来正在执行的程序,转到处理异常情况或特殊事件的程序去执行,结束后再返回到原被中止的程序处(断点)继续执行

中断技术可以实现的功能

  • 分时操作:使得CPU能与多个外设同时工作
  • 实时处理:当单片机用于实时控制时,请求CPU的服务是随机发生的(如按下按键),有了中断系统,就可以使得CPU立即响应并且进行处理
  • 故障处理:单片机在运行时往往会出现一些故障(如电源断电、存储器奇偶校验位出错、运算溢出等),有了中断系统,CPU可即使转去处理故障程序

二、中断控制系统

系统结构

中断源
中断源中断源名称中断向量中断号
P3.2引脚电平/脉冲 I N T 0 ‾ \overline {INT0} INT00003H0
定时计数器0的溢出标志位状态T0000BH1
P3.3引脚的电平/脉冲 I N T 1 ‾ \overline {INT1} INT10013H2
定时/计数器1的溢出标志位状态T1001BH3
串行口数据缓冲器的工作状态TX/RX0023H4

其中, I N T 0 ‾ \overline {INT0} INT0 I N T 1 ‾ \overline {INT1} INT1都是外部中断(需要引脚电平或脉冲触发),剩下的三个都是内部中断,CPU会定时检测他们的标志位以检测中断。

中断请求标志

在程序运行中,CPU只需要定期查看中断请求标志是否为1,就可以知道有没有中断发生。
下面是中断源对应的标志位以及触发方式说明:

中断源名称中断触发方式中断请求标志以及取值
I N T 0 ‾ \overline {INT0} INT0P3.2出现负跳变或低电平IE0 = 1
T0定时/计数器T0接受的脉冲数达到溢出程度TF0 = 1
I N T 1 ‾ \overline {INT1} INT1P3.3出现负跳变或低电平IE1 = 1
T1定时/计数器T1接受的脉冲数达到溢出程度TF1 = 1
TX/RX一串行数据被发送/接收后TI = 1 (发送)
RI = 1 (接收)

值得一提的是:内部中断源TX/RX在串行数据发送之后的标志位虽然会自动置为1,但是并不会再自动置为0,需要我们在代码中置0

中断的控制

51单片机有四个寄存器与中断有关:

  • 定时控制寄存器TCON
  • 串行口控制寄存器SCON
  • 中断优先级控制寄存器IP
  • 中断允许控制中断系统的组成
TCON定时控制寄存器

定时/计数器控制寄存器(TCON)的逻辑结构

  • IT0(Interrupt0 Touch):当IT0 = 0, I N T 0 ‾ \overline {INT0} INT0 端输入低电平表示输入的是中断请求信号;当IT0 = 1, 则输入下降沿信号表示输入的是中断请求信号。

  • IE0(Interrupt0 Exterior) I N T 0 ‾ \overline {INT0} INT0 端没有中断请求信号输入,IE0不变; I N T 0 ‾ \overline {INT0} INT0 端有中断请求信号输入,IE0变为1。

  • IT1(Interrupt1 Touch): 当IT1 = 0,则 I N T 1 ‾ \overline {INT1} INT1 端输入低电平表示输入的是中断请求信号;当IT1 = 1, 则 I N T 1 ‾ \overline {INT1} INT1 输入下降沿信号表示输入的是中断请求信号。

  • IE1(Interrupt1 Exterior) I N T 1 ‾ \overline {INT1} INT1 端没有中断请求信号输入,IE1不变; I N T 1 ‾ \overline {INT1} INT1 端有中断请求信号输入,IE1变为1。

  • TR0(Timer0 Run):TR0 = 1,T0定时/计数器开始工作;TR0 = 0,T0定时/计数器停止工作。

  • TF0(Timer0 Flag):当T0定时/计数器溢出,TF0变为1,立个Flag请求中断;T0定时/计数器没有溢出,TF0为0,不申请中断。

  • TR1(Timer1 Run):TR1 = 1,T1定时/计数器开始工作;TR1 = 0,T1定时/计数器停止工作。

  • TF1(Timer1 Flag):当T1计数器溢出,TF1变为1,立个Flag请求中断;T1计数器没有溢出,TF1为0,不申请中断。

当IT0 = 1,往 I N T 0 ‾ \overline {INT0} INT0 端输入下降沿,IE0变为1,并且中断子程序结束后,IE0会自动变回0;当IT0 = 0,往 I N T 0 ‾ \overline {INT0} INT0 端输入低电平,IE0变为1,但是中断子程序结束后,IE0不会自动归零,所以要记得用指令将IE0置零。同理,IT1和IE1也是这样的,负跳变引起的中断可以自动变为0,但是低电平的就不行

SCON串行控制寄存器

串行控制寄存器(SCON)的逻辑结构
RI(Receive Interrupt):串行口每接收完一帧数据,RI就变为1,表明数据已经接收完成,并且向CPU发送中断请求信号。

TI(Text Interrupt):串行口每发送完一帧数据,TI就变为1,表明数据已经发送完成,并且向CPU发送中断请求信号。

注意:单片机的中断子程序结束后,TI和RI不会自动归零,所以要记得用指令将它们归零。

IE中断允许控制寄存器

![中断允许控制寄存器(IE)的逻辑结构](https://img-blog.csdnimg.cn/dir

  • EX0(Enable Exterior0):EX0 = 1,允许 I N T 0 ‾ \overline {INT0} INT0 端口输入的中断请求信号通过;EX0 = 0,不允许 I N T 0 ‾ \overline {INT0} INT0 端口输入的中断请求信号通过。

  • ET0(Enable Timer0):ET0 = 1,允许T0端口输入的中断请求信号通过;ET0 = 0,不允许T0端口输入的中断请求信号通过。

  • EX1(Enable Exterior1):EX1 = 1,允许 I N T 0 ‾ \overline {INT0} INT0 端口输入的中断请求信号通过;EX1 = 0,不允许 I N T 0 ‾ \overline {INT0} INT0 端口输入的中断请求信号通过。

  • ET1(Enable Timer1):ET1 = 1,允许T0端口输入的中断请求信号通过;ET1 = 0,不允许T0端口输入的中断请求信号通过。

  • ES(Enable Serial):ES = 1,允许串行通信接口输入的中断请求信号通过;ES = 0,不允许串行通信接口输入的中断请求信号通过。(从RXD接口接收完一帧数据会发送中断请求信号,从TXD接口发送完一帧数据也会发送中断请求信号)

  • EA(Enable All Interrupt):EA = 1,只要前面的中断允许位为1,中断请求信号就能通过;EA = 0,就算前面的中断允许位为1,中断请求信号也不能通过。

IP中断优先级控制寄存器中断优先级控制寄存器(IP)的逻辑结构
  • PX0(Priority Exterior0):当PX0 = 1时, I N T 0 ‾ \overline {INT0} INT0 为高优先级;当PX0 = 0时,
    I N T 0 ‾ \overline {INT0} INT0 为低优先级。

  • PT0(Priority Timer0):当PT0 = 1时,T0为高优先级;当PT0 = 0时,T0为低优先级。

  • PX1(Priority Exterior1):当PX1 = 1时, I N T 0 ‾ \overline {INT0} INT0 为高优先级;当PX1 = 0时,
    I N T 0 ‾ \overline {INT0} INT0 为低优先级。

  • PT1(Priority Timer1):当PT1 = 1时,T1为高优先级;当PT1 = 0时,T1为低优先级。

  • PS(Priority Serial):当PS=1时,串行通信口为高优先级;当PS=0时,串行通信口为低优先级。

中断向量单元地址和自然优先级
中断向量单元地址和自然优先级

如果同时有多个高优先级的中断源,那么它们在都优先于低优先级中断源的基础上,再以自然优先级别来排序。

三、中断控制过程

中断响应

中断响应是指CPU从发现中断请求,到开始执行中断函数的过程。CPU响应中断的基本条件为:

  1. 有中断源发出中断请求
  2. EA = 1
  3. 对应的中断允许位为1

CPU响应中断后,由硬件自动执行如下功能操作:

  1. 中断优先级查询,低于优先级的不予理睬
  2. 保护断点,把PC的内容压入堆栈
  3. 清除可清除的中断请求标志位
  4. 调用中断函数
  5. 返回断点

响应时间

从查询中断请求标志到执行中断函数的第一条语句所经历的时间,称为响应中断时间。

外部中断的响应时间一般在3 ~ 8个机器周期之间。

中断撤销

中断响应后,TCON和SCON中的中断请求标志位应及时清零。

对于不同中断请求的撤销方法是不同的:

  • 定时/计数器中断: 全自动,TF0和TF1的清零全部由硬件完成
  • 脉冲触发:仍然为全自动
  • 电平触发:IE0和IE1在被硬件标记为1(也就是通过低电平被触发了中断时)之后是不会被硬件再置为0的,需要软件清零
  • 对于串行口中断:因为中断响应后,需要测试两个标志位的状态(记得吗,串行后的中断标志位有两个),因此不能自动置0。

中断函数

C51中断函数采用如下的定义方式

void 函数名 (void) interrupt n [using m] {
...函数语句...
}

其中:

  • interrupt :C51扩展关键词,n为对应的中断号,使用interrupt可以让编译器知道对应的中断向量地址(=8 * n + 3),并在该地址上设置一个指向该中断函数首地址的无条件跳转指令,C语言这种处理方式使得比汇编语言的开发效率更加高
  • using:C51扩展关键词,使用using m可以切换工作寄存器组,省去中断响应时为了保护断点进行的压栈操作,提高速度。using m省略时默认采用当前工作寄存器组(由PSW特殊功能寄存器的RS1和RS0位确定)

组号m与工作寄存器组的关系如下:

组好m工作寄存器组字节地址RS1 RS0
0第0组:R0~R70~0x070 0
1第1组: R0~ R70x08~0x0f0 1
2第2组: R0~R70x10~0x171 0
3第3组: R0~R70x18~ 0x1f1 1

另外需要注意以下几点:

  • 允许在中断函数中使用return语句,但是不能使用带有表达式的语句
  • 可以使用全局变量,以弥补无参和无返回值的使用限制
  • 中断函数只能被系统调用
  • 中断函数应该尽量简短,在主函数或其他函数中根据中断标志值进行响应处理

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

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

相关文章

代码随想录刷题 | Day1

今日学习目标 一、基础 数组 array类 模板类vector 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标下对应的数据。 需要两点注意的是 数组下标都是从0开始的。 数组内存空间的地址是连续的 而且大家如果使用C的话&…

条件编译处理多端差异

条件编译https://uniapp.dcloud.net.cn/tutorial/platform.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9%E6%9D%A1%E4%BB%B6%E7%BC%96%E8%AF%91%E5%A4%84%E7%90%86%E8%B7%A8%E7%AB%AF%E5%85%BC%E5%AE%B9 <template><view class"container"><…

『亚马逊云科技产品测评』活动征文|云服务器如何快速搭建个人博客(图文详解)

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 引言一、前期准备步骤1.1 准备一个亚马逊 EC2 服务器1.2 进入控…

Screenshot-to-code开源项目mac上实践

github上的开源项目&#xff0c;看介绍可以将设计ui图片转换为 HTML 和 CSS 源码地址&#xff1a; GitCode - 开发者的代码家园 我的mac安装了2.7和3.11&#xff0c;就用3吧直接上代码 安装 pip3 install keras tensorflow pillow h5py jupyter 报错 ERROR: Could not in…

C#使用switch语句更改窗体颜色

目录 一、示例 二、生成 用switch多路选择语句及窗体的BackColor属性更改窗体的BackColor属性。该属性用于获取或设置控件的背景颜色。 可以使用Color结构的静态属性获取Color对象&#xff0c;如Color.Red&#xff1b;也可以使用Color结构的静态方法Color.FromArgb()&#xf…

产品经理学习-怎么写PRD文档

目录 瀑布流方法论介绍 产品需求文档&#xff08;PRD&#xff09;介绍 产品需求文档的基本要素 撰写产品需求文档 优先产品需求文档的特点 其他相关文档 瀑布流方法论介绍 瀑布流模型是一种项目的开发和管理的方法论&#xff0c;是敏捷的开发管理方式相对应的另一种方法…

linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享

Ubuntu安装配置Samba服务与Win10共享文件 Chapter1 Ubuntu18.04安装配置Samba服务与Win10共享文件一、什么是Samba二、安装Samba1、查看是否有安装samba2、安装samba 三、配置Samba服务1、创建共享目录&#xff08;以samba_workspaces为例&#xff09;2、为samba设置登录用户3、…

数据库的学习笔记——第一篇

SQL通用语法 SQL语句 DDL 数据定义 数据库、表字段 DML 数据操作 增删改 DQL 数据查询 查询表中记录 DCL 数据控制 创建用户、控制用户权限 DLL语句——数据库操作 SHOW DATABASES; # 查询数据库SELECT DATABASE(); # 查询当前数据库CREATE DATABASE [IF …

分类模型评估方法

1.数据集划分 1.1 为什么要划分数据集? 思考&#xff1a;我们有以下场景&#xff1a; 将所有的数据都作为训练数据&#xff0c;训练出一个模型直接上线预测 每当得到一个新的数据&#xff0c;则计算新数据到训练数据的距离&#xff0c;预测得到新数据的类别 存在问题&…

阿里后端实习二面

阿里后端实习二面 记录面试题目&#xff0c;希望可以帮助到大家 类加载的流程&#xff1f; 类加载分为三个部分&#xff1a;加载、连接、初始化 加载 类的加载主要的职责为将.class文件的二进制字节流读入内存(JDK1.7及之前为JVM内存&#xff0c;JDK1.8及之后为本地内存)&…

HTML5+CSS3②——图像、超链接、音频、视频

目录 图像 超链接 音频 视频 图像 作用&#xff1a;在网页中插入图片 单标签&#xff1a; 标签名&#xff1a;<img src"图片的URL"> <img src"图片的URL" alt"替换文本" title"提示文本"> 属性写在尖括号里面&#xff0c;…

微服务注册与发现——Eureka

文章目录 Eureka使用引用配置启动类标记访问微服务注册微服务工程添加引用增加配置启动类增加注解启动服务注册 Eureka Server集群部署修改配置文件启动多个eureka实例微服务注册到多个eureka实例 为Eureka Server添加用户认证引入spring-security配置关闭security的csrf&#…