8051单片机实战分析(以STC89C52RC为例) | 10 - 外部中断的使用

学习单片机的外部中断可以跳过吗 \\\插播一条:自己在今年整理一套单片机单片机相关论文800余篇论文制作思维导图原理图+源代码+开题报告+正文+外文资料想要的同学私信找我。图1外部中断及矩阵键盘中断信号示意图外部中断是单片机实时地处理外部事件的一种内部机制。当外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断完毕后返回被中断的程序处,继续执行下去。中断过程:1.中断当前程序并保护断点2.转入中断服务入口3.保护现场4.执行中断服务程序5.恢复现场6.中断返回中断的好处:1、 提高了CPU的效率C 阅读详情

在前面九篇博文中,我们认识到了一些基于IO口输入与输出的基础电子器件使用:
《8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED》
《8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁》
《8051单片机实战分析(以STC89C52RC为例) | 03 - LED流水灯》
《8051单片机实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动》
《8051单片机实战分析(以STC89C52RC为例) | 05 - 静态数码管驱动》
《8051单片机实战分析(以STC89C52RC为例) | 06 - 动态数码管驱动》
《8051单片机实战分析(以STC89C52RC为例) | 07 - 独立按键驱动》
《8051单片机实战分析(以STC89C52RC为例) | 08 - 矩阵按键驱动》
《8051单片机实战分析(以STC89C52RC为例) | 09 - LED点阵显示数字》
但现在我们要开始回到8051单片机内部,通过实战来认识它们的工作原理,你会发现通过它们可以去开发一些更有意思的东西!

这篇博文带领大家认识一下STC89C52RC单片机外部中断的使用,如果你不了解什么是中断,建议你先看这篇:
《STC89C52RC单片机额外篇 | 01 - 认识中断、中断源以及中断优先级》

1 中断系统结构

以下这张图是从中断引脚到中断入口所经过的通道:

从图中不难看出INT0与INT1是中断引脚,其中经过了TCON、IE、IP这些寄存器,因此我们在写程序时得把这些寄存器功能配置好,CPU才会按照我们的想法只执行!下面分别对这些寄存器进行介绍(稍微了解一下即可,忘记的时候再查)。

1.1 TCON寄存器

TCON(Timer Control Register),中文叫定时器/计数器控制寄存器,TCON寄存器是用于中断触发方式设置以及中断标志。

各寄存器位的作用如下:

TCON寄存器位作用
TF0(TF1)计数溢出标志位。当计数器计数溢出时,该位置1
TR0(TR1)定时器运行控制位。当TR0(TR1)=0停止定时器/计数器工作;当TR0(TR1)=1启动定时器/计数器工作
IE0(IE1)外中断请求标志位。当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0
IT0(IT1)外中断请求信号方式控制位。当IT0(IT1) =1 脉冲方式(后沿负跳有效);当IT0(IT1)=0电平方式(低电平有效)此位由软件置1或清0
TF0(TF1)计数溢出标志位。当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用

1.2 IE寄存器

IE(Interrupt Enable),中文叫中断允许寄存器,它的作用是控制所有中断源的开放或禁止,以及每个中断源是否被允许。

各寄存器位的作用如下:

IE寄存器位作用
EAEA = 0时,所有中断禁止(即不产生中断);EA = 1时,各中断的产生由个别的允许位决定
ES串行口RX/TX中断允许
ET1定时器T1中断允许
EX1外中断INT1中断允许
ET0定时器T0中断允许
EX0外部中断INT0中断允许

1.3 IP寄存器

IP(Interrupt Priority),中文叫中断优先级寄存器,它是用来设定各个中断源属于两级中断中的哪一级。

各寄存器位的作用如下:

IP寄存器位作用
PS串行口RX/TX中断优先
PT1定时器T1中断优先
PX1外中断INT1中断优先
PT0定时器T0中断优先
PX0外部中断INT0中断优先

2 原理图

下面我们进行例子来学习外部中断INT0与INT1的使用,例子很简单:使用外部按键模拟外部中断源,当发生外部中断的时候,我们给一个LED灯的电位值取反。下面我们通过原理图来看看要用到的引脚:

① 单片机:

② 独立按键:

③ 上拉电阻:

④ LED灯:

3 程序

① 中断服务函数:

我们知道我们编写的C程序,函数的执行是从main主函数开始执行,现在有了中断,自然就产生一个中断服务函数:

从图中我们可以知道单片机在发生中断的时候,程序的执行过程会从主程序A跳到中断服务程序B,在执行完中断服务程序B后,会返回到之前主程序A被中断打断处继续执行程序。

那么我们如何指定中断服务程序?具体参考以下模板(对于函数名你可以随便写,当然最好贴近有意义的命名)。

外部中断0的中断服务函数:

void Int0()	interrupt 0
{
	... // 中断服务程序中要执行内容
}

