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.mzph.cn/news/586851.shtml

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

相关文章

计算机网络——计算大题(七)

前言: 最近也是在准备计算机考试,我们的考试形式是上机考试,所以可能有些计算题是会给提供思路的,前面已经对本学期的计算机网络知识有了一个简单的认识与了解,现在我们就来对计算大题进行一个学习吧,这里的…

中医电子处方系统,西医个体诊所门诊卫生室病历记录查询软件教程

中医电子处方系统,西医个体诊所门诊卫生室病历记录查询软件教程 一、软件程序问答 1、电子处方软件如何快速开单? 如下图,软件以 佳易王诊所电子处方管理系统V17.1版本为例说明 在开电子处方的时候可以按单个药品开,也可以直…

【开源】基于Vue+SpringBoot的二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

结构体:子网掩码

#include<iostream> using namespace std; union IP //创建共用体 {unsigned char a[4];unsigned int ip; }; IP getIP() //获取ip函数 {int a, b, c, d;scanf_s("%d.%d.%d.%d", &a, &b, &c, &d);IP address;address.a[3] a; address.a[2] …

阿里后端实习二面

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

计算机网络【EPOLL 源码详解】

IO多路复用 在以前&#xff0c;传统的网络编程是多线程模型&#xff0c;一个线程单独处理一个请求。 然而&#xff0c;线程是很昂贵的资源&#xff1a; 线程的创建和销毁成本很高&#xff0c;linux的线程实际上是特殊的进程&#xff1b;因此通常会使用线程池来减少线程创建和…

迷宫问题的对比实验研究(代码注释详细、迷宫及路径可视化)

题目描述 对不同的迷宫进行算法问题&#xff0c;广度优先、深度优先、以及人工智能上介绍的一些算法&#xff1a;例如A*算法&#xff0c;蚁群算法等。 基本要求&#xff1a; &#xff08;1&#xff09;从文件读入9*9的迷宫&#xff0c;设置入口和出口&#xff0c;分别采用以上方…

2023年终总结

前言&#xff1a; 嘻嘻&#xff0c;12月底广州降温了又到了写年终总结的时间&#xff0c;这也是我第二年写年终总结。今年的年终总结主要记录了我大三下学期和大四上学期这两个时间段的学习和收获&#xff0c;也是我尝试走出校园&#xff0c;接触社会的第一年&#xff08;感触…

SpringAMQP的使用方式

MQ介绍 MQ&#xff0c;中文是消息队列&#xff08;MessageQueue&#xff09;&#xff0c;字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 比较常见的MQ实现&#xff1a; ActiveMQ RabbitMQ RocketMQ Kafka 几种常见MQ的对比&#xff1a; RabbitMQActiveM…

unity随笔- 2D动画制作animation

1.前提&#xff1a;将连续的动作图片制为图集。 2.在Hierarchy中选中含图集的sprites对象。 3.打开animator组件&#xff0c;点击create创建动画组件 4.添加property选择sprite 5.选择图集需要的部分加入animation。&#xff08;animation使用见animator&#xff09;

OSG绘制视锥体(升级版)

OSG绘制视锥体&#xff0c;这一篇增加设置相机参数接口&#xff0c;支持通过eye、center、up设置相机参数。 代码如下&#xff1a; #include "stdafx.h" #include <osgViewer/Viewer> #include <osg/ShapeDrawable> #include <osg/Geode> #includ…

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

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

JVM工作原理与实战(二):字节码编辑器jclasslib

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、字节码编辑器jclasslib介绍和安装 1.介绍 2.安装 3.IntelliJ IDEA 插件安装 二、字节码编辑器jclasslib的使用 1.使用jclasslib bytecode viewer打开字节码文件 2.使用Intell…

Python+OpenGL绘制3D模型(九)完善插件功能: 矩阵,材质,法线

系列文章 一、逆向工程 Sketchup 逆向工程&#xff08;一&#xff09;破解.skp文件数据结构 Sketchup 逆向工程&#xff08;二&#xff09;分析三维模型数据结构 Sketchup 逆向工程&#xff08;三&#xff09;软件逆向工程从何处入手 Sketchup 逆向工程&#xff08;四&#xf…

自动驾驶学习笔记(二十三)——车辆控制模型

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo开放平台9.0专项技术公开课》免费报名—>传送门 文章目录 前言 运动学模型 动力学模型 总结…

MyBatis-config.xml配置文件

1、基本介绍&#xff1a; mybatis的核心配置文件(mybatis-config.xml)&#xff0c;比如配置jdbc连接信息&#xff0c;注册mapper等等&#xff0c;我们需要对这个配置文件有详细的了解。 官网地址有详细介绍 mybatis – MyBatis 3 | 配置 2、properties属性 在通常的情况下&am…

Java 运算符

&&运算比||运算的优先级高 C与Java

【Unity入门】热更新框架之xLua

目录 一、xLua概述1.1xLua简介1.2xLua安装 二、Lua文件加载2.1执行字符串2.2加载Lua文件2.3自定义loader 三、xLua文件配置3.1打标签3.2静态列表3.3动态列表 四、Lua与C#交互4.1 C#访问Lua4.1.1 获取一个全局基本数据类型4.1.2 访问一个全局的table4.1.3 访问一个全局的functio…

STM32 ESP8266 物联网智能温室大棚 源码PCB原理图 设计文档

资料下载: https://download.csdn.net/download/vvoennvv/88680924 一、概述 本系统以STM32F103C8T6单片机为主控芯片&#xff0c;采用相关传感器构建系统硬件电路。其中使用DHT11温湿度传感器对温度和湿度的采集&#xff0c;MQ-7一氧化碳传感器检测CO浓度&#xff0c;GP2Y101…