51单片机-(中断系统)

51单片机-(中断系统)

了解51单片机中断系统、中断源、中断响应条件和优先级等,通过外部中断0实现按键控制LED亮灭为例理解中断工作原理和编程实现过程。

1.中断系统结构

89C51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。
在这里插入图片描述

1.1.外部中断0 (P3.2)

INT0: 通过TCOM中的IT0来选择其为下降沿有效还是低电平有效。

1.2.定时计数器中断T0

T0: 定时计数溢出中断标志TF0置1

1.3.外部中断1 INT1(P3.3)

INT1: 通过TCOM中的IT1来选择其为下降沿有效还是低电平有效。

1.4.定时计数器中断T1

T1: 定时计数溢出中断标志TF1置1

1.5. RI(SCON.0)或TI(SCON.1)

串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

2.中断请求标志TCON

76543210
字节地址:88HTF1TR1TF0TR0IE1IT1IE0IT0
  • IT0 (TCON.0),外部中断0触发方式控制位。
    当IT0=0时,为电平触发方式。
    当IT0=1时,为边沿触发方式(下降沿有效)。
  • IE0 (TCON.1) :外部中断0中断请求标志位。
  • IT1 (TCON.2):外部中断1触发方式控制位。
  • IE1 (TCON.3):外部中断1中断请求标志位。

  • TR0(TCON.4):T0运行控制位,其功能与TR1类同。
  • TF0 (TCON.5):定时/计数器T0溢出中断请求标志位。
  • TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
  • TF1 (TCON.7),定时/计数器T1溢出中断请求标志位。

3.中断允许控制(IE)

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

76543210
字节地址:A8HEAESET1EX1ET0EX0
  • EXO(IE.0),外部中断0允许位;
  • ETO(IE.1),定时/计数器T0中断允许位;
  • EX1(IE.2),外部中断0允许位;
  • ETI(IE.3),定时/计数器T1中断允许位;
  • ES(IE.4),串行口中断允许位;
  • EA (IE.7),CPU中断允许(总允许)位。

4.各中断源响应

4.1.中断优先级

有时同一优先级中的中断申请不止一个,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示
在这里插入图片描述
中断优先级有三条原则:

  • CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
  • 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
  • 正在进行的低优先级中断服务,能被高优先级中断请求所中断。

为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。

4.2.中断号

在这里插入图片描述

4.3.中断响应条件

  • 中断源有中断请求;
  • 此中断源的中断允许位为1;
  • CPU开中断(即EA=1)。

以上三条同时满足时,CPU才有可能响应中断。

4.4.开发中使用中断

你想使用的中断是哪个?选择相应的中断号;
你所希望的触发条件是什么?
你希望在中断之后干什么?

5.中断样例

5.1.外部中断0为例

通过按键按下出发外部中断0来控制LED反转亮灭。
在这里插入图片描述
(对照这张图好理解)

使用外部中断0的代码:
默认按键为高电平,选择用下降沿触发中断

#include "reg52.h"	
typedef unsigned int u16;
typedef unsigned char u8;

sbit led=P2^0;
sbit key3=P3^2;

//delay函数功能: 延时函数,i=1时,大约延时10us
void delay(u16 i)
{
	while(i--);	
}
//Int0Init函数功能:
void Int0Init()
{
	IT0=1//设置外部中断的触发方式下降沿触发
	EX0=1//开外部中断0允许位
	EA=1//打开总中断开关
}
//
void main()
{
	Int0Init();
	while(1);
}

//中断服务函数int0:
void int0 ()  interrupt 0
{
	delay(1000);
	if(key3==0)
	{
		led =~led;
	}
}

不使用中断的代码:

//实现现象:下载程序后按下K1按键可以对D11小灯状态取反。
#include "reg52.h"//此文件中定义了单片机的特殊功能寄存器
typedef unsigned int u16;//对数据类型进行声明定义
typedef unsigned char u8;

sbit k1=P1^0;	 //定义P10口是k1
sbit led=P0^0;	 //定义P00口是led

//函数名 : delay
//函数功能: 延时函数,i=1时,大约延时10us,用定时器延时更精确
void delay(u16 i)
{
	while(i--);	
}

//函数名 : keypros
//函数功能: 按键处理函数,判断按键K1是否按下
void keypros()
{
	if(k1==0)		  	//检测按键K1是否按下
	{	
		delay(1000);   	//消除抖动 一般大约10ms
		if(k1==0)	 	//再次判断按键是否按下
		{
			led=~led;	//led状态取反
		}
		while(!k1);	 	//检测按键是否松开
	}		
}

//主函数: main
void main()
{	
	led=0;
	while(1)       
	{	
		keypros();  //按键处理函数	
	}		
}

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

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

相关文章

【yolov8部署实战】VS2019+OpenCV环境部署yolov8目标检测模型|含详细注释源码

一、前言 之前一阵子一直在做的就是怎么把yolo项目部署成c项目,因为项目需要嵌套进yolo模型跑算法。因为自己也是本科生小白一枚,基本上对这方面没有涉猎过,自己一个人从网上到处搜寻资料,写代码,调试,期间…

Trie树(1.字符串统计____2.最大异或对求解)

