51单片机的外部中断的以及相关寄存器的讲解

中断系统

本文主要涉及8051单片机的中断系统的讲解与使用
其中包括中断相关寄存器的介绍与使用以及外部中断初始化的代码分析。

文章目录

  • 中断系统
    • 一、 中断的介绍
    • 二、 中断结构及相关寄存器
      • 2.1 中断源
    • 2.2 中断请求控制器
      • 2.2.1 TCON寄存器
      • 2.2.2 SCON寄存器
      • 2.2.3 中断允许寄存器IE
      • 2.2.4 中断优先级寄存器IP
    • 三、 外部中断代码
      • 3.1 中断的初始化
      • 3.2 中断服务函数

一、 中断的介绍

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

中断的定义
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。

引起 CPU 中断的根源称为中断源。中断源向 CPU 提出中断请求,CPU 暂时中断原来的事务 A,转去处理事件 B,对事件 B 处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。

当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。

为什么要设置中断

    1. 提高CPU工作效率
    1. 具有实时处理功能
    1. 具有故障处理能力
    1. 实现分时操作

二、 中断结构及相关寄存器

在这里插入图片描述

2.1 中断源

51单片机总共有5个中断源,其中2个为外部中断源,3个为内部中断源。

(1)INT0*—外部中断请求0,中断请求信号由引脚输入,中断请求标志为IE0
(2)INT1*—外部中断请求1,中断请求信号由引脚输入,中断请求标志为IE1
(3)定时器/计数器T0-计数溢出发出的中断请求,中断请求标志为TF0
(4)定时器/计数器T1-计数溢出发出的中断请求,中断请求标志为TF1
(5)串行口中断请求,中断请求标志为发送中断TI或接收中断RI

2.2 中断请求控制器

80C51涉及的中断请求控制寄存器有2个。定时和外中断用TCON,串行中断用SCON。

2.2.1 TCON寄存器

字节地址为88H,可位寻址
该寄存器中既包括:

  • T0和T1的溢出中断请求标志位TF0和TF1,
  • 两个外部中断请求的标志位IE1与IE0,
  • 两个外部中断请求源的中断触发方式选择位

在这里插入图片描述

2.2.2 SCON寄存器

SCON为串行口控制寄存器,字节地址为98H,可位寻址
请求标志TI和RI,其格式如图5-4所示。
在这里插入图片描述

SCON中各标志位的功能如下:
(1)TI—串行口的发送中断请求标志位。CPU将一个字节的数据写入串行口的发送缓冲器SBUF时,就启动一帧串行数据的发送,每发送完一帧串行数据后,硬件使TI自动置“1”。

注:CPU响应串行口发送中断时,并不清除TI中断请求标志,TI标志必须在中断服务程序中用指令对其清“0”。
(2)RI—串行口接收中断请求标志位。在串行口接收完一个串行数据帧,硬件自动使RI中断请求标志置“1”。
注:CPU在响应串行口接收中断时,RI标志并不清“0”,必须在中断服务程序中用指令对RI清“0”。

2.2.3 中断允许寄存器IE

IE控制CPU对各中断源的开放或屏蔽,的字节地址为A8H,可进行位寻址,其格式如图5-5所示。

在这里插入图片描述

(1)EA—中断总允许开关控制位。
EA=0,所有中断被屏蔽。
EA=1,所有中断被开放。
只要有中断被允许,EA=1

(2)ES—串行口中断允许位。
ES=0,禁止串行口中断。
ES=1,允许串行口中断。

(3)ET1—定时器/计数器T1的溢出中断允许位。
ET1=0,禁止T1溢出中断。
ET1=1,允许T1溢出中断。

(4)EX1—外部中断1中断允许位。
EX1=0,禁止外部中断1中断。
EX1=1,允许外部中断1中断

(4)EX1—外部中断1中断允许位。
EX1=0,禁止外部中断1中断。
EX1=1,允许外部中断1中断。

(5)ET0—定时器/计数器T0的溢出中断允许位。
ET0=0,禁止T0溢出中断。
ET0=1,允许T0溢出中断。

(6)EX0—外部中断0中断允许位。
EX0=0,禁止外部中断0中断。
EX0=1,允许外部中断0中断。

复位以后,IE被清“0”,所有的中断请求被禁止

2.2.4 中断优先级寄存器IP

中断请求源有两个中断优先级,每一中断请求源可由软件设置为高优先级中断或低优先级中断。

中断嵌套,就是单片机正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。
在这里插入图片描述

关于各中断源的中断优先级关系,可归纳为下面两条基本规则:
(1)低优先级可被高优先级中断,高优先级不能低优先级中断。
(2)任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断源所中断。

中断优先级寄存器IP,其字节地址为B8H,可位寻址。IP寄存器的格式如图5-7所示。
在这里插入图片描述

中断优先级寄存器IP各位的含义如下:
(1)PS—串行口中断优先级控制位
PS=1,串行口中断为高优先级
PS=0,串行口中断为低优先级

(2)PT1—定时器T1中断优先级控制位
PT1=1,定时器T1中断为高优先级
PT1=0,定时器T1中断为低优先级

(3)PX1—外部中断1中断优先级控制位
PX1=1,外部中断1中断为高优先级
PX1=0,外部中断1中断为低优先级

