普中51单片机:中断系统与寄存器解析(六)

ops/2024/10/19 17:40:53/

在这里插入图片描述

文章目录

  • 引言
  • 中断流程图
  • 中断优先级
  • 下降沿
  • 中断结构图
  • 中断相关寄存器
    • IE中断允许寄存器(可位寻址)
    • XICON辅助中断控制寄存器(可位寻址)
    • TCON标志控制寄存器
    • SCON串行口控制寄存器
  • 中断号
  • 中断响应条件
  • 中断函数代码模板
  • 电路图
  • 开发板IO连接图
  • 代码演示——外部中断0控制LED1

引言

中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力,它也是单片机最重要的功能之一。中断是指单片机在执行主程序时,遇到某些特定事件(如外部信号、定时器溢出等)时,暂时中止主程序,转而执行中断服务程序,处理完后再返回主程序继续执行。

中断流程图

在这里插入图片描述

中断优先级

在同一时刻,当有多个中断源出现,会根据中断源的优先级来判断先执行哪一个,其中TCON寄存器中的IT0位控制的是触发方式,是低电平触发还是下降沿触发,当为0时,是低电平触发,当为1时是下降沿触发
在这里插入图片描述

下降沿

在数字电路和信号处理中,上升沿触发和下降沿触发是指在时序逻辑中触发触发器或触发器器件(比如时钟触发器)的两种常见方式。

在数字电路中,想象一下时钟信号就像是一根线,它在高电平和低电平之间变化。这个变化的过程就像是上升和下降。当信号从低电平到高电平变化时,我们称之为上升沿;当信号从高电平到低电平变化时,我们称之为下降沿。上升沿触发和下降沿触发描述了在这些变化发生时触发电路动作或逻辑操作的方式。

  • 上升沿触发就像是当时钟信号从低电平到高电平变化时,我们说“现在触发”,进行某种操作或者执行一些任务。
  • 下降沿触发则是当时钟信号从高电平到低电平变化时,我们执行相应的任务或操作。

这些触发方式在数字电路设计中用于指导设备或芯片在特定时刻进行操作。在某些情况下,我们可能需要在信号变为高电平时执行某些操作;而在其他情况下,可能需要在信号变为低电平时执行相应的操作。这取决于特定设计的要求和需要。

中断结构图

在这里插入图片描述
STC89系列单片机>51单片机提供了8个中断请求源,分别是一个外部中断0(INT0),外部中断1(INT1),外部中断2(INT2),外部中断3(INT3)以及定时器0(TF0)、定时器1(TF1)和定时器2(TF2),外加串口中断,用于发送接收(UART)
在这里插入图片描述

注意:外部中断0(INT0),外部中断1(INT1),定时器0(TF0)、定时器1(TF1),串口中断,用于发送接收(UART)这五个中断是单片机>51单片机共有的中断源。

中断相关寄存器

在这里插入图片描述
上表中列出了与STC89C51RC/RD+系列单片机中断相关的所有寄存器。

IE中断允许寄存器(可位寻址)

中断允许控制是指通过设置中断允许位(Interrupt Enable Bits)来决定是否开启对特定中断源的响应。在单片机中,通常会有一个或多个寄存器用于控制不同中断源的允许状态。例如,在80单片机>51单片机中,有一个名为IE(Interrupt Enable)的寄存器,用于控制各种中断的允许状态。

  1. IE寄存器中的位:IE寄存器中的每一位对应一种中断源。如果某一位被设置为1,则表示允许该中断源的中断;如果被设置为0,则表示禁止该中断源的中断。
  2. 中断优先级:在某些单片机中,IE寄存器还可以设置中断优先级,确保高优先级的中断能够得到及时响应。

在这里插入图片描述

  • EA:CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。EA的作用是使中断允许形成两级控制。即各中断源首先收EA控制,其次还受各中断源自己的中断允许控制位控制。
  • ET2: 定时/计数器T2的溢出中断允许位。ET2=1,允许T2中断;ET2=0,禁止T2中断。
  • ES:串行口1中断允许位。ES=1,允许串行口1中断;ES=0,禁止串行口1中断。
  • ET1:定时/计数器T1的溢出中断允许位、ET1=1,允许T1中断;ET1=0,禁止T1中断。
  • EX1:外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。
  • ET0:T0的溢出中断允许位。ET0=1。允许T0中断;ET0=0禁止T0中断。
  • EX0:外部中断0中断允许位。EX0=1,允许中断;EX0=0禁止中断

XICON辅助中断控制寄存器(可位寻址)

在这里插入图片描述

TCON标志控制寄存器

TCON寄存器是专门用于控制定时器和计数器的寄存器。在80单片机>51单片机中,TCON寄存器包含多个位,每个位控制不同的定时器或计数器功能,以及相关的中断请求标志。

  • 定时器/计数器运行控制位:TCON寄存器中的某些位用于启动或停止定时器/计数器的运行。例如,TR0和TR1位用于控制定时器0和定时器1的运行。
  • 中断请求标志:TCON寄存器中的TF0和TF1位分别用于指示定时器0和定时器1是否已经溢出,即是否需要产生中断请求。当中断请求发生时,这些位会被硬件自动设置为1。
  • 重置中断请求标志:当中断服务例程处理完中断请求后,软件需要手动清除TF0和TF1位,以便定时器准备下一次的中断请求。

在这里插入图片描述

SCON串行口控制寄存器

在这里插入图片描述

中断号

单片机(Microcontroller)中,中断号是用于标识不同中断源的唯一数字,它使得单片机能够区分并响应多个同时发生的中断请求。
在这里插入图片描述

中断响应条件

  1. 中断源有中断请求。
  2. 中断源的中断允许位为1,通过设置对应寄存器。
  3. CPU开启总中断(即EA=1)。

中断函数代码模板

中断函数通常使用关键字interrupt和中断号来声明,例如:

void External0_ISR(void) interrupt 0
{// 中断处理代码
}

这表示当外部中断0发生时,将调用External0_ISR函数进行处理 。其他中断类似。

电路图

在这里插入图片描述由图可以看出外部中断0和1分别是P3_2和P3_3引脚

开发板IO连接图

请添加图片描述
由图可知KEY3按键连接在P3_2上,P3_2是外部中断0

代码演示——外部中断0控制LED1

将外部中断0和1设置为下降沿的触发方式,当按键按下的时候,电平状态由高到低,就会触发中断,将对应按键连接到P3_2引脚,当对应按键按下的时候,对应的指示灯通过中断函数点亮。

#include <REGX52.H>sbit LED1 = P2^0;void DelayXms(unsigned int xms)	//@12.000MHz
{unsigned char data i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void External0_ISR(void) interrupt 0
{// 中断处理代码DelayXms(10);//消抖处理if(P3_2 == 0){LED1 = ~LED1;IE0 = 0;	}}void Init_Port()
{LED1 = 0;//默认熄灭EA = 1;//打开总中断EX0 = 1;//打开外部中断1IT0 = 1;//设置为下降沿触发方式
}void main()
{Init_Port();while(1){}
}


http://www.ppmy.cn/ops/56324.html

相关文章

docker相关

docker状态 systemctl status docker 启动docker systemctl start docker 关闭docker systemctl stop docker 查询docker 镜像&#xff0c;容器 docker images docker ps docker ps -a 数据卷 docker volume ls docker volume create xxx docker volume inspect xxx …

深度学习--系统配置流程

Win10系统配置双系统Ubuntu18.04 深度学习台式服务器自装练手1.win10磁盘管理2.下载系统镜像制作U盘3.系统安装4. 安装后的系统设置工作5.配置CUDA环境CUDNN安装 深度学习台式服务器自装练手 写在最前 CUDA最高支持11.4 显卡3060 1.win10磁盘管理 首先对原有磁盘进行分区整理…

Fastjson反序列化漏洞

title: Fastjson反序列化漏洞 categories: 漏洞复现 date: 2024-07-08 16:41:38 1.前言 fastjson是一个有阿里开发的一个开源Java 类库&#xff0c;可以将 Java对象转换为 JSON 格式(序列化)&#xff0c;当然它也可以将 JSON 字符串转换为 Java 对象&#xff08;反序列化&…

闲聊C++与面向对象思想

艾伦凯曾说&#xff0c;“I made up the term object-oriented, and I can tell you I did not have C in mind.”&#xff08;“我发明了术语‘面向对象’&#xff0c;可以告诉您我没有C”&#xff09;。 今天看到这句话&#xff0c;激发了笔者写一篇文章聊聊C与面向对象思想…

MOJO语言中的字典和哈希表:数据结构的灵活性与效率

MOJO是一种编程语言&#xff0c;它以其独特的语法和对现代编程范式的支持而闻名。在MOJO中&#xff0c;字典&#xff08;也称为哈希表或散列表&#xff09;是一种非常重要的数据结构&#xff0c;它允许开发者以键值对的形式存储和检索数据。本文将深入探讨MOJO语言中的字典和哈…

JRE、JVM、JDK分别是什么。

JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包&#xff0c;它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器&#xff08;javac&#xff09;、Java 运行时环境&…

Ubuntu 22.04上/etc/init.d/softIOC脚本解析

如何在Linux上设立一个软IOC框架 以下说明是基于我们的Debian Linux机器。其它发行版(或其他Unixes)会有不同命令和对于东西有不同位置。这对我添加到本页的Debian /etc/init.d尤其如此。如果你为一个不同发行版创建一个不同的脚本&#xff0c;请添加它到本页。其它人将能够使…

将堆内存的最小值(Xms)与最大值(Xmx)设置为相同的配置,可以防止JVM在运行过程中根据需要动态调整堆内存大小

将堆内存的最小值&#xff08;Xms&#xff09;与最大值&#xff08;Xmx&#xff09;设置为相同的配置&#xff0c;可以防止JVM在运行过程中根据需要动态调整堆内存大小&#xff0c;从而避免因内存分配策略变化引起的性能波动&#xff0c;也就是所谓的"内存震荡"&…