Trie树 文章目录 Trie树Trie字符串统计正解 最大异或对1.暴力 (可以过6/10个测试点)2. Trie树模拟 用法:高效地存储和查找字符串集合的数据结构 存储形式: 将n个单词各个字符进行枚举,若是(根节点所指向包含字符c&…

【javaSE-语法】lambda表达式

【javaSE-语法】lambda表达式 1. 先回忆一下:1.1 接口不能直接通过关键字new进行实例化1.2 函数式接口1.3 匿名内部类1.31 匿名内部类在代码中长啥样?1.32 构造一个新的对象与构造一个扩展了某类的匿名内部类的对象,两者有什么区别&#xff1…

基于vue-office实现docx、xlsx、pdf文件的在线预览

概述 在做项目的时候会遇到docx、xlsx、pdf等文件的在线预览需求,实现此需求可以有多种解决方式,本文基于vue-office实现纯前端的文件预览。 效果 如下图,分别为docx、xlsx、pdf三种类型的文件在线加载后的效果。你也可以访问官方预览网址…

【CSP试题回顾】202312-2-因子化简

CSP-202312-2-因子化简 解题思路 本题要求实现的是素数分解,并检查每个素因子的指数是否大于等于k,满足条件则将其加入最终乘积中,最后输出这个乘积。如果没有任何素因子的指数大于等于k,则按照题目要求输出1。 输入测试用例数q&…

ESP32如何查看IIC等默认引脚?

在通过ESP32做项目的时候,用到了IIC,但是在查看芯片手册的时候,上面说又有引脚都可以作为IIC引脚 看到这个的时候,人麻了。当时只想着省事,想使用默认引脚,后来在寻找芯片库文件的时候,发现了&…

云计算与大数据课程笔记(一)云计算背景与介绍

如何实现一个简易搜索引擎? 实现一个简易的搜索引擎可以分为几个基本步骤:数据收集(爬虫)、数据处理(索引)、查询处理和结果呈现。下面是一个概括的实现流程: 1. 数据收集(爬虫&am…

数据结构 - Trie树(字符串统计、最大异或对)

文章目录 前言Part 1:Trie字符串统计1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2:最大异或对1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍Trie树的常见应用,包括:Trie…

Java 中对包含关系的判断

本文将为您详细讲解 Java 中对包含关系的判断,包括数组、字符串等,并提供相应的代码例子。 1. 数组包含关系判断 在 Java 中,数组包含关系判断通常使用循环来实现。以下是几种常见的判断方法: 示例 1:使用 for…

机器学习中类别不平衡问题的解决方案

类别不平衡问题 解决方案简单方法收集数据调整权重阈值移动 数据层面欠采样过采样采样方法的优劣 算法层面代价敏感集成学习:EasyEnsemble 总结 类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况 解决方案…

Linux虚拟文件系统管理技术

Linux虚拟文件系统管理技术 1. 虚拟文件系统的组成1.1 虚拟文件系统架构1.3 超级块(super block)1.4 索引节点(inode)1.4.1 inode怎样生成的?1.4.2 inode和文件的关系? 1.5 目录项(dentry)1.6 文件对象(file) 2. 进程与文件系统的关系3. 磁盘与文件系统的关系4. 常见的文件系…

基于springboot+vue的图书管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

测试面试精选题:可用性测试主要测试哪些方面,举例说明

1.界面设计: 评估软件的用户界面设计是否直观、美观、易于理解和操作。 测试用例:打开软件,查看界面布局是否合理,各个功能是否容易找到,是否符合用户习惯。 2.导航和布局: 评估用户在软件中导航和查找…

录制用户操作实现自动化任务

先上视频!! 流程自动化工具-录制操作绘制流程 这个想法之前就有了,趁着周末时间给它撸出来。 实现思路 从之前的文章自动化桌面未来展望中已经验证了录制绘制流程图的可行性。基于DOM录制页面操作轨迹的思路监听页面点击、输入事件即可&…

搭建 LNMP 架构

一 理论知识 (一)架构图 (二)CGI 由来 最早的Web服务器只能简单她响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html文件,但是后期随着网站功能增多网站开…

MATLAB基于隐马尔可夫模型-高斯混合模型-期望最大化的MR图像分割

隐马尔可夫模型是一种统计模型,它描述了马尔可夫过程,隐马尔可夫过程中包含隐变量,语音识别和词性自动标注等一些领域常常使用隐马尔可夫模型方法来处理。马尔可夫过程是一类随机过程,马尔可夫链是它的原始模型,马尔可…

Vue开发实例(一)Vue环境搭建第一个项目

Vue环境搭建&第一个项目 一、环境搭建二、安装Vue脚手架三、创建Vue项目 一、环境搭建 下载方式从官网下载:http://nodejs.cn/download/ 建议下载v12.16.0版本以上的,因为版本低无法创建Vue的脚手架 检验是否安装成功 配置环境变量 新增NODE_HOME&…

2024最新算法:冠豪猪优化算法(Crested Porcupine Optimizer,CPO)求解23个基准函数(提供MATLAB代码)

一、冠豪猪优化算法 冠豪猪优化算法(Crested Porcupine Optimizer,CPO)由Mohamed Abdel-Basset等人于2024年提出,该算法模拟冠豪猪的四种不同保护机制:视觉、听觉、气味和物理攻击。第一和第二防御技术(视觉和听觉)反…

论文阅读-CheckFreq:频繁、精细的DNN检查点操作。

论文名称:CheckFreq: Frequent, Fine-Grained DNN Checkpointing. 摘要 训练深度神经网络(DNNs)是一项资源密集且耗时的任务。在训练过程中,模型在GPU上进行计算,重复地学习权重,持续多个epoch。学习到的权重存在GPU内存中&…

地图资源工具新增 GEDI 2A 数据下载

GEDI 2A 是指"Global Ecosystem Dynamics Investigation 2A",这是一项由美国宇航局 (NASA) 所发起的卫星任务。GEDI 2A 任务的目标是通过激光雷达技术来监测和理解全球生态系统的动态变化。该技术可以提供高精度的地形和植被结构数据,对于研究…