(4)PT0—定时器T0中断优先级控制位
PT0=1,定时器T0中断为高优先级
PT0=0,定时器T0中断为低优先级

(5)PX0—外部中断0中断优先级控制位
PX0=1,外部中断0中断为高优先级
PX0=0,外部中断0中断为低优先级

复位以后,IP的内容为0,各个中断源均为低优先级中断.

在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序如表5-1所示。
在这里插入图片描述

由此可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断的优先权最低

三、 外部中断代码

3.1 中断的初始化

void init_exit0()
{EA=1//打开总中断开关EX0=1//开外部中断 0IT0=1//设置外部中断的触发方式0-电平触发 1-边沿触发
}
void init_exit1()
{EA=1//打开总中断开关EX1=1//开外部中断 0IT1=0//设置外部中断的触发方式
}

3.2 中断服务函数

中断号
在这里插入图片描述

void exit0()    interrupt 0 //外部中断0的中断服务函数
{//中断响应后要做的事情}void exit1() interrupt 2 //外部中断1的中断服务函数
{//中断1响应后需要做的事情
}

原理图中 K3 键是连接在单片机 P3.2 口(外部中断 0),K4 按键是连接在 P3.3 口(外部中断 1)。

在这里插入图片描述

所以中断的触发是通过这两个按键来实现的,使用中断时需要注意。

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

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

相关文章

MQ入门—centos 7安装RabbitMQ 安装

三:RabbitMQ 安装 1.环境准备 Linux 的 CentOS 7.x 版本。Xftp 传输安装包到 Linux。Xshell 连接 Linux,进行解压安装。 RabbitMQ安装包 链接:https://pan.baidu.com/s/1ZYVI4YZlvMrj458jakla9A 提取码:dyto xshell安装包 链接&…

ARM KEIL 安装

根据设备类型安装开发工具及环境 Arm,Cortex ----> MDK-Arm 8051 ----> C51 80251 ----> C251 C166,XC166,XC2000 MCU设备 ----> C155 填写信息提交后下载 点击MDK539.EXE下载 : MDK539.EXE 双击MDK539安装 点击Next 默认安装路径,点击Ne…

Axure的使用

1.Axure是什么??? Axure是一款功能强大的原型设计工具,它可以让用户快速地创建交互式原型,并针对原型进行测试和改进。Axure的主要特点包括可定制的界面元素库、交互动画效果、条件逻辑、团队协作等功能,适…

PHP-个人博客-期末项目学习交流 【最后附有运行代码展示效果】

目录 项目主要功能有::登入,注册,留言板管理,用户管理 数据库表有: user表,msg1表 (可以私信我获取) 主页展示: 注册页面 登入页面 留言板: 用户管…

java SSM火车票务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM火车票务管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…

利用svm进行模型训练

一、步骤 1、将文本数据转换为特征向量 : tf-idf 2、使用这些特征向量训练SVM模型 二、代码 from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import SVC from sklearn.m…

Notion开源平替知识库软件AFFiNE本地部署与公网访问远程协作

文章目录 前言1. 使用Docker安装AFFINE2. 安装cpolar内网穿透工具3. 配置AFFINE公网访问地址4. 实现公网远程访问AFFINE5. 结语 前言 本篇文章讲解Notion开源平替全能知识库工具AFFINE如何本地部署,并实现公网远程访问。AFFiNE 是一个全新的开源项目,旨…

深度学习第5天:GAN生成对抗网络

☁️主页 Nowl 🔥专栏 《深度学习》 📑君子坐而论道,少年起而行之 ​​ 文章目录 一、GAN1.基本思想2.用途3.模型架构 二、具体任务与代码1.任务介绍2.导入库函数3.生成器与判别器4.预处理5.模型训练6.图片生成7.不同训练轮次的结果对比 一…

匿名内部类与Lambda表达式

深入了解Java的匿名内部类 Java作为一种面向对象的编程语言,提供了许多灵活的特性,其中之一就是匿名内部类。匿名内部类是一种没有名字的局部内部类,通常用于创建只需在一个地方使用的类的实例。 什么是匿名内部类? 匿名内部类是…

cmake 最基础示例

C 代码 文件名&#xff1a;first_cmake.cpp #include <iostream> using namespace std;int main() {cout<< "A" << endl;return 0; }CMakeLists.txt 文件 #CMakeLists.txt # 设置:版本 cmake_minimum_required(VERSION 3.20)# 定义 :项目名称 …

跑代码中遇到的错误合集(持续更新)

1.TypeError: dropout(): argument ‘input‘ (position 1) must be Tensor, not str 原因&#xff1a;dropout函数接收到的参数是一个字典类型(需手动设置其不要返回字典类型) 解决步骤: 1.根据代码定位到dropout函数 2.定位到函数中的参数 3.对给dropout函数参数赋值的函数的…

“文思助手”苏哒智能加入飞桨技术伙伴计划,共同打造“大模型+企业办公”新模式

近日&#xff0c;厦门苏哒智能科技有限公司正式加入飞桨技术伙伴计划&#xff0c;双方将发挥各自的专业优势&#xff0c;共同致力于在智能办公和创作领域实现技术突破和业务创新&#xff0c;帮助企业、知识工作者大幅提高生产力。 厦门苏哒智能科技有限公司 厦门苏哒智能科技有…