51单片机STC89C52RC——6.1 中断系统

2024-06-23 12:36

本文主要是介绍51单片机STC89C52RC——6.1 中断系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,文字层面理解 

        反正我看下面的几段文字时脑壳没有正常运转。一个头几个大

        中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。

        当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。        

        当CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。

二,图形代码结合理解中断

还是上图片吧,理解起来稍微容易下

再弄简单点

再入下面这两个图 

对于程序员可能还是要用代码才能够直观体现这个逻辑。

void main()
{		//主程序//......//暂停,跑去执行中断函数的代码//....中断函数执行中//恢复,继续执行主程序代码//......//主程序		
}void time0() interrupt 1 //定时器0中断函数 【友情提示:在执行这个中断函数的代码时,主函数的程序一直是暂停状态,直到函数执行结束,所以这里面的代码不要有死循环或者长时间执行的逻辑代码。否则下个中断进入时,这个中断还没执行完。这个函数里面的代码尽量少,逻辑尽量简单,执行时间尽量短】
{//中断程序		//.......//中断程序			
}

三,STC89C52中断资源

3.1  中断源个数:8个

外部中断0、

定时器0中断、

外部中断1、

定时器1中断、

串口中断、

定时器2中断、

外部中断2、

外部中断3

3.2 中断优先级个数:4个

        STC89C51RC/RD+系列单片机的所有的中断都具有4个中断优先级,对于这些中断请求源可编程为高优先级中断或低优先级中断,可实现两级中断服务程序嵌套。一个正在执行的低优先级中断能被高优先级中断所中断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指令才能响应新的中断申请。以上所述可归纳为下面两条基本规则:

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

        2.任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部的查询次序。这相当于在每个优先级内,还同时存在另一个辅助优先级结构,STC89C51RC/RD+系列单片机各中断优先查询次序如下:

3.3 中断号:

3.4 中断的结构

 3.5 中断的触发

3.6 中断的处理

当某中断产生而且被CPU响应,主程序被中断,接下来将执行如下操作:

1.当前正被执行的指令全部执行完毕;
2.PC值被压入栈;
3.现场保护;
4.阻止同级别其他中断;
5.将中断向量地址装载到程序计数器PC;6.执行相应的中断服务程序。

当某中断被响应时,被装载到程序计数器PC中的数值称为中断向量,是同该中断源相对应的中断服务程序的起始地址。各中断源服务程序的入口地址(即中断向量)为:

当“转去执行中断”时,引起中断的标志位将被硬件自动清零。由于中断向量入口地址位于程序存储器的开始部分,所以主程序的第1条指令通常为跳转指令,越过中断向量区(LJMPMAIN)。

四,如何开启中断

 对于初学中断者来说,这感觉就是要给自己插上飞天的翅膀。只要学会了开启各种系统的各种中断,基本上其他难题也就迎刃而解。

4.1  开启中断 interrupt 0 (用独立按键K3模拟INT0发生中断 控制LED 二进制方式亮灭)

我这里只简单举例开启STC89C52RC的 第一个中断。也就是  interrupt  0  。

不要以为写了 个 interrupt 0 的函数 系统就会自动开启中断。错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错错

先写个接收中断的函数 也就是 interrupt 0


/*** 函    数:中断函数* 参    数:无* 返 回 值:无*/
void time0() interrupt 0 
{P2++;/*分析:K3第一次按下:P2最开始是0xFF,加上1后,就变成了0x00,8个LED去亮起K3第二次按下:P2有0x00变成了0x01,第一个LED就会熄灭......*/
}

我们要想让程序发生中断,进入到我们些的这个中断函数 timer0 中。我们还得配置好寄存器的开关。我们看电路结构需要开启那些开关,如下图,我圈上的几个开关都给他合上。从优往左看。

PX0:优先级系统默认是最高级,不管

EA:全局中断开关合上  EA=1

EX0:允许INT0的中断进入。EX0=1;

IT0:设置低电平或者下降沿触发,我们先设置IT0=1(下降沿触发);

在看INT0 在板子上的针脚位置,他和P32是同一个。

 P32 我们在《51单片机STC89C52RC——2.1 独立按键控制LED亮灭》中有用到,我们用独立按键K3模拟INT0的中断触发。

按一下K3 就会触发中断。LED就会依次亮灭(注意LED的亮灭控制要写在中断函数中)

#include <REGX52.H> 
/*** 函    数:主函数* 参    数:无* 返 回 值:无*/
void main()
{	 P2=0xFF;//上电熄灭8个LEDIT0=1;	//外部中断 (低电平触发) 这里用独立按键P32 可模拟触发EX0=1;	//允许中断进入EA=1;	//打开全局中断开关while(1){}
}
/*** 函    数:中断函数* 参    数:无* 返 回 值:无*/
void time0() interrupt 0 
{P2++;/*分析:K3第一次按下:P2最开始是0xFF,加上1后,就变成了0x00,8个LED去亮起K3第二次按下:P2有0x00变成了0x01,第一个LED就会熄灭......*/
}

