51单片机的中断系统

news2024/9/20 23:20:26

文章目录

  • 51单片机的中断系统
    • 一、中断系统简介
      • 程序中断
      • 中断可以实现的主要功能
      • 中断执行过程
    • 二、51单片中断系统使用
      • 中断源
      • 中断控制
      • 中断允许
      • 中断判优
      • 中断函数定义
    • 三、中断系统使用案例
      • 例一:P3.2 引脚上接了一个按键,P0口连接了8个发光二极管, 要求每次按键均能改变发光二级管的亮灭。
      • 例二:要求使用定时器T0中断实现流水灯操作,流水频率为每0.5秒钟更替一次。

51单片机的中断系统

一、中断系统简介

程序中断

CPU 执行现行程序 的过程中,出现某些急需处理的异常情况或特殊请求,CPU 暂时中止现行程序,而转去对异常情况或特殊请求进行处理,处理完毕后再返回现行程序断点处,继续执行原程序。

在这里插入图片描述

中断可以实现的主要功能

  • CPU与I/O设备并行工作。
  • CPU切换到内核态,执行系统调用。
  • 实现多道程序切换、分时操作系统。
  • 人机交互。
  • 处理硬件故障和软件错误。

中断执行过程

在这里插入图片描述
更详细的中断系统介绍可以去学习《计算机组成原理》

二、51单片中断系统使用

中断源

8051单片机系统提供5个中断源,两个外部中断源 I N T 0 ‾ \overline{INT0} INT0 I N T 1 ‾ \overline{INT1} INT1定时/计数器T0和T1一个串口中断源
每个中断源都被分配了一个编号以及相应的中断服务程序入口地址,通过该入口地址中的跳转指令转到相应的中断服务程序。中断服务程序入口地址也被称作中断向量。

在这里插入图片描述
需要熟悉五个中断源的中断优先级和中断源编号。

中断控制

在8051单片机的定时/计数实现中,了解到定时/计数控制寄存器TCON高4位控制定时/计数器 T0T1启停或者判断溢出,低4位控制外部中断 I N T 0 ‾ \overline{INT0} INT0 I N T 1 ‾ \overline{INT1} INT1的工作方式。

  • IE0IE1分别是 I N T 0 ‾ \overline{INT0} INT0 I N T 1 ‾ \overline{INT1} INT1 中断请求标志位,外部中断发生后,该位自动置1,CPU响应中断后硬件清0。
  • IT0IT1分别是 I N T 0 ‾ \overline{INT0} INT0 I N T 1 ‾ \overline{INT1} INT1 中断触发方式设置位。
    • 例 IT0=0时,低电平触发外部中断 I N T 0 ‾ \overline{INT0} INT0
    • 例 IT0=1时,负跳变(前一机器周期高电平,后一机器周期低电平) 触发外部中断 I N T 0 ‾ \overline{INT0} INT0

在这里插入图片描述

中断允许

位序D7D6D5D4D3D2D1D0
位符号EAESET1EX1ET0EX0
置1允许中断中断允许总开关串行口中断INT1中断定时/计数器T1中断INT0中断定时/计数T0中断

中断判优

中断判优:系统运行过程中,当有多个中断源同时请求中断时,根据中断排队事先规定的次序判断中断请求的响应优先次序。
8051单片机可设置中断优先级寄存器IP的值控制中断优先级,对应位置1,设置为高优先级。两种中断优先级,高优先级>低优先级,同为高优先级或者低优先级时,从高到低按照

外部中断 I N T 0 ‾ \overline{INT0} INT0 > 定时/计数器T0 > 外部中断 I N T 1 ‾ \overline{INT1} INT1 > 定时/计数器T1 > 串行口中断。

在这里插入图片描述
中断优先级寄存器IP支持位寻址。

中断函数定义

void 函数名(void) interrupt n using m
{
	中断函数内容//尽量精简
}
  • 编译器会把该函数转化为中断函数,interrupt n表示中断源编号为n,中断源对应一个中断入口地址,而中断入口地址的内容跳转指令,转入本函数。
  • using m 用于指定本函数内部使用的工作寄存器组,m取值为0~3。该修饰符可省略,由编译器自动分配。
    中断函数必须由中断源触发而自动调用,不得直接调用,不用提前声明。中断函数要精简,避免因执行时间过长影响其它中断的响应。

三、中断系统使用案例

例一:P3.2 引脚上接了一个按键,P0口连接了8个发光二极管, 要求每次按键均能改变发光二级管的亮灭。

在这里插入图片描述

#include <reg51.h>
#include <stdio.h>
bit flag=0;
sbit KEY = P3^2;//INT0接收

