产品选型

单片机外部中断 51单片机外部中断0实例详解

小编 2024-10-08 产品选型 23 0

51单片机外部中断0实例详解

今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法。

1 51单片机的中断源

51单片机共有5个中断源,分别为:

外部中断0

定时器0中断

外部中断1

定时器1中断

串口中断

每一个中断都对应一个中断向量,中断向量表如下所示:

2 什么是中断事件

当中断发生时单片机将正在执行的程序暂时放下而去处理中断事件,当中断事件处理完毕后再接着去处理之前的事情,这样可以大大降低单片机的资源,提高执行效率。举个例子说明一下什么是中断:

我很喜欢打CS,每天晚上我都会抽时间打CS,但同时厨房里正在烧水,为了不使水烧干,我每隔5分钟就去厨房看一下水有没开,但这就错过了游戏老被别人爆头干掉,我很苦恼,怎么办。于是我在网上买了一个水烧开就会叫的水壶,这样我就不用每隔5分钟去厨房了从而可以专心的打游戏,只有听到水壶吱吱叫的时候,我去把水倒出来就可以了。

在这个例子里,打游戏就是主任务,水烧开就是中断,吱吱叫就是中断向量,听到吱吱响我就明白水烧开了,这时我要把打游戏这个主任务暂时放下,转而去处理水烧开了这个中断事件,水倒完后我就又回到了游戏这个主任务中。这样是不是提高了打游戏的效率呢?

3 中断的硬件实现

51单片机的外部中断0引脚接一只按键,该按键通过上拉电阻接到电源,即没有按键发生时单片机检测到的是高电平,当按键按下时单片机检测到的是低电平。单片机的P0.0引脚以灌电流的方式接了一只LED,当按键按下时LED灯点亮,没按键时LED灯熄灭。

4 中断的软件实现

单片机中断函数的写法比较固定,51单片机中断函数的写法如下:

void Initd() interrupt 0

其中:

void:为中断函数的返回类型,中断函数多为空类型;

Initd():是中断函数的名称,这个函数名符合C语言函数命名规范就可以,随便起;

interrupt:为51单片机中断的关键字,必须这么写(51单片机必须这么写);

0:为中断向量,该值详看第一个表格,如果是外部中断1就写2,如果是定时器1中断就写3;

中断函数不用在主函数中调用,只要中断事件发生,单片机自己主动会调到中断函数中。

该例子的函数如下所示:

5 仿真实现

当按键发生时,LED灯点亮,如下图所示。注意对比两种图中按键的状态

本订阅号致力于单片机、ARM等嵌入式软硬件的设计经验分享,秉承“人人都是电子设计经验的分享者”的理念,成功路上不孤单,我们一起努力。公众号:micropoint8,对于本节内容欢迎大家讨论。

4个中断应用实例讲解

【例1】 利用单片机的外部中断0响应按键开关的按键信号,当有按键按下时,单片机响应中断,并使内部某变量加1,硬件电路如图4-4所示。

图4-4 单片机外部中断检测按键电路图

C51源程序如下:

提示

将按键电路改为其他传感器电路,如光电传感器检测电路,霍尔传感器检测电路,热释电传感器检测电路等即可实现不同的检测控制功能。

【例2】 2个按健中断控制流水等灯的速度,按健K0用以减慢速度控制,按健K1用以加快速度控制,硬件电路如图4-5所示。

图4-5 流水灯控制电路图

C51源程序如下:

【例3】 利用单片机外部中断即时实现不同方式的流水灯控制,L2开关实现2只灯循环亮,L1开关实现1只灯循环亮,两个控制开关具有不同的优先级别,L2比L1具有更高的优先级。硬件电路如图4-6所示。

C51源程序如下:

图4-6 不同优先级别控制流水灯电路图

【例4】 利用单片机外部中断实现遥控解码。具体功能:通过电视机遥控器向单片机系统板上的一体化红外线接收头发射红外遥控编码信号,由于一体化红外线接收头的输出端与单片机的外部中断0相连,从而触发单片机产生中断,单片机根据红外遥控信号的组成对功能码进行识别,并通过P1口的发光二极管显示该功能码。

