当前位置: 首页 > news >正文

单片机原理及技术(六)—— 中断系统的工作原理

目录

一、AT89S51中断技术概述

二、AT89S51中断系统结构

2.1 中断请求源

2.2 中断请求标志寄存器

2.2.1 TCON 寄存器

2.2.2 SCON 寄存器

三、中断允许与中断优先级的控制

3.1 中断允许寄存器 IE

3.2 中断优先级寄存器 IP

四、响应中断请求的条件

五、外部中断的触发方式选择

六、中断函数

6.1 中断系统应用举例


一、AT89S51中断技术概述

AT89S51是一款8位单片机,具有丰富的中断技术功能。中断技术是一种能够提高系统灵活性和响应速度的关键技术,它允许单片机在执行程序的过程中,根据外部或内部事件的发生而中断当前的程序执行,去执行相应的中断服务程序。

二、AT89S51中断系统结构

 AT89S51的中断系统结构图

2.1 中断请求源

AT89S51是一种8位微控制器,具有5个中断请求源。这些中断请求源是:外部中断0(INT0)、外部中断1(INT1)、定时器0中断请求(TF0)、定时器1中断请求(TF1)和串行口中断请求(RI/TI)。

外部中断0和外部中断1是外部引脚的中断请求源,可以通过设置和清除相关的寄存器来使能和禁用这些中断。

定时器0和定时器1中断请求是由定时器/计数器模块产生的。当定时器/计数器溢出时,会触发相应的中断请求。

串行口中断请求是由串行通信口接收和发送数据时产生的。当接收到数据时,会触发接收中断请求(RI);当发送完数据后,会触发发送中断请求(TI)。

2.2 中断请求标志寄存器

5个中断请求源的中断请求标志分别由特殊功能寄存器TCON和SCON的相应位锁存。

2.2.1 TCON 寄存器

TCON寄存器(Timer/Counter Control Register)是8051系列微控制器中的一个特殊功能寄存器,用于控制定时器、计数器以及外部中断的相关设置。

TCON寄存器是一个8位寄存器,其位的含义如下:

  • TF1 (定时器1溢出标志位):当定时器1计数溢出时,TF1位会被设置为1。在中断服务程序中,可以通过清除TF1位来复位溢出标志。
  • TR1 (定时器1启动/停止控制位):当TR1位为1时,定时器1启动;当TR1位为0时,定时器1停止。
  • TF0 (定时器0溢出标志位):当定时器0计数溢出时,TF0位会被设置为1。在中断服务程序中,可以通过清除TF0位来复位溢出标志。
  • TR0 (定时器0启动/停止控制位):当TR0位为1时,定时器0启动;当TR0位为0时,定时器0停止。
  • IE1 (外部中断1边沿触发标志位):当外部中断1检测到边沿触发时,IE1位会被设置为1。
  • IT1 (外部中断1触发类型控制位):用于设置外部中断1的触发类型。当IT1位为0时,外部中断1为低电平触发;当IT1位为1时,外部中断1为下降沿触发。
  • IE0 (外部中断0边沿触发标志位):当外部中断0检测到边沿触发时,IE0位会被设置为1。
  • IT0 (外部中断0触发类型控制位):用于设置外部中断0的触发类型。当IT0位为0时,外部中断0为低电平触发;当IT0位为1时,外部中断0为下降沿触发。

2.2.2 SCON 寄存器

SCON(Serial Control Register)寄存器是8051系列微控制器中的一个特殊功能寄存器,用于控制串行通信的相关设置。

SCON寄存器是一个8位寄存器,其位的含义如下:

  • SM0/FE(串行通信模式选择/帧错误标志位):当SM0为0时,串行通信使用8位数据位;当SM0为1时,串行通信使用9位数据位;当FE为1时,表示接收到的数据帧中有错误。
  • SM1(串行通信模式选择):当SM1为0时,串行通信使用异步模式(波特率可变);当SM1为1时,串行通信使用同步模式(波特率固定)。
  • SM2(多机通信模式选择):当SM2为0时,串行通信使用单机模式(无多机通信);当SM2为1时,串行通信使用多机模式。
  • REN(串行通信接收使能):当REN为1时,允许串行接收器接收数据;当REN为0时,禁止串行接收器接收数据。
  • TB8(发送数据的第9位):当SM0为1时,TB8表示发送数据的最高位。
  • RB8(接收数据的第9位):当SM0为1时,RB8表示接收数据的最高位。
  • TI(发送中断标志):当发送数据完成时,TI将被置位为1。
  • RI(接收中断标志):当接收到数据时,RI将被置位为1。