void delay(){
	unsigned int i=0;
	for(;i<100;i++);
}
void main(void)
{
	unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x00};
	unsigned char cnt=0;
	P0=0xff;

	IT0=1;//TCON  负跳变触发方式
	IE=0x81;//IE 中断允许
	IP=0x00;//IP中断优先级
	while(1){
		if(flag==1){//出现中断
			delay();//防止按键抖动,键帽闭合和断开瞬间会有抖动现象,如果延迟后仍然闭合那么不是抖动
			if(!KEY){//键帽闭合,按键接电源的取反 , 外部中断 INT0  即 P 3.2口为低电平
				while(!KEY);//直到松开键帽,一直按着也不行啊
				P0=led[cnt];
				cnt=(cnt+1)%8;
			}
			flag=0;
			EX0=1;
		}
	}
}

void init1(void) interrupt 0 //定义外部中断 INT0 中断函数
{
	flag=1;//标明出现中断
	EX0=0;// 暂时不再允许出现新中断
}

例二:要求使用定时器T0中断实现流水灯操作,流水频率为每0.5秒钟更替一次。

在这里插入图片描述

#include <reg51.h>
#include <stdio.h>
unsigned char cnt=0;
unsigned char style=0;
unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x00};
void main(void)
{
	P0=0xff;
	TMOD=0x01;//设置定时/计数器工作方式 工作方式1
	TH0=75;//(65536-46083)/256初值
	TL0=253;//(65536-46083)%256;
	TR0=1;//启动定时器T0
	IE=0x82;//IE 中断允许
	IP=0x00;//IP中断优先级,全部为低优先级
	
	while(1){
		if(cnt==10){
			P0=led[style];
			style=(style+1)%8;
			cnt=0;
		}
	}
}