定时器0的中断服务函数:

void Timer0()	interrupt 1
{
	... // 中断服务程序中要执行内容
}

外部中断1的中断服务函数:

void Int1()	interrupt 2
{
	... // 中断服务程序中要执行内容
}

定时器1的中断服务函数:

void Timer1()	interrupt 3
{
	... // 中断服务程序中要执行内容
}

串行口的中断服务函数:

void Serial()	interrupt 4
{
	... // 中断服务程序中要执行内容
}

② 使用外部中断0控制LED:

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit k3=P3^2;  //定义按键K3
sbit led=P2^0;	 //定义P20口是led

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名         : Int0Init()
* 函数功能		   : 初始化外部中断0
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int0Init()
{
	//设置INT0,只有一个中断不需要考虑优先级
	IT0=1;//跳变沿出发方式(下降沿)
	EX0=1;//打开INT0的中断允许。	
	EA=1;//打开总中断	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	Int0Init();  //	初始化外部中断0
	while(1);		
}

/*******************************************************************************
* 函 数 名         : Int0()	interrupt 0
* 函数功能		   : 外部中断0的中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Int0()	interrupt 0		//外部中断0的中断函数
{
	delay(1000);	 //延时消抖
	if(k3==0)
	{
		led=~led;
	}
}

③ 使用外部中断1控制LED:

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit k4=P3^3;  //定义按键K4
sbit led=P2^0;	 //定义P20口是led

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名         : Int1Init()
* 函数功能		   : 初始化外部中断1
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int1Init()
{
	//设置INT1,只有一个中断不需要考虑优先级
	IT1=1;//跳变沿出发方式(下降沿)
	EX1=1;//打开INT1的中断允许。	
	EA=1;//打开总中断	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	Int1Init();  //	初始化外部中断1
	while(1);		
}

/*******************************************************************************
* 函 数 名         : Int1()	interrupt 2
* 函数功能		   : 外部中断1的中断服务函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Int1()	interrupt 2		//外部中断1的中断服务函数
{
	delay(1000);	 //延时消抖
	if(k4==0)
	{
		led=~led;
	}
}

④ 简要分析:

  1. 主程序首先执行中断初始化函数。
  2. 在中断初始化函数中,因为8051单片机这些中断相关的寄存器支持位操作,所以直接以位操作的形式写入TCON、IE这些寄存器,分别设置中断触发方式与打开中断接口,以及总中断,最好的理解回顾之前的中断系统结构图。
  3. 在中断服务程序中,我们在延时消除按键抖动后再进行按键判断,确认按键按下后进行LED电位反转。
8051外部中断1解析 程序实现的功能: 在实验板上左下方有一个黑色的独立按键(K4), 当我们按下它时, D1(LED灯)的状态就会取反. (外部中断1和外部中断0在处理上类似, 红色的部分为不同之处) 中断处理程序标号: 外部中断0 -----------> 0 定时器0中断 -----------> 1 外部中断1 -----------&... 阅读详情

相关推荐

8051单片机实战分析(以STC89C52RC为例) 10 - 外部中断的使用_双外部中断stc89c52rc单片机接线

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!觉得这些内容对你有帮助,可以+V:Vip1104z获取!!!(备注:嵌入式)**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!更多资料点击此处获qu!!

2401_83641491的博客 953

51单片机2个外部中断的应用

;51单片机的P1口上接有8只LED。;在外部中断0输入引脚P3.2接有一只按钮开关K1。;在外部中断1输入引脚P3.3接有一只按钮开关K2。;要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,;仅K1(P3.2)按下时,左右4只LED交替闪烁。;仅按下K2(P3.3)时,P1口的8只LED全部闪亮。;两个外中断的优先级相同。;===============================

做而论道的博客 1万+

8051单片机实战分析(以STC89C52RC为例) 10 - 外部中断的使用_双外部中断stc89c52rc单片机接线(1)

下面我们进行例子来学习外部中断与的使用,例子很简单:使用外部按键模拟外部中断源,当发生外部中断的时候,我们给一个LED灯的电位值取反。下面我们通过原理图来看看要用到的引脚:① 单片机: ② 独立按键: ③ 上拉电阻: ④ LED灯:① 中断服务函数:我们知道我们编写的C程序,函数的执行是从main主函数开始执行,现在有了中断,自然就产生一个中断服务函数: 从图中我们可以知道单片机在发生中断的时候,程序的执行过程会从主程序A跳到中断服务程序B,在执行完中断服务程序B后,会返回到之前主程序A被中断打断处继续执行

2401_83817769的博客 641

如何使用51单片机实现两个以上外部中断

在STC89C51单片机中,外部中断的个数是两个,通过外部中断引脚P3.2和P3.3实现。然而很多现实场景需要有两个以上的外部中断,这时候单片机自带的外部中断端口就不够用了。那么,该怎么解决这个问题呢?本文应用89C51单片机为例,介绍一种简单的通过外部中断0实现3个外部按键中断的方案。 这里采用三个K1~K3按键分别控制通风电机、采光控制电机及水泵电机开关。当按下按键K1启动通风电机;按下按键K2启动采光电机,按下按键K3启动水泵电机。 拓展中断设计思路:外部中断由P3.2或者P3...

9600

51单片机(STC89C52RC版本)学习笔记(更新中...)

B站江协科技《51单片机入门教程-2020版 程序全程纯手打 从零开始入门》课程学习笔记,包含LED,独立按键,数码管,LCD1602,矩阵键盘,定时器,串口通信,蜂鸣器等模块。

weixin_43364551的博客 2569

STC89C52RC单片机实现闪烁灯的几种编程实现。

本文用STC89C52RC单片机实现LED灯的闪烁,串联点亮LED程序所用到的知识。我们会讲到硬件原理图,讲解LED灯如何连接到单片机上,介绍单片机IO口的特性,什么是双态口,什么是三态口!我们会介绍STC89C52RC这一串名字的含义,会讲到不同领域芯片所要求的温度参数。讲完这些就可以选择多种方式实现闪烁LED。

weixin_51624736的博客 4281

c8051之外部中断实验

在聊到外部中断之前我们首先要理解中断的概念: 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。 简单来说中断就是当达到某种条件,单片机暂停当前正在做的事情,而去处理中断程序。 本次我们来简单谈一下,c8051的外部中断,下面我们看一下在数据手册中的外部中断说明 此次实验我们用到的是外部中断INT0,可以看出外部中断0可以配置为低电平触发,和下降沿触发,本次我们用到下降沿触发。 下面我们看一下配置

NMarshal的博客 3710

8051单片机(STC89C52)倒计时器

#include <STC89C5xRC.H> void delay()//用定时器0实现10ms精准定时 { TMOD = 0x01; TH0 = 0xd8; TL0 = 0xf0;//65536 - 10000 = 55536 TF0 = 0;//置溢出标志位为0 TR0 = 1;//开启定时器0 while(TF0 == 0); TR0...

weixin_42048463的博客 3867

你知道什么是STC89C52RC吗?

STC89C52RC是一种基于8051架构的单片机芯片,由中国的STC公司生产。它包含52KB的闪存程序存储器,1KB的RAM数据存储器,以及一系列的外设接口,例如串口、定时器、计数器等等,可广泛应用于工业自动化、仪器仪表、智能家居、电子产品等领域。STC89C52RC具有低功耗、高性能和高可靠性等优点,成本相对较低,因此在中国的嵌入式系统开发领域得到了广泛应用。你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!” />你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

w5jaLw的博客 5552

51单片机嵌入式开发:7、 STC89C52RC 外部中断INT0和INT1 操作

STC89C52是一款常用的单片机型号,它基于8051内核,并具有一些扩展的功能和特性。中断源:STC89C52支持多种中断源,包括外部中断、定时器中断、串口中断和其他特定硬件中断。具体的中断源数量和类型取决于单片机的具体型号和配置。中断向量表:STC89C52使用中断向量表来管理中断服务例程。中断向量表是一组特定的内存地址,每个地址对应一个中断源的中断服务例程入口点。当中断触发时,单片机会根据中断源的标识符查找相应的中断向量表地址,并跳转到对应的中断服务例程。

sinat_30943509的博客 2000

【Codex安装使用手册】

Codex安装部署使用教程

qq_43392230的博客 4928

stc89c52单片机

另外,T2EX的负跳变使T2CON中的EXF2置位,EXF2也像TF2一样能够产生中断(其向量与定时器2溢出中断地址相同,定时器2中断服务程序通过查询TF2和EXF2来确定引起中断的事件),捕获模式。如果定时器2中断被使能,则当TF2或EXF2置1时,定时器2递增计数,计数到0FFFFH后溢出并置位TF2,还将产生中断(如果中断被使能)。在访问8位地址的外部数据存储器(如执行“MOVX @R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。

weixin_62428951的博客 1万+

CKEditor5富文本编辑器 - 视频引入、预览及自定义toolbar

文章目录定义遇到的问题视频部分引入媒体url失败原因解决方法:自定义视频provider视频预览及页面不显示视频问题解决方案:H5 \标签如何移除toolbar中的部分插件 一个小后端很少接触前端框架,只能在知识的海洋中漂泊。。。 定义 <script src="https://cdn.ckeditor.com/ckeditor5/16.0.0/classic/ckeditor.js"&gt...

huhui806的博客 8196

8051单片机实战分析(以STC89C52RC为例) | 12 - 串行口中断的使用

在第一篇到第九篇博文中,我们认识到了一些基于IO口输入与输出的基础电子器件使用: 《8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED》 《8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁》 《8051单片机实战分析(以STC89C52RC为例) | 03 - LED流水灯》 《8051单片机实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动》 《8051单片机实战分析(以STC89C52RC为例) | 05 - 静态数.

Systemcall名屋 2544

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1352

全志T113 Tina5.0开发:(一)添加自己的板级支持包

3.验证 先执行 source build/envsetup.sh ,然后lunch,下图可见9就是我们自己添加的板子。2. 1)修改 t113-evb1.mk重命名为t113-ws_devboard。我使用的spinand,只需要修改openwrt里面的文件即可。以下内容仅作为自己笔记,如果错误欢迎留言指出。修改t113-ws_devboard。

u014428915的博客 1163

8051单片机实战分析(以STC89C52RC为例) | 11 - 定时器中断的使用

在第一篇到第九篇博文中,我们认识到了一些基于IO口输入与输出的基础电子器件使用: 《8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED》 《8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁》 《8051单片机实战分析(以STC89C52RC为例) | 03 - LED流水灯》 《8051单片机实战分析(以STC89C52RC为例) | 04 - 蜂鸣器驱动》 《8051单片机实战分析(以STC89C52RC为例) | 05 - 静态数.

Systemcall名屋 3289

EtherCAT-7 从站代码移植-SPI

STM32F103 + AX58100,从站代码移植。

tianya_xuan的博客 3564

51单片机(二)8051内核及STC89C52介绍

8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔公司于1981年制造。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,如Atmel、飞利浦、深联华等公司,相继开发了功能更多、更强大的兼容产品。 8051单芯片是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号,用以来产生各种动作周期及同步信号。在8051单片机中已内建时钟产生器,在使用时只需接上晶振及电容,就可以让系统产生正确的时钟信号

weixin_51452951的博客 1万+

微信小程序 - 真机调试请求异常 Provisional headers are shown,微信小程序开发者工具调试没问题就真机测试时出现请求报错(微信小程序请求接口提示Provisional h)

微信小程序开发 Request Headers: Provisional headers are shown,微信开发工具请求正常,真机调试和上线之后出现 Provisional headers are shown,微信小程序开发工具调试没问题,真机调试Provisional headers are shown,在开发工具调试,请求正常没问题,使用真机调试,请求异常,微信小程序真机调试时后台是本地服务器,显示“Provisional headers are shown”问题解决,微信小程序websocket

🏆 前端领域优质创作者 1万+

Windows VHD的新玩法——设置任意挂载点

vhd 挂载隐藏的虚拟分区 详细过程 分别使用CreateVirtualDisk和OpenVirtalDisk来创建和打开虚拟磁盘文件。 使用AttachVirtualDisk,必须具有管理员权限才能成功执行此步骤。 初始化设备(延时Sleep),获取附加 VHD 的 UNC 路径:\\.\PhysicalDrive# 。 使用FindFirstVolume/FindNextVolume枚举已安装的卷以查找虚拟磁盘上的卷。 使用SetVolumeMountPoint将卷挂载到文件夹或者设

圣三一 2583

STC89C52单片机

STC89C52单片机,STC89C52 STC89C52 看到涛哥这篇文章了,纪念一下还在搞嵌入式的我们! 硬件实物图 实物抽象化的图为: 这个STC89C52名字是什么意思呢? STC89C52简介: 片内CPU的内核是8051 片内含8K字节的的可反复擦写1000次的Flash存储器(也就是上面所说的程序空间) , 相当于计算机的硬盘。 片内含256字节的随机存取数据存储器(RAM), 相当于计算机的内存。 最后, 我们以STC89C52RC为例, 来看看STC89C52RC的内部组成: 版权

嵌入式与人工智能 1万+

在hyper-v管理器中修改WSL虚拟交换机后,打开wsl闪退

此次是因为修改了WSL虚拟交换机造成的wsl打不开或闪退,还有一种可能是关闭了hyper-v造成了wsl。

DN金猿的博客 1170

STC89C52RC最小系统板

STC89C52RC最小系统板硬件设计(原理图+PCB) Author:Once Day“漫漫长路,有人对你微笑过嘛…” Solemnly declare:知识产权、正确性等皆未明确,因此仅且只能供学习交流之用,切莫他用!!!本文章所有者不对任何人因使用本文章内容引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 Date:北部市保留地,2022年5月9日 1.概述 STC89C52RC是宏晶科技旗下的产品,属于C51单片机的一员,使用较广泛。 官方

梅花香自苦寒来,宝剑锋从磨砺出。 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: STC89C52RC单片机额外篇 | 01 - 认识中断、中断源以及中断优先级
下一篇: 8051单片机实战分析(以STC89C52RC为例) | 11 - 定时器中断的使用
嵌入式逍遥
嵌入式逍遥 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄9年 7万+粉丝 237原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值