注意:

  • TI和RI均需要手动清除。

三、中断允许与中断优先级的控制

3.1 中断允许寄存器 IE

IE(Interrupt Enable)寄存器是8051系列微控制器中的一个特殊功能寄存器,用于控制中断的相关设置。

IE寄存器是一个8位寄存器,其位的含义如下:

  • EA(全局中断使能):当EA为1时,允许所有中断;当EA为0时,禁止所有中断。
  • ET2(定时器2中断使能):当ET2为1时,允许定时器2中断;当ET2为0时,禁止定时器2中断。
  • ES(串行口中断使能):当ES为1时,允许串行口中断;当ES为0时,禁止串行口中断。
  • ET1(定时器1中断使能):当ET1为1时,允许定时器1中断;当ET1为0时,禁止定时器1中断。
  • EX1(外部中断1使能):当EX1为1时,允许外部中断1;当EX1为0时,禁止外部中断1。
  • ET0(定时器0中断使能):当ET0为1时,允许定时器0中断;当ET0为0时,禁止定时器0中断。
  • EX0(外部中断0使能):当EX0为1时,允许外部中断0;当EX0为0时,禁止外部中断0。

3.2 中断优先级寄存器 IP

在AT89S51微控制器中,中断优先级关系的两条基本规则如下:

  1. 低优先级可被高优先级中断,高优先级不能被低优先级中断。

  2. 任何一种中断(不管是高级还是低级)一旦得到响应,不会再被它的同级中断源所中断。如果某一中断源被设置为高优先级中断,在执行该中断源的中断服务程序时,则不能被任何其他中断源的中断请求所中断。

中断优先级寄存器(Interrupt Priority Register,IP)是一个8位寄存器,用于设置和存储中断的优先级。IP的各位的含义如下:

  • PX0(外部中断0中断优先级控制位):1——高优先级;0——低优先级。
  • PX1(外部中断1中断优先级控制位):1——高优先级;0——低优先级。
  • PS(串行口中断优先级控制位):1——高优先级;0——低优先级。
  • PT1(定时器T1中断优先级控制位):1——高优先级;0——低优先级。
  • PT0(定时器T0中断优先级控制位):1——高优先级;0——低优先级。

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

四、响应中断请求的条件

  1. 总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。

  2. 该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。

  3. 该中断源的中断允许位=1,即该中断被允许。

  4. 无同级或更高级中断正在被服务。

满足以上条件后,中断控制器会将中断请求转发给CPU,CPU暂停当前任务的执行,保存现场信息后执行中断服务程序来处理中断请求。

五、外部中断的触发方式选择

外部中断的触发方式选择包括电平触发和负跳变触发。

电平触发在电平触发方式下,中断源的中断请求只要保持在特定电平上,中断就会被触发。通常,电平触发可以分为高电平触发和低电平触发两种方式。

  • 高电平触发:当中断源的信号电平保持高电平时,中断触发。
  • 低电平触发:当中断源的信号电平保持低电平时,中断触发。

负跳变触发负跳变触发方式也称为边沿触发,是在中断源的信号发生负跳变(从高电平到低电平)时才触发中断。负跳变触发方式具有以下两种方式:

  • 负跳变上升沿触发(Falling-Edge Triggered):当中断源的信号从高电平变为低电平时,中断触发。
  • 负跳变下降沿触发(Rising-Edge Triggered):当中断源的信号从低电平变为高电平时,中断触发。

六、中断函数

在C51中,中断函数是用来处理中断事件的特殊函数。当发生中断时,CPU会暂时中止当前的程序执行,转而执行中断函数。中断函数完成后,CPU会返回到原来的位置继续执行。

C51中,中断函数的定义方式如下:

void interrupt_function() interrupt [interrupt_number]
{// 中断处理逻辑// ...
}

其中,interrupt_function是中断函数的名称,interrupt_number是中断的编号。

常见的中断编号包括:

例如,下面的代码定义了一个外部中断0的中断函数:

void ext_interrupt0() interrupt 0
{// 外部中断0处理逻辑// ...
}

在使用中断函数前,需要进行中断的初始化设置。例如,开启中断、设置中断优先级等。

下面是一个简单的示例,展示了如何使用定时器0中断函数进行定时操作:

#include <reg51.h>void timer0_interrupt() interrupt 1
{// 定时器0中断处理逻辑// ...
}void main()
{// 初始化定时器0TMOD = 0x01;  // 设置定时器0为模式1TH0 = 0xFC;   // 定时器0高字节初值TL0 = 0x66;   // 定时器0低字节初值ET0 = 1;      // 允许定时器0中断EA = 1;       // 允许总中断// 启动定时器0TR0 = 1;while (1){// 主循环逻辑// ...}
}

在上面的代码中,首先定义了一个定时器0中断函数timer0_interrupt。然后,在main函数中进行了定时器的初始化设置,包括设置定时器模式、初值等。最后,通过ET0 = 1开启了定时器0中断,并通过EA = 1开启了总中断。在主循环中处理其他逻辑。

当定时器0中断发生时,C51会自动跳转到timer0_interrupt函数执行中断处理逻辑,完成后返回到原来的执行位置继续执行主循环。

6.1 中断系统应用举例

在AT89S51单片机的P1口上接有8只LED。在外部中断0输入引脚INTO (P3.2)接有一只按钮开关k1。要求将外部中断0设置为电平触发。程序启动时,P1口上的8只LED全亮。每按一次按钮开关kl,使引脚INTO接地,产生一个低电平触发的外中断请求,在中断服务程序中,让低4位的LED与高4位的LED交替闪烁5次。然后从中断返回,控制8只LED再次全亮,其原理电路如下图所示。

利用中断控制8只LED交替闪烁一次的电路示意图 

程序代码:

#include <reg51.h>
#define uchar unsigned char
void Delay (unsigned int i){              //延时函数Delay(),i为形式参数,不能赋初值unsigned int j;for(;i > 0;i--)for (j=0;j<333;j++)                   //晶体振荡器为12MHz,j的选择与晶体振荡器频率有关{;}                 //空函数
}
void main( ){EA=1;         //总中断允许EX0=1;        //允许外部中断0中断IT0=1;        //选择外部中断0为跳沿触发方式Wh1le(1){P1=0;}
void int0( ) interrupt 0 using 1{        //外中断0的中断服务函数uchar m;EX0=0;                               //禁止外部中断0中断for(m=0;m<5;m++){P1=0xf0;Delay(400);P1=0x0f;Delay(400);}EX0=1;                               //中断返回前,打开外部中断0中断
}

相关文章:

单片机原理及技术(六)—— 中断系统的工作原理

目录 一、AT89S51中断技术概述 二、AT89S51中断系统结构 2.1 中断请求源 2.2 中断请求标志寄存器 2.2.1 TCON 寄存器 2.2.2 SCON 寄存器 三、中断允许与中断优先级的控制 3.1 中断允许寄存器 IE 3.2 中断优先级寄存器 IP 四、响应中断请求的条件 五、外部中断的触发…...

Angular路由使用

Angular路由是Angular框架中一个非常重要的特性&#xff0c;开发者可以根据URL的不同来动态地加载和显示不同的组件&#xff0c;从而构建出单页面应用&#xff08;SPA&#xff09;。 以下是Angular路由使用的基本步骤和要点&#xff1a; 1. 安装和配置路由模块 首先&#xf…...

【JVM】深入理解类加载机制(一)

深入理解类加载机制 Klass模型 Java的每个类&#xff0c;在JVM中都有一个对应的Klass类实例与之对应&#xff0c;存储类的元信息如:常量池、属性信息、方法信息…从继承关系上也能看出来&#xff0c;类的元信息是存储在元空间的。普通的Java类在JVM中对应的是InstanceKlass(C)…...

区块链浏览器需求整理

用户需求 普通用户 便捷查询交易记录&#xff1a;能够轻松找到自己或特定地址的交易详情&#xff0c;包括交易时间、金额、状态等。查看账户余额&#xff1a;实时了解地址的余额情况。追踪资产流向&#xff1a;了解自己的资产在区块链上的转移路径。 开发者 智能合约调试&a…...

Laravel 表单验证功能重定向判断

判断主要针对 API 请求和普通页面请求&#xff0c;即 API 的表单验证失败直接响应 JSON&#xff0c;而页面的表单验证失败正常重定向。 看网上基本上是继承 FormRequest 类来实现&#xff0c;其实直接修改异常处理的 Handler 类即可&#xff0c;非常简单。 打开 app/Exception…...

MATLAB口罩检测系统

一、应用背景 作为数字图像处理和计算机视觉领域的一个重要组成部分&#xff0c;利用摄像机对图像进行采集&#xff0c;从图像中检测人脸并进行口罩穿戴的识别的有着非常重要的研究意义和应用价值。面对突如其来的新型肺炎疫情&#xff0c;人们生活秩序被严重打乱。跟普通流感…...

LeetCode 第三十一天 2024.8.18

1. &#xff1a;买卖股票的最佳时机 题目链接: 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 应用条件&#xff1a; 难点&#xff1a; # 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp数组由len(prices)个[][]组成&#xff…...

Linux驱动学习之点灯(一)

学习不同的板子我们都是从点灯开始&#xff0c;linux驱动也不例外 驱动开发基础知识 何为驱动&#xff1f; 驱使硬件正常工作的代码就叫做驱动。 在一些mcu里&#xff1a; 无非就是直接操作寄存器&#xff0c;或者用库函数初始化外设&#xff0c;使外设正常工作如初始化iic&…...

从HTTP到HTTPS:SSL加密如何重塑互联网安全格局

从HTTP到HTTPS&#xff1a;SSL加密如何重塑互联网安全格局 随着互联网技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;保护用户数据的安全性和隐私性成为了不可忽视的重要议题。从HTTP&#xff08;超文本传输协议&#xff09;到HTTPS&#xff08;超文本传输安全协…...

QT网络编程: 实现UDP通讯设置

目录 一.widget.ui界面设计 二.创建UDP通信 1.pro文件添加network模块。 2.添加对应头文件 3.定义槽函数&#xff0c;即与 UI 中的按钮点击事件相关联的函数 4.定义类的私有成员 5.关闭按钮 6.信息处理 7.绑定端口 8.发送信息 9.效果图 三.代码演示 1.widget.h 2.…...

机器学习第十一章--特征选择与稀疏学习

一、子集搜索与评价 我们将属性称为 “特征”(feature&#xff09;&#xff0c;对当前学习任务有用的属性称为 “相关特征”(relevant feature&#xff09;、没什么用的属性称为 “无关特征”(irrelevant feature)&#xff0e;从给定的特征集合中选择出相关特征子集的过程&…...

dm 到 dm 的 HS 同步部署

一、数据库部署 完成两节点数据库部署并初始化&#xff0c;配置参数如下&#xff1a; 节点 192.168.2.132 192.168.2.133 数据库版本 DM8 DM8 实例名 DM1 DM2 端口号 5236 5236 数据文件路径 /home/dmdba/dmdata /home/dmdba/dmdata 二、 dmhs 部署 1. 部署…...

ShardingSphere、雪花算法、分布式id生成器CosID概述

ShardingSphere 用处&#xff1a;sharding是分片的意思&#xff0c;sphere是球&#xff08;生态的意思&#xff09;。用来做分库分表的生态的。一个订单表太大&#xff0c;查询会很慢&#xff0c;要分表&#xff0c;分为3个表&#xff0c;这样查询会快一点&#xff0c;所以有了…...

hive学习(四)

一、分区表的数据导入 1.静态分区&#xff08;需要手动指定分区字段的值&#xff09; 直接将文件数据导入到分区表 语法&#xff1a;load data [local] inpath filepath into table tablename partition(分区字段1分区值1, 分区字段2分区值2...); load data [local] inpat…...

UniAD_面向规划的自动驾驶

Planning-oriented Autonomous Driving 面向规划的自动驾驶 https://github.com/OpenDriveLab/UniAD Abstract Modern autonomous driving system is characterized as modular tasks in sequential order, i.e., perception, prediction, and planning. In order to perfor…...

《现代情报》

《现代情报》简介 《现代情报》&#xff08;原名《情报知识》&#xff09;杂志是由吉林省科学技术厅主管&#xff0c;吉林省科学技术信息研究所、中国科学技术情报学会联合主办的信息资源管理领域综合性学术期刊。该刊于1980年创刊&#xff0c;每年12期。重点报道服务于国家战略…...

2024年最新上榜的文件加密管理软件

文件加密市场风起云涌&#xff0c;后辈迭出&#xff0c;2024年安企神软件在文件加密管理软件市场中备受瞩目&#xff0c;凭借其强大的功能和全面的保护策略&#xff0c;成功上榜并受到广泛认可。以下是对它的详细介绍&#xff1a; 一、产品概述 安企神软件不仅是一款电脑监控…...

Matplotlib库学习之scatter(模块)

Matplotlib库学习之scatter(模块) 一、简介 Matplotlib 是 Python 中一个强大的绘图库&#xff0c;其中 matplotlib.pyplot.scatter 用于创建散点图。散点图在数据可视化中广泛用于展示两个变量之间的关系。 二、语法和参数 语法 matplotlib.pyplot.scatter(x, y, sNone, c…...

脑网络相似性:方法与应用

摘要 图论方法已被证明是理解、表征和量化复杂大脑网络的有效工具。然而&#xff0c;定量比较两个图形的方法却较少受到关注。在一些网络神经科学应用中&#xff0c;比较大脑网络确实是必不可少的。在这里&#xff0c;本研究讨论了近年来用于比较大脑网络的技术现状、挑战以及…...

【JavaEE】深入MyBatis:动态SQL操作与实战项目实现指南

目录 MyBatis的进阶操作动态SQL<if>标签<trim>标签<where>标签<set>标签<foreach>标签<include>标签 练习表白墙数据准备引⼊MyBatis 和 MySQL驱动依赖配置MySQL账号密码编写后端代码测试 图书管理系统数据库表设计引⼊MyBatis 和MySQL 驱…...

Linux 实操-权限管理:深入了解rwx的作用

&#x1f600;前言 本篇博文是关于Linux文件权限管理的基本知识和实际操作&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是…...

Linux 系统编程 --- day3

目录 1. fileno 2.fdopen 3. 目录操作 3.1 opendir 3.2 readdir 3.3 closedir 3.4 实现 ls 命令的功能 4. chdir &#xff08;相当于cd命令&#xff09; 5. getcwd &#xff08;相当于pwd命令&#xff09; 6. mkdir 7. rmdir &#xff08;相当于rm命令&a…...

centos从home分区分配空间到根分区

在安装centos系统时如果采用默认自动分区&#xff0c;则会默认只给根分区分配50G空间&#xff0c;其余多余的会被分配到home分区&#xff0c;而作为家用服务器或仅个人使用的话&#xff0c;为了方便往往根分区会不够用而home分区几乎没使用。 先看下现在的磁盘结构和容量(xfs文…...

设计模式实战:即时通讯应用的设计与实现

系统功能需求 用户管理:支持用户注册、登录、注销、个人信息更新等功能。消息传递:支持即时消息发送、接收、存储和显示,支持文本、图片、语音等多种消息类型。在线状态管理:实时跟踪和显示用户的在线状态。消息通知:在消息到达时发送推送通知给用户。聊天记录管理:支持聊…...

白骑士的C#教学实战项目篇 4.3 Web开发

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.2 图形用户界面&#xff08;GUI&#xff09;应用 在这一部分&#xff0c;我们将从桌面应用程序扩展到 Web 开发。Web 开发是现代软件开发的重要领域&#xff0c;涵盖了从前端用户界面到后端服务器逻辑的完整堆栈。在这…...

【数据分析】(交互) 延迟互信息(熵、概率密度、高斯核、带宽估计)

文章目录 一、互信息基础二、延迟互信息2.1 交互延迟互信息三、时间序列互信息中的概率计算(高斯核密度估计)四、python 示例补充 1:熵熵的定义熵的性质熵的单位和对数底数熵的最大值高熵、低熵的分辨补充 2:概率密度 和 高斯核概率密度高斯核拓展3 :核密度函数带宽估计在…...

html转vue项目

HTML是一种用于构建网页的标记语言&#xff0c;而Vue是一种用于构建用户界面的JavaScript框架。在HTML中使用Vue可以提供更加灵活和动态的用户界面功能。本文将介绍如何将HTML代码转换为Vue&#xff0c;并提供具体的代码示例。 首先&#xff0c;我们需要在项目中引入Vue框架。…...

.NET系列 定时器

net一共&#xff14;种定时器 System.Windows.Forms.Timer 类型 》》WinForm专用System.Windows.Threading.DispatcherTime类型》》WPF专用System.Threading.Timer类型》》》它使用 ThreadPool 线程来执行定时操作System.Timers.Timer类型 》》这种很老了。 它使用基于底层计时…...

【Golang】火焰图空白部分是什么?

起因 被同事灵魂拷问&#xff1a;图中这块空白是什么东西&#xff1f; 豆包回答说是数据采样不完整&#xff0c;特定函数或代码段未被调用之类的原因&#xff0c;感觉都不太合理。 之前看过一篇文章说&#xff1a;Heap Profiling的采样是无时无刻不在发生的&#xff0c;执行…...

Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader]

Web框架 --- 解析Web请求 [FromBody] [FromQuery] [FromRoute] [FromHeader] [FromBody][FromQuery][FromRoute] or [FromUri][FromHeader] [FromBody] FromBody 属性在使用 application/json 内容类型并在正文中传递 JSON 时使用通常情况下&#xff0c;FromBody 在一个操作中只…...