单片机与一体化红外接收头HS0038的引脚连接如图4-7所示,单片机与发光二极管的连接可以参照本章之前案例中的硬件电路图,这里省略未画出。

图4-7 HS0038引脚连接图

系统分析如下:

遥控编码脉冲信号通常由引导码、系统码、系统反码、功能码和功能反码组成。引导码由宽度为9ms的高电平和宽度为4.5ms的低电平组成。8位的系统码又称为识别码,主要是为了区分不同的控制系统,防止误动作。8位功能码也称为数据码,其代表相应的控制功能。8位的系统反码和功能反码的加入是为了校对传输过程中产生的差错提高抗干扰性能,遥控编码脉冲信号组成如图4-8所示。

图4-8 遥控编码脉冲信号的组成图

当遥控器上任意一个按键按下超过36ms时,LC7461芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个4.5ms的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。

解码的关键是如何识别“0”和“1”,采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。其串行码波形如图4-9所示。

图4-9 0和1的构成串行码波形图

从上图中可以发现,位“0”、“1”均以0.565ms的高电平开始,不同的是低电平的宽度不同,“0”为0.56ms,“1”为1.685ms,所以可以根据低电平的宽度区别“0”和“1”。如果从0.565ms高电平过后,开始延时,0.56ms以后,若读到的电平为高,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.125ms,否则如果该位为“0”,读到的已是下一位的低电平,因此一般取(1.125ms+0.56ms)/2≈0.84ms。

C51源程序如下:

相关问答

MCS-51 单片机外部中断 的触发方式如何设定和选择?

1、打开KeilμVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并添加STARTUP.A51文件,然后在当前目录下新建一个C...

51 单片机 外部中断 信号有哪两种可通过tcon中设置?

你说的应当是TCON,不是TCOB。TCON的IT0位和IT1位可以把两个外部中断(INT0和ⅠNT1)设置成两种中断触发方式,IT0负责INT0,IT1负责INT1。以IT0为例,当它等于...

51 单片机 的哪个口具有外 中断 的作用?

基本型mcs51单片机有两个外部中断引脚,分别是P3.2和P3.3。现在以stc为代表的生产厂家研发出了多款扩展型的51单片机,以STC8A单片机为例,又增加了P3.6和P3.7...

单片机 51,两个 外部中断 不能同时使用,就是这个开了,另外一个打开,之前的不能用?

同时有多个中断的话,就要考虑中断优先级的问题了。51单片机,默认的中断优先级是:外中断0>定时器0>外中断1>定时器1>串口由于低级中断不能打断高级...51单...

8051 单片机外部中断 ,有哪些激活方式?

有两种方式:下降沿触发方式和低电平触发方式80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL)、...

51 单片机 有哪几个内部 中断 ?

mcs-51单片机有5个中断源,分别为:1.外部中断0(INT0):默认中断级别最高,中断入口地址0003H;2.定时/计数器0(T1):默认中断级别第2,中断入口地址000BH;3.外....

89C51 单片机 中断 系统共有几个 中断 源?

89C51单片机的中断系统共有5个中断源。这些中断源分别是外部中断0(INT0)和1(INT1),定时器/计数器0(T0)和1(T1)溢出中断以及串行通信口中断(RI/TI)。IN...89C5.....

51 单片机 ,c语言,为什么写2个 外部中断 程序,就会有一个不工作呢?不是同时按的,不用考虑优先级?

首先两个中断是否都打开了,也就是EX0、EX1是否都等于1;另外看看触发方式:IT0、IT1是什么置;再看看你是否真的触发了,硬件上确认没有问题?第四,你将两个...

单片机 外部中断 程序,为什么不用写在主程序中?为什么中断函数不在主函数也可以运行?

中断用于执行优先级更高的任务中断顾名思义是“中途打断”的意思。举一个简单的例子:您正在和部门的同事在开会,突然老板进来找你,你就得暂停会议,离开会议...

51 单片机 外部中断 信号有哪两种可通过tcob中设置?

你说的应当是TCON,不是TCOB。TCON的IT0位和IT1位可以把两个外部中断(INT0和ⅠNT1)设置成两种中断触发方式,IT0负责INT0,IT1负责INT1。以IT0为例,当它等于...

猜你喜欢