效果如下

分析:
    K3第一次按下:P2最开始是0xFF,加上1后,就变成了0x00,8个LED去亮起
    K3第二次按下:P2有0x00变成了0x01,第一个LED就会熄灭
    ......
    

外部中断 1  ,也就是INT1 引脚也可以用这个方式测试,INT1与P33是公用的,用独立按键K4可做中断测试。

4.2  开启中断 interrupt 1 (定时器Timer0/计数器 触发中断,实现LED闪烁)

如下图。要开启标红的这一路。配置还是比较多。不要嫌麻烦。挨着来。走一遍后,你会觉得像是打开了任督二脉。

按照图,还是从下往从右往左一次配置。

PX0: 优先级系统默认是最高级,不管

EA:全局中断开关合上  EA=1

ET0:允许Timer0/TF0 的中断进入。ET0=1;

我们再单独分析定时器器/计数器,

TR0:定时器开始运行;TR0=1;

TMOD:采用模式1(16位)

TL0=64535%256;(TL0=TIMS; [TL0只有8位,所以高位不会赋值过去,只有地位有效])

TH0=64536/256;(TH0=TIMS>>8;TH0也只有8位,TIMS右移8位后然低位溢出,高位就自动在低位了

每次中断发生后,都需要重新将TH0和TL0重新初始化。(在中断函数中重新赋值TH0和TL0)

#include <REGX52.H> 
/*宏定义定时器的初始值*/
#define TIMS (65536-12000000/12/1000)
unsigned int count=1000;//计数器  默认1000
void main()
{TMOD=0x01;	//设置模式1TL0=TIMS;	//设置定时器的低8位TH0=TIMS>>8;//设置定时器的高8位TR0=1;		//让定时器开始运行ET0=1;		//允许定时器发生中断溢出EA=1;		//打开全局中断while(1);	//主程序停止在此
}/*** 函    数:定时器中断函数* 参    数:无* 返 回 值:无*/
void timer0_interrupt() interrupt 1
{TL0=TIMS;		//重新初始化低位TH0=TIMS>>8;	//重新初始化高位if(count--==0)	//1毫秒*1000=1秒{	count=1000;	//重置计数P2_0=!P2_0;	//第一个LED 每秒熄亮一次}
}

 

有了以上两种 开启中断的方式,也就 

这篇关于51单片机STC89C52RC——6.1 中断系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087175

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

PS系统教程25

介绍软件 BR(bridge) PS 配套软件,方便素材整理、管理素材 作用:起到桥梁作用 注意:PS和BR尽量保持版本一致 下载和安装可通过CSDN社区搜索,有免费安装指导。 安装之后,我们打开照片只需双击照片,就自动在Ps软件中打开。 前提:电脑上有PS软件 三种预览格式 全屏预览 评星级 直接按数字键就可以 方向键可以更换图片 esc退出 幻灯片放

风水研究会官网源码系统-可展示自己的领域内容-商品售卖等

一款用于展示风水行业,周易测算行业,玄学行业的系统,并支持售卖自己的商品。 整洁大气,非常漂亮,前端内容均可通过后台修改。 大致功能: 支持前端内容通过后端自定义支持开启关闭会员功能,会员等级设置支持对接官方支付支持添加商品类支持添加虚拟下载类支持自定义其他类型字段支持生成虚拟激活卡支持采集其他站点文章支持对接收益广告支持文章评论支持积分功能支持推广功能更多功能,搭建完成自行体验吧! 原文

Django 路由系统详解

Django 路由系统详解 引言 Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。在 Django 中,路由系统是其核心组件之一,负责将用户的请求映射到相应的视图函数或类。本文将深入探讨 Django 的路由系统,包括其工作原理、配置方式以及高级功能。 目录 路由基础URL 映射路由参数命名空间URL 反向解析路由分发include 路由路由修饰符自

【图像识别系统】昆虫识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50

一、介绍 昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集(‘蜜蜂’, ‘甲虫’, ‘蝴蝶’, ‘蝉’, ‘蜻蜓’, ‘蚱蜢’, ‘蛾’, ‘蝎子’, ‘蜗牛’, ‘蜘蛛’)进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一

OSG数学基础:坐标系统

坐标系是一个精确定位对象位置的框架,所有的图形变换都是基于一定的坐标系进行的。三维坐标系总体上可以分为两大类:左手坐标系和右手坐标系。常用的坐标系:世界坐标系、物体坐标系和摄像机坐标系。 世界坐标系 世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考框架。从另一方面说,能够用世界坐标系来描述其他坐标系的位置,而不能用更大的、外部的坐标系来描述世界坐标系。世界坐标系也被广泛地

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读