51单片机基础学习(九):中断

发布者:RainbowJoy最新更新时间:2025-09-19 来源: cnblogs关键字:51单片机  中断 手机看文章 扫描二维码
随时随地手机看文章

一、“中断”与定时器的关系


        前面我们学习过了定时器,实际上定时器的一般用法都是采取中断的方式进行实现的。需要明确的是,定时器和中断不是一回事,定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断是单片机中的一种运行机制。在单片机系统中,中断机制允许处理器在执行主程序的过程中,暂停当前任务,转去处理中断事件。处理完毕后,再返回原来暂停的地方继续执行任务。这种机制可以实现实时响应,提高系统的实时性。


二、“中断”相关概念


1. 中断:是指在突发事件到来时先中止当前正在进行的工作,转而去处理突发事件,待突发事件处理完成后,再返回到原先被中止的工作处,继续进行随后的工作。

        中断源:中断管理系统能够处理的突发事件。


        中断请求:中断源向CPU提出的处理请求。


        中断响应:由中断管理系统处理突发事件的过程。


        中断函数:针对中断源和中断请求提供的服务函数。


        中断嵌套:在中断服务过程中执行更高级别的中断服务。


2. 中断标志位与中断使能位


        ① 中断标志位:中断标志位是用于表示中断请求的寄存器位。当中断源产生中断请求时,相应的中断标志位会被设置为 1。中断处理程序通过检查这些标志位来确定哪个中断源产生了中断,然后执行相应的中断服务程序。


        ② 中断使能(允许)位:中断使能位是用于控制中断请求是否被响应的寄存器位。当中断使能位为 1 时,中断请求会被响应并产生中断标志位;当中断使能位为 0 时,中断请求不会被响应。

3. 中断源


        ① 外部中断:中断源信号由外部引脚P3.2和P3.3输入。


        ② 内部中断:中断信号由内部单元产生。

4. 中断号


        '中断号'是系统分配给每个中断源的代号,用于识别和处理不同类型的中断事件。中断号的主要作用是在中断处理过程中,CPU通过中断号来识别不同的中断源,以便采取适当的处理措施。在采用向量中断方式的中断系统中,CPU会根据中断号找到对应的中断服务程序的入口地址,实现程序的转移。这样,每个中断源都可以独立地触发中断事件,并且CPU可以准确地识别和处理这些事件。


        简而言之,“中断服务程序”与“中断号”之间的关系,就像是“子程序”与“函数名”之间的关系。在执行“子程序”时,CPU根据“函数名”进行跳转;在执行“中断服务程序”时,CPU根据“中断号”查找相应的中断服务程序。

        上述的中断函数名可进行自定义,只要符合函数的命名规则即可。


三、与“中断”相关的寄存器


        串行控制寄存器SCON会在后面的“串口”部分进行讲解。


1. 定时器控制寄存器TCON的IE1、IT1、IE0、IT0位寄存器


        IE1:外部中断1(INT1/P3.3)的中断请求标志位。IE1=1,外部中断向CPU请求中断,当CPU响应该中断时由硬件清“0”。(IE:Interrupt Enable)

        IT1:外部中断1触发方式控制位。IT1=0时,外部中断1为低电平触发方式,当INT1(P3.3)输入低电平时,将IE1置1 。当IT1=1时,外部中断1为下降沿触发方式,当INT1(P3.3)输入信号出现下降沿时,将IE1置1。(IT:Interrupt Type)


        IE0:外部中断0(INT0/P3.2)的中断请求标志位。IE0=1,外部中断向CPU请求中断,当CPU响应该中断时由硬件清“0”。

        IT0:外部中断0触发方式控制位。IT0=0时,外部中断0为低电平触发方式,当INT0(P3.2)输入低电平时,将IE0置1 。当IT0=1时,外部中断0为下降沿触发方式,当INT0(P3.2)输入信号出现下降沿时,将IE0置1。


        当两外部中断采用低电平触发的方式时,外部中断源(输入到INT0/1)必须一直保持低电平有效,直到该中断被CPU 响应,同时在该中断服务程序执行完之前,外部中断源必须被清除(P3.2/P3.3要变为高电平),否则将产生另一次中断。(后面会在“定时器&中断的应用”中,会对“外部中断的触发方式”进行详细介绍。)


2. 中断使能(允许)寄存器IE (IE:Interrupt Enable) —— 可位寻址

        EA:CPU的总中断允许控制位,。EA=0,CPU屏蔽所有的中断申请;EA=1,CPU开放中断,各中断的产生由各自的允许位决定。EA的作用是使中断允许形成两级控制,即各中断源首先受EA控制,其次还受各中断源自己的中断允许位控制。

        ET2:定时/计数器2溢出中断允许位(8052用)。ET2=1,允许T2中断;ET2=0,禁止T2中断。

        ES:串行口1中断允许位。ES=1,允许串行口1中断;ES=0,禁止串行口1中断。

        ET1:定时/计数器T1的溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。

        EX1:外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。

        ET0:定时/计数器T0的溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。

        EX0:外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。