void init1(void) interrupt 1 //定义定时/计数器T0 中断函数
{
	cnt++;
	TH0=75;//方式1需要手动赋初值
	TL0=253; 
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASIC-WORLD Verilog(9)循环语句

写在前面 在自己准备写一些简单的verilog教程之前&#xff0c;参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好&#xff0c;奈何没有中文&#xff0c;在下只好斗胆翻译过来&#xff08;加了自己的理解&#xff09;分享给大家。 这是网站原文&…

java--ThreadLocal详解

目录 1.ThreadLocal的用途两个使用场景 1.1场景1 1.2两个线程分别用自己的SimpleDateFormat 1.3使用线程池创建1000个打印线程分别用自己的SimpleDateFormat 打印可以看到有很多处两个重复的日期 1.4加锁解决线程安全问题 1.5SimpleDateFormat小结 1.5更好的解决方案是使…

第5章:排序与分页

1.排序数据order by 1.1 排序规则 没有使用排序操作&#xff0c;查询返回的数据是按照添加数据顺序显示 ①&#xff1a;使用order by 子句排序&#xff0c;order by 子句在select语句的结尾 asc(ascend):升序 desc(descend):降序 ②&#xff1a;按照salary从高到低的顺序…

【Linux从入门到精通】Linux常用基础指令(上)

本篇文章会对Linux下的常用进行详细解释&#xff0c;并附加实例。通俗易懂&#xff0c;希望会对你有所帮助。由于内容较多&#xff0c;分为上下篇来讲解。 文章目录 一、什么是Linux的指令呢&#xff1f; 二、Linux下的常用指令 2、1 ls 指令 2、1、1 ls -a 2、1、2 ls -l 2、…

python开发构建基于CNN的人脸识别系统

卷积神经网络在图像处理领域中早就是独树一帜的存在&#xff0c;今天正好有时间就想着基于CNN开发构建一个人脸识别系统&#xff0c;首先看下效果图&#xff1a; 数据集来源于LFW数据集&#xff0c;简单看下本文使用的小批量的数据集如下&#xff1a; 一共有12个人的图像数据&a…

详解git(工作必备)

基本概念 Git 是一个开源的分布式版本控制系统&#xff0c;用以有效、高速的处理从很小到非常大的项目版本管理。 Git 的作用与好处是&#xff1a; 可以帮我们保存文件的所有修改记录&#xff0c;并且使用版本号进行区分&#xff0c;让我们随时可以浏览历史版本、对比不同版本…

Mysql列的完整性约束详解(设置表字段的非空约束(NOT NULL, NK))

设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 文章目录 系列文章目录一、设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 1.简介2.语句格式总结 一、设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 1.简介 当数据库表中的某个字段上的…

perf工具报错,升级ubuntu子系统linux内核

文章目录 1&#xff0c;运行perf工具报错1.1&#xff0c;可能的原因有&#xff1a; 2&#xff0c;我选择升级linux内核&#xff0c;和当前perf工具版本保持一致2.1&#xff0c;下载6.2.12内核源码2.2&#xff0c;安装6.2.12内核 1&#xff0c;运行perf工具报错 1.1&#xff0c;…

今天国际医药行业大型物流系统集成建设案例——广州医药智慧物流中心项目

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 近几年&#xff0c;带量采购常态化、制度化、医保支付方式改革、医保谈判药品“双通道”、线上购药医保结算等一系列政策加速药品流通行业变革步伐&#xff0c;由…

数据驱动的皮肤病变分类深度监测

文章目录 Data-Driven Deep Supervision for Skin Lesion Classification摘要本文方法Layer-Wise Effective Receptive Field (LERF)Object Size Approximation Using Activation MappingDeep Supervision Employment 实验结果 Data-Driven Deep Supervision for Skin Lesion C…

基于html+css的图展示33

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

15天学习MySQL计划-SQL优化/视图(进阶篇)-第八天

SQL优化 1.插入数据&#xff08;insert&#xff09; 1.批量插入 insert into 表名 values(值1,值2),(值1,值2),(值1,值2),(值1,值2) 2.手动提交事务 --查看当前提交的状态 select autocommit; --0代表手动提交 1代表自动提交 set autocommit 0; ​ commit #提交事务 3…

【计算机网络 - 第二章】应用层(更新中)

目录 一、应用层协议原理 1、网络应用程序体系结构 &#xff08;1&#xff09;客户/服务器模型&#xff08;C/S&#xff09; &#xff08;2&#xff09;P2P模型&#xff08;Peer-to-Peer&#xff09; 2、进程通信 &#xff08;1&#xff09;客户和服务器进程 &#xff0…

重载是什么?只有返回值类型不同算不算重载?为什么?

重载定义 首先&#xff0c;重载&#xff0c;从简单说&#xff0c;就是函数或者方法有相同的函数名&#xff0c;但是参数列表不相同的情形&#xff0c;这样的同名不同参数的函数或者方法之间&#xff0c;互相称之为重载函数或者重载方法&#xff0c;例子如下&#xff1a; 重载但…

机房一体化监测解决方案

随着5G、工业互联网等最新基建项目的扎实推进&#xff0c;我国数字经济发展也在不断开拓&#xff0c;很多地区也在积极建设新型信息基础设施&#xff0c;围绕规划、网络、用能等方面加大支持力度。在信息网络技术不断发展的背景下&#xff0c;各类网络设备机房广泛分布。但很多…

品牌商业笔记怎么写,投放笔记总结

小红书的用户当中有百分之五十以上都是来自一线城市&#xff0c;这证明着平台蕴藏着巨大的流量价值。这其中&#xff0c;品牌为了利益自然会去追求如何写商业笔记。今天就来和大家一起分享一下品牌商业笔记怎么写&#xff0c;在投放笔记的时候需要注意什么呢。 根据最新的数据显…

【22-23 春学期】人工智能基础--AI作业2-监督学习

【22-23 春学期】AI作业2-监督学习_HBU_David的博客-CSDN博客 用自己的语言&#xff0c;解释以下概念 1 结构风险最小化 2 正则化 3 线性回归 4 逻辑斯蒂回归 5 Sigmoid 与 SoftMax 函数 6 决策树 7 信息熵 条件熵 信息增益 8 线性判别分析 LDA 9 概率近似正确 PAC …

TCP分岔:优化云服务的性能

云服务器问题 对于搜索、电子邮件和社交网络等云服务&#xff0c;非常需要提供高水平的响应性&#xff0c;因此这些服务运行在自己的端系统&#xff08;包括其智能手机&#xff09;中 由于用户经常位于远离数据中心的地方&#xff0c;而这些数据中心负责为云服务管理的动态内…

刷爆朋友圈!前百度总裁陆奇最新AI重磅演讲:我的大模型世界观

文 / 高扬 陆奇的演讲刷屏了&#xff0c;我认真看了他的演讲稿&#xff0c;收获颇丰。 陆奇提到&#xff0c;人类社会的发展&#xff0c;大致可分为&#xff1a;农业化、工业化和数字化三个阶段。 在三个递进的阶段中&#xff0c;人类一直在探索如何减少烦琐且消耗能量的体力和…

紧密联结玩家 | 2023 Google 游戏开发者峰会

玩家的选择是对游戏莫大的认可&#xff0c;重视玩家反馈并和他们建立联系是您的游戏取得成功的关键。我们也在努力创造更多机会&#xff0c;让您的游戏从琳琅满目的列表中脱颖而出&#xff0c;帮助您吸引更多用户。 上篇内容我们介绍了帮助您优化游戏性能的几大功能更新&#x…