05:中断

中断

  • 1、定时器T0中断
    • 1.1、定时器中断触发
    • 1.2、案例:通过定时器T0中断来实现灯间隔1s亮灭
  • 2、外部中断
    • 2.1、外部中断的触发
    • 2.2、案例:使用外部中断0通过震动传感器控制LED1的亮灭

1、当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。
2、通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。
3、C51单片机有8个中断请求源:

在这里插入图片描述

1、定时器T0中断

在这里插入图片描述

如图:中断也需要配置寄存器,一共有2种寄存器,第一种位中断控制寄存器(IE和XICON),第二种为优先级控制寄存器。这里我们只学习定时器T0的一个中断。
要使用定时器T0中断:

ET0 = 1; ET0为定时器T0的中断开关,为1时打开中断
EA = 1;  EA为中断源的总开关。

1.1、定时器中断触发

  • 当定的时间到了后,就开始触发中断,去执行中断函数里面的程序。
  • 如果中断执行完后,还需要过一段时间继续执行中断,则需要在中断函数里面重新定时。
  • 那么怎样才知道哪个函数是中断函数喃?— 查询中断号(不同中断源产生的中断号不同)。
    在这里插入图片描述

1.2、案例:通过定时器T0中断来实现灯间隔1s亮灭

#include <REGX52.H>

sbit LED1 = P3^7;
int cnt = 0;

void Timer0_Init_10ms(void)		//10毫秒@11.0592MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0xDC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

void Timer0_interrupt_Init(void)//定时器T0中断初始化
{
	ET0 = 1;
	EA = 1;
}

void main(void)
{ 
	LED1 = 1;//先让灯熄灭的状态
	Timer0_Init_10ms();//打开定时器T0
	Timer0_interrupt_Init();//打开定时器T0中断
	while(1)
	{
		
	 }
}

/*定义中断函数*/
void Timer0Hander() interrupt 1
{
	TF0 = 0;//软件清零
	TL0 = 0x00; //重新定时
	TH0 = 0xDC;
	cnt++;
	if(cnt == 100)//数100次,相当于1s
	{
		cnt = 0;
		LED1 = !LED1;
	}
}
  • 当中断开启时,每隔10ms就跳出主函数,执行中断函数里面的程序。
  • 定时的第一个10ms到了,执行中断函数,重新给定时器计时10ms,cnt = 1,灯还是灭
  • 定时的第二个10ms到了,执行中断函数,重新给定时器计时10ms,cnt = 2,灯还是灭
  • 定时的第100个10ms到了,执行中断函数,重新给定时器计时10ms,cnt = 100,灯变亮

这样就实现了间隔1s的亮灭。

2、外部中断

如上图所示,51单片机的外部中断一共有4种,他们分别为INT0~INT3。他们都被单片机公司规定在那个引脚上面了。在这里插入图片描述

例如:要使用外部中断0只能在P3.2引脚,要使用外部中断1只能在P3.3引脚。
要使用外部中断0:

EX0 = 1; 外部中断0的开关
EA = 1; 中断总开关

2.1、外部中断的触发

在这里插入图片描述

  • 如图外部中断有2种触发方式,下降沿/低电平触发。
  • 当外部中断0打开后,然后使用低电平触发。当给引脚P3.2一个低电平时,就触发了中断,然后单片机跳出主程序,执行中断函数里面的程序。

2.2、案例:使用外部中断0通过震动传感器控制LED1的亮灭

#include <REGX52.H>

sbit LED1    =   P3^7; //LED1连接P3.7口
sbit vibrate =   P3^2; //震动传感器连接P3.2口

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void EX0_Init()
{
	//外部中断0初始化
	EX0 = 1;
	EA = 1;
	//让低电平触发
	IT0 = 0;
}

int main(void)
{
	LED1 = 1;//先让灯灭
	EX0_Init();
	while(1)
	{
	
	}
	
}

void EX0_Handler() interrupt 0//定义中断函数
{
	LED1 = 0;
	Delay1000ms();
	LED1 = 1;
}

当产生震动时,给引脚P3.2口输入一个低电平,触发中断,执行中断函数里面的内容。LED1灯亮1s然后熄灭。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 扩展硬盘容量

根分区的硬盘容量不够了需要添加容量 扩展硬盘容量前提是需要虚拟机关机才能进行以下操作 在虚拟中找到虚拟机设置 >> 点击硬盘 >> 选择扩展 >> 输入自已要扩展的大小 >> 确定 这些设置好之后&#xff0c;启动虚拟机 fdisk /dev/sda n p 三个回车…

数据库作业d8

要求&#xff1a; 一备份 1 mysqldump -u root -p booksDB > booksDB_all_tables.sql 2 mysqldump -u root -p booksDB books > booksDB_books_table.sql 3 mysqldump -u root -p --databases booksDB test > booksDB_and_test_databases.sql 4 mysql -u roo…

在Windows中搭建Docker环境Docker Desktop(保姆级)

在Windows中搭建Docker环境Docker Desktop&#xff08;保姆级&#xff09; 文章目录 在Windows中搭建Docker环境Docker Desktop&#xff08;保姆级&#xff09;一、Docker Desktop是什么&#xff1f;二、Docker Desktop下载与安装①&#xff1a;下载②&#xff1a;安装③&#…

HTTP背后的故事:理解现代网络如何工作的关键(一)

一.HTTP是什么 概念 &#xff1a; 1.HTTP ( 全称为 " 超文本传输协议 ") 是一种应用非常广泛的 应用层协议。 2.HTTP 诞生与1991年. 目前已经发展为最主流使用的一种应用层协议. 3.HTTP 往往是基于传输层的 TCP 协议实现的 . (HTTP1.0, HTTP1.1, HTTP2.0 均为 T…

Python应用开发——30天学习Streamlit Python包进行APP的构建(15):优化性能并为应用程序添加状态

Caching and state 优化性能并为应用程序添加状态! Caching 缓存 Streamlit 为数据和全局资源提供了强大的缓存原语。即使从网络加载数据、处理大型数据集或执行昂贵的计算,它们也能让您的应用程序保持高性能。 本页仅包含有关 st.cache_data API 的信息。如需深入了解缓…

昇思25天学习打卡营第22天|GAN图像生成

今天是参加昇思25天学习打卡营的第22天&#xff0c;今天打卡的课程是“GAN图像生成”&#xff0c;这里做一个简单的分享。 1.简介 今天来学习“GAN图像生成”&#xff0c;这是一个基础的生成式模型。 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种…

【Django+Vue3 线上教育平台项目实战】构建课程详情页与集成视频播放功能

文章目录 前言一、课程列表页面a.后端代码b.前端代码 二、课程详情页面a. 视频播放功能的集成1.获取上传视频的链接地址2.集成在前端页面中1>使用vue-alipayer视频播放组件2>使用video标签 b. 页面主要内容展示1.后端代码1>分析表2>核心逻辑 2.前端代码3.效果图 前…

Java中的Filter流:理解与应用

Java中的Filter流&#xff1a;理解与应用 1、字节Filter流1.1 FilterInputStream1.2 FilterOutputStream 2、字符Filter流2.1 FilterReader2.2 FilterWriter 3、使用Filter流的好处 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java的…

算法思想总结:字符串

一、最长公共前缀 . - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string retstrs[0];size…

信通院全景图发布 比瓴科技领跑软件供应链安全,多领域覆盖数字安全服务

近日&#xff0c;中国信息通信研究院在2024全球数字经济大会—数字安全生态建设专题论坛正式发布首期《数字安全护航技术能力全景图》&#xff08;以下简称全景图&#xff09;。 比瓴科技入选软件供应链安全赛道“开发流程安全管控、交互式安全测试、静态安全测试、软件成分分…

【编程概念】生命周期

在进行系统编程时&#xff0c;经常遇到对象的生命周期这一概念。我理解的对象生命周期周期&#xff0c;就是一个对象从创建到销毁的所有状态&#xff0c;对象在不同的状态下会有不同的行为。 生命周期的概念&#xff0c;通常给出现在需要长时间运行的软件中&#xff0c;脚本工…

MySQL里的累计求和

在MySQL中&#xff0c;你可以使用SUM()函数来进行累计求和。如果你想要对一个列进行累计求和&#xff0c;可以使用OVER()子句与ORDER BY子句结合&#xff0c;进行窗口函数的操作。 以下是一个简单的例子&#xff0c;假设我们有一个名为sales的表&#xff0c;它有两个列&#x…

synwit其它应用

一、关于变量数组数量定义 在应用中&#xff0c;定义数组变量或其它变量时&#xff0c;需要注意不要超出MCU的RAM大小。如&#xff1a; 有客户应用SWM320系列是&#xff0c;定义了“uint32_t TEST_Buffer1[65536];”临时变量&#xff0c;编译过程中不会出错&#xff0c;但实际应…

敏捷的两种方式:Kanban和 Scrum

敏捷方法通过提供灵活、迭代的项目管理方法&#xff0c;改变了软件开发。敏捷方法中最著名的框架是 Kanban 和 Scrum。虽然这两种方法都旨在提高生产力和效率&#xff0c;但它们的运作原则和实践却截然不同。 在本文中&#xff0c;我们将深入探讨 Kanban 和 Scrum 的起源、主要…

[NSSRound#4 SWPU]1zweb

非预期解&#xff1a; 输入/flag&#xff0c;点击查看 预期解&#xff1a; upload.php <?php if ($_FILES["file"]["error"] > 0){echo "上传异常"; } else{$allowedExts array("gif", "jpeg", "jpg"…

STFT:解决音频-视频零样本学习 (ZSL) 中的挑战

传统的监督学习方法需要大量的标记训练实例来进行训练,视听零样本学习的任务是利用音频和视频模态对对象或场景进行分类&#xff0c;即使在没有可用标记数据的情况下。为了解决传统监督方法的限制&#xff0c;提出了广义零样本学习&#xff08;Generalized Zero-Shot Learning,…

掌握微信自动化操作,从此高效办公,效率直线上升!

你是不是每次回复客户消息&#xff0c;都要复制话术再粘贴发给不同的客户&#xff1f;每次统计微信数据都要手动统计很费时间&#xff1f; 试试这个多微管理神器&#xff0c;让你可以实现微信自动化操作&#xff0c;效率直线上升&#xff01; 1、自动通过好友并打招呼 系统可…

【Java】Idea运行JDK1.8,Build时中文内容GBK UTF-8编码报错一堆方块码

问题描述 在Windows系统本地运行一个JDK1.8的项目时&#xff0c;包管理用的Gradle&#xff0c;一就编码报错&#xff08;所有的中文内容&#xff0c;包括中文注释、中文的String字面量&#xff09;&#xff0c;但程序还是正常运行。具体如下&#xff1a; 解决 1. Idea更改编…

Java学习 - Spring 讲解

前言 为了解决我们开发者在 J2EE 开发时所遇到的众多问题&#xff0c;Rob Johnson 等人发起了 Spring 框架项目。Spring 是一个开源的 J2EE 应用程序框架&#xff0c;是针对 Bean 的生命周期进行管理的轻量级容器。它既可以单独用于构建程序&#xff0c;也能和当前众多的 Web …

《昇思25天学习打卡营第18天|基于MobileNetv2的垃圾分类》

MobileNetV2是一种轻量级的深度神经网络&#xff0c;设计用于移动和嵌入式设备。它的核心思想是通过深度可分离卷积&#xff08;Depthwise Separable Convolutions&#xff09;和倒残差结构&#xff08;Inverted Residuals&#xff09;来减少计算复杂度和模型参数量。其主要特点…