EA:Enable All        ET:Enable Timer        ES:Enable Serial        EX:Enable External


3. 中断优先级寄存器IP (IP:Interrupt Priority) —— 可位寻址

        PT2:定时/计数器T2的中断优先级控制位。只用于52子系列。

        PS:串口中断优先级控制位。PS=1,串行口中断定义为高优先级中断;PS=0,串行口中断定义为低优先级中断。

        PT1:定时/计数器T1的中断优先级控制位。PT1=1,定时/计数器T1定义为高优先级中断;PT1=0,定时/计数器T1定义为低优先级中断。

        PX1:外部中断1的中断优先级控制位。PX1=1,外部中断1定义为高优先级中断;PX1=0,外部中断1定义为低优先级中断。

        PT0:定时/计数器T0的中断优先级控制位。PT0=1,定时/计数器 T0定义为高优先级中断;PTO=0,定时/计数器T0定义为低优先级中断。

        PX0:外部中断0的中断优先级控制位。PX0=1,外部中断0定义为高优先级中断;PX0=0,外部中断0定义为低优先级中断。


PS:Priority Serial        PT:Priority Timer        PX:Priority External


四、中断优先级


        1. 抢占优先级:


        上面的IP寄存器的每一位,表示对应中断的抢占优先级,每一位的复位值都是0,当把某一位设置为1的时候,这一位的优先级就比其他位的优先级高了。比如设置了PT0位为1后,当单片机在主循环或者任何其他中断程序中执行时,一旦定时器T0发生中断,作为更高的优先级,程序马上就会跑到T0的中断程序中来执行。反过来,当单片机正在T0中断程序中执行时,如果有其他中断发生了,还是会继续执行T0中断程序,直到把T0中的中断程序执行完后,才会去执行其他中断程序。标志位被置1的中断源(抢占优先级),其优先级还按照固有优先级进行排序。


        当进入低优先级中断中执行时,如又发生了高优先级的中断,则立刻进入高优先级中断执行,处理完高优先级中断后,再返回处理低优先级中断,这个过程就称为中断嵌套,也称为抢占。所以抢占优先级的概念就是,优先级高的中断可以打断优先级低的中断的执行,从而形成嵌套。当然反过来,优先级低的中断是不能打断优先级高的中断的。


        2. 固有优先级:


        在上面“中断相关概念”的介绍中,已经给出了中断的默认优先级(固有优先级)。注意,在中断优先级的编号中,一般都是数字越小优先级越高。从表中可以看到一共有1~5共5级的优先级,这里的优先级与抢占优先级的一个不同点就是,它不具有抢占的特性,也就是说即使在低优先级中断执行过程中又发生了高优先级的中断,那么高优先级的中断也只能等到低优先级中断执行完后才能得到响应。(此处提到的“高优先级”,指固有优先级中的高优先级。)


        3. 既然固有优先级不能抢占,那么这个优先级有什么用呢?


        多个中断同时存在时的仲裁。比如说有多个中断同时发生了,当然实际上发生这种情况的概率很低,但另外一种情况就常见得多了,那就是出于某种原因暂时关闭了总中断,即EA=0,执行完一段代码后又重新使能了总中断,即 EA=1,那么在这段时间里就很可能有多个中断都发生了,但因为总中断是关闭的,所以它们当时都得不到响应,而当总中断再次使能后,它们就会在同一时间请求响应,很明显,这时也必需有个先后顺序才行,这就是非抢占优先级的作用,谁优先级最高先响应谁,然后按编号排队,依次得到响应。


中断优先级处理的原则:


        ① CPU同时接收到几个中断时,首先响应级别最高的中断请求。


        ② 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。


        ③ 正在进行的低优先级中断服务,能被高优先级中断请求所中断。


关键字:51单片机  中断 引用地址:51单片机基础学习(九):中断

上一篇:51单片机基础学习(十):定时器&中断的应用
下一篇:51单片机基础学习(八):定时/计数器

推荐阅读最新更新时间:2026-03-25 12:44

51单片机中断系统扫盲行动
中断技术概述 中断系统作用:单片机能够及时地响应和处理单片机外部事件或内部事件所提出的中断请求。 CPU正在执行程序时,单片机外部或内部突然紧急要去先处理某一事件,请求CPU现在马上去处理。CPU就会暂时放下手头上的工作,转到中断服务处理程序处理那件突然紧急的事情。处理完该事件后,再回到停止时的那个状态接着做原来的工作,这称为中断。 CPU处理事件的过程,称为CPU的中断响应过程。 中断系统就是能够实现中断处理功能的部件;中断请求源就是能产生中断的请求源。 中断源向CPU提出的处理请求,称为中断请求(或中断申请)。 具体的流程是:进入中断→保护现场→中断处理→恢复现场→中断返回 中断方式优点:大大地提高了CPU的工作效率。 \插
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第4期单片机的外部中断实验仿真
源代码: #include "reg52.h" #include "intrins.h" typedef unsigned char u8; typedef unsigned int u16; u8 code table = {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; u8 num; sbit dula = P2^6; sbit wela = P2^7; sbit key = P3^2; sbit
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第5期单片机的定时器中断实验仿真
源代码: #include reg51.h typedef unsigned char u8; typedef unsigned int u16; sbit dula = P2^6; sbit wela = P2^7; sbit led = P1^0; u8 code table ={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; u8 num,num1,num2,sh
[单片机]
51单片机day4——外部中断控制LED灯亮灭
/*** *外部中断——外部中断0和外部中断1控制LED小灯 *接口: * LED1-2接单片机P2^0-P2^2管脚 * 独立按键K1接单片机P3^2口(单片机外部中断0在P3^2口) * 独立按键K2接单片机P3^3口(单片机外部中断1在P3^3口) *原理: * 1.在设置好TCON(IT0/1=0/1)寄存器,IE寄存器后当设定的外部中断电平被拉低时会执行中断程序,中断程序执行完毕后回到原程序执行处继续执行 * 2.外部中断TCON设置:IT0/1=0(低电平触发:持续低电平则一直持续触发中断)/1(负跳沿触发:电平被拉低后执行中断程序,中断程序执行完毕后返回之前程序运行到的位置) *思路: * 1.LED2和
[单片机]
51单片机笔记6 -- 中断1 寄存器、定时器
定时器与中断是整个单片机学习过程中比较重要的知识点,而且应用非常广泛,几乎可以说没有中断的程序都是新手练习用的。学习中断之前先了解一下寄存器这个概念,寄存器简单来说就是个宾馆,可以暂时存储一些数据,脉冲信号等等,在80C51中有一类寄存器叫做特殊功能寄存器,总共定义了21个,在80C52中又增加了5个,所以,80C52中总共有26个。今天讲一下里面几种常用的寄存器,第一个是TMOD寄存器,这个寄存器既可以做定时器也可以做计数器,总共有4中工作模式,前期用的比较多的是模式1,写成TMOD = 0X01;需要注意一下,这些寄存器的名称是不用定义的,也不可以更改。 选择模式的方法很简单,就是把M1,M0组合起来,图片已经给出,用到哪
[单片机]
51单片机基础学习(九):中断
一、“中断”与定时器的关系 前面我们学习过了定时器,实际上定时器的一般用法都是采取中断的方式进行实现的。需要明确的是,定时器和中断不是一回事,定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断是单片机中的一种运行机制。在单片机系统中,中断机制允许处理器在执行主程序的过程中,暂停当前任务,转去处理中断事件。处理完毕后,再返回原来暂停的地方继续执行任务。这种机制可以实现实时响应,提高系统的实时性。 二、“中断”相关概念 1. 中断:是指在突发事件到来时先中止当前正在进行的工作,转而去处理突发事件,待突发事件处理完成后,再返回到原先被中止的工作处,继续进行随后的工作。 中断源:中断管理系统能够处
[单片机]
<font color='red'>51单片机</font>基础学习(九):<font color='red'>中断</font>
51单片机基础学习(十):定时器&中断的应用
一、前期准备 1. 定时器工作模式的设置 由于定时器工作模式寄存器TMOD是不允许位寻址的,所以对在两个定时器模式的设置上存在的一些技巧进行介绍。 ① 直接对寄存器TMOD进行十六进制形式的赋值。 ② 对寄存器进行“按位与 按位或”形式的赋值。 例如:定时器1保持原来的工作方式,使定时器0工作在模式1下。(假设此时定时器1工作在模式0下) //方式1 TMOD = 0x01; //0000 0001 同时对两个定时器的工作模式进行设置 AI运行代码 //方式2 TMOD = TMOD & 0xF0; //1111 0000 将TMOD的低4位清零,高4位保持不变。 TMOD = TM
[单片机]
51单片机中,中断函数与一般函数的调用区别?
中断函数的调用过程类似于一般函数调用,区别在于何时调用一般函数在程序中是事先安排好的;而何时调用中断函数事先却无法确定,因为中断的发生是由外部因素决定的,程序中无法事先安排调用语句。因此,调用中断函数的过程是由硬件自动完成的。 参考资料: (1)王静霞等. 单片机应用计数(C语言版)第3版 . 北京,电子工业出版社,2015:166.
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved