历史上的今天
返回首页

历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2019年08月13日 | 玖:中断系统的原理与应用

2019-08-13 来源:eefocus

基本概念

1、什么是“中断”?
顾名思义,中断就是中断当前工作去处理一些临时发生的时间,处理完后,则继续原工作过程。例如:你在看书,电话响了,你在书上做好记号后去接电话,接完之后再原记号处继续往下看书。
2、51单片机也需要“中断”?
通常单片机中只有一个CPU,但却要应对诸如:运行程序、数据输入、数据输出、以及特殊情况处理等多项任务,为此单片机必须具备中断处理的功能,以应对特殊情况的紧急处理。
3、“中断过程”是怎样的?
中断的目的是为了暂停主程序的运行,先去执行中断服务程序,其功能是为了提高CPU工作效率。在中断源提出中断请求后,处理器执行完当前指令便进行中断响应,一旦中断服务程序执行完毕后,仍须返回到主程序被中断处(断点处)继续执行原先程序,其过程如图所示

这里写图片描述

4、谁能“中断”51单片机?
中断源:能引发中断的来源称为中断源。
51单片机一共支持5个中断源(2个外部中断源,3个内部中断源),这些中断源分别是:
(1)外部中断请求0,由INT0(P3.2引脚)输入。
(2)外部中断请求1,由INT1(P3.3引脚)输入。
(3)片内定时/计数器0溢出中断(T0)请求。
(4)片内定时/计数器0溢出中断(T1)请求。
(5)片内串行口发送/接收中断请求。

5、“中断源”同时来临,怎么办?
中断优先级:处理中断源的优先顺序称为中断优先级

51单片机将优先级整个划分为2个大等级:高优先级和低优先级。高优先级的中断先响应,等高优先级的中断响应完之后才响应低优先级的中断,高低优先级的分配可通过IP寄存器来设置。
当多个中断都分配为同一个优先等级,并且发生中断时,由查询电路来确定最终优先级。
对于同一优先级,单片机对其中断次序安排如下:外部中断0>定时/计数器T0>外部中断1>定时/计数器T1>串行口。
6、“中断源”的信号可否屏蔽?
51单片机是可以屏蔽中断信号的。有总开关和分开关。
这里写图片描述

7、中断响应可否嵌套?
高优先级中断是可以打断低优先级的中断处理过程。
这里写图片描述

8、每个“中断”响应程序放在哪里呢?

51单片机给每个中断安排了一个唯一的中断入口地址。

中断源的入口地址表

中断源
入口地址
外部中断0(INT0)
0003H
定时/计数器0
000BH
外部中断1(INT1)
0013H
定时/计数器1
001BH
串行口中断
0023H

51中断的使用

★★★中断允许寄存器(IE)

D7
D6
D5
D4
D3
D2
D1
D0
EA


ES
ET1
EX1
ET0
EX0

![这里写图片描述](https://img-blog.csdn.net/20180705231013334?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE3MDE3NTQ1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) EA:中断总开关位。EA = 1,开中断;EA = 0,禁止所有中断。(分开关类似)

★★★中断优先级寄存器(IP)

D7
D6
D5
D4
D3
D2
D1
D0



PS
PT1
PX1
PT0
PX0
对应中断源
对应中断源
对应中断源
串行口
定时器1
外部中断1
定时器0
外部中断0

以上表格中,若某位=1,则该对应的中断源设置为高优先级;若该位=0,则该对应的中断源设置为低优先级。 **★★★各中断源的标志位** **TCON**

D7
D6
D5
D4
D3
D2
D1
D0
TF1

TF0

IE1
IT1
IE0
IT0
T1计数溢出

T0计数溢出

外部中断1

外部中断0

SCON

D7
D6
D5
D4
D3
D2
D1
D0






TI
RI






发送完毕
接收完毕

IT0、IT1:外部中断0、1触发方式选择位,由软件设置。1:下降沿触发方式;0:低电平触发方式
IE0、IE1:外部中断0、1请求标志位。当外部中断0、1依据触发方式满足产生中断请求是,由硬件置位。
RI :串行口接收中断请求标志位。当串行口接收完一帧数据后请求中断时,由硬件置位(RI=1)。RI必须由软件清0。
TI:串行口发送中断请求标志位。当串行口发送完一帧数据后请求中断时,由硬件置位(TI=1)。TI必须由软件清0。

(1)中断初始化
中断系统的初始化:在为某个中断源编写中断服务程序前,首先应在主程序中对中断系统进行初始化,初始化步骤应包括:
1)软件清除相应中断源的中断标志位,以消除以前中断标志对现在的影响。
2)默认或设置中断优先级。
3)其他设置:若为外部中断,应设置是电平触发方式还是下降沿触发方式;若为定时/计数器中断,应将定时/计数初值送入寄存器THx、TLx中。
4)打开相应中断源的分开关和总开关EA。
(2)中断服务程序的预先安排
汇编语言要哟昂到ORG伪指令和JMP跳转指令,C语言要用到关键字interrupt。
中断服务程序入口地址设置

中断源
服务程序名称(假设)
入口地址
汇编程序
C程序
外部中断0
INT0_i
0003H
ORG 0003H JMP INT0_i
INT0_i() interrupt 0
定时/计数器0
T0_i
000BH
ORG 000BH JMP T0_i
T0_i() interrupt 1
外部中断1
INT1_i
0013H
ORG 0013H JMP INT1_i
INT1_i() interrupt 2
定时/计数器1
T1_i
001BH
ORG 001BH JMP T1_i
T1_i() interrupt 3
串行口
COM_i
0023H
ORG 0023H JMP COM_i
COM_i() interrupt 4

(3)中断服务程序的预先安排

ORG OOOOH

JMP Start ;跳转到主程序

ORG 00BH

JMP T0_i ;跳转到T0中断服务程序处

ORG 0030H

Start: ;主程序

……

T0_i: ;T0的中断服务程序

……

RETI        ;中断返回

END


(4)中断返回
一旦某个中断请求得到响应,单片机必须把它的相应对应中断标志位清0,否则,单片机会因中断标志未能得到及时清除而重新相应同一中断请求,这是绝对不允许的。
1、外部中断标志的清除
当外部中断工作在电平触发方式下,外部中断标志IE0或IE1是依靠单片机检测其引脚INT0或INT1上为低电平而置位的。尽管RETI指令能使中断标志IE0或IE1自动清除成“0”状态,但无法改变引脚INT0或INT1上电平始终为低电平的事实,所以单机在运行过程中会再次检测到INT0或INT1引脚上的低电平而置位IE0或IE1。
2、串行口中断标志的清除
串行口有两个中断标志位TI和RI,硬件无法判别是哪个中断标志引发的中断请求,所以中断响应后,RETI指令无法自动清除中断标志,只能由软件清除。编程时应在中断服务程序的适当位置采用指令清除TI或RI。
#实验

汇编代码


******************************************************************/ 

*   【课程10】 ****中断系统的应用***********

*   【说  明】 ****使用T0定时1秒让LED灯闪烁一次

*   【描  述】 ****使用T0定时1秒让LED灯闪烁一次,并通过按键来控制定时器的开启和关闭。

******************************************************************/ 

    ORG 0000H

JMP MAIN        ;跳到主程序

ORG 000BH       

JMP Timer0      ;跳到Timer0的中断服务程序


ORG 0030H

Timer0: MOV TH0,#3CH  ;定时器T0赋初值

MOV TL0,#0B0H

INC R3            ;R3保存N值

MOV A,R3

CJNE A,#19,L1   ;A不等于19,则跳转到L1处

CLR P2.7          ;P2.7=0,点亮D1灯

L1: CJNE A,#20,L2     

SETB P2.7         ;P2.7=1,熄灭D1灯

MOV R3,#00H       ;N=0

L2: RETI



MAIN: MOV TMOD,#01H    ;定时器T0工作在方式1下

MOV TH0,#3CH         ;T0赋初值

MOV TL0,#0B0H

SETB ET0             ;ET0=1,定时器t0中断允许

SETB EA              ;开中断总开关

SETB TR0             ;启动T0,开始定时

MOV R3,#00H          ;R3保存N值,N=0


CLR  20H            ;位地址20H处,保存标志量

LOOP: JB   P3.2,$      ;如果P3.2=1,则跳到自身处继续运行

CALL DELAY

JB   P3.2,LOOP

JNB  P3.2,$

JB   20H,L3

SETB 20H

CLR  TR0             ;关闭T0

JMP  LOOP

L3: CLR  20H

SETB TR0             ;开启T0

JMP  LOOP


DELAY:   MOV    R7,#0FFH

W1:      MOV    R6,#03FH

W2:      DJNZ   R6,W2

         DJNZ   R7,W1

RET

END


C代码


******************************************************************/

*   【课程10】 ****中断系统的应用***********

*   【说  明】 ****使用T0定时1秒让LED灯闪烁一次

*   【描  述】 ****使用T0定时1秒让LED灯闪烁一次,并通过按键来控制定时器的开启和关闭。

******************************************************************/


#include //51头文件,

#include


//---------常用的两个宏定义-------------- 

#define uint8 unsigned char

#define uint16  unsigned int



sbit Key=P3^2;

sbit Led=P2^7;

uint8 num;   //一秒的计数变量

uint8 flag;


/************************************

函数名:Timer0_I()

功能:中断服务程序

************************************/

void Timer0_I() interrupt 1

{

TH0=0x3c;  //重装初值

TL0=0xb0;

num++;    //计时变量+1

if(num==20) {Led=~Led;  num=0;}

}

/************************************

函数名:main()

功能:主程序

************************************/

void main()

{

TMOD=0x01; //选择定时器0工作在定时方式1

TH0=0x3c; //定时50ms,装初值

TL0=0xb0;

ET0=1;  //开启定时中断

EA=1; //开总中断

TR0=1; //开启定时器T0


num=0;

flag=0;

while(1)

{

if(Key==0)    //有键按下

{

if(flag==0)

{flag=1;  TR0=0;} //关闭定时器T0

else

{flag=0;  TR0=1;} //开启定时器T0

}

}

}



推荐阅读

史海拾趣

博林(BL)公司的发展小趣事

在竞争激烈的电子市场中,博林公司始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产制造的每一个环节都进行严格把控。同时,博林公司还注重产品的售后服务,为客户提供全方位的支持和解决方案。正是凭借着卓越的品质和完善的服务,博林公司的品牌形象逐渐深入人心,赢得了广大客户的信赖和支持。

Anixter Inc公司的发展小趣事

为了降低生产成本、提高生产效率,博林公司开始实施产业链整合战略。公司通过收购、兼并等方式,逐步掌握了从原材料供应到终端产品销售的完整产业链。同时,博林公司还积极向垂直化方向发展,涉足与电子产品相关的多个领域,如芯片设计、软件开发等。这种垂直化的发展模式使得博林公司在行业中更具竞争力,能够更好地应对市场变化和客户需求。

FEMA Electronics Corporation公司的发展小趣事

FEMA始终将产品质量视为企业的生命线。为了确保产品质量的稳定可靠,公司建立了一套完善的质量管理体系,并引进了先进的生产设备和技术。同时,FEMA还注重员工的培训和素质提升,确保每一个生产环节都能达到最高的质量标准。正是凭借这种对品质的执着追求,FEMA的产品在市场上赢得了良好的口碑和声誉,逐渐成为了行业内的知名品牌。

DURAKOOL公司的发展小趣事

在1935年,DURAKOOL公司在Durakool成立,由几位电子工程师和发明家共同创立。他们的初衷是为电气和电子市场提供高质量的组件和系统。起初,公司面临着资金短缺和市场竞争激烈的挑战,但他们凭借对技术的热情和不懈的努力,逐渐开发出了一系列具有竞争力的产品,如Durakool水银继电器和功率继电器,赢得了客户的认可。

Broadcom(博通)公司的发展小趣事

随着全球化的深入发展,博通积极调整战略,加强全球布局。公司通过设立研发中心、拓展销售网络等方式,不断提升其在全球市场的竞争力。同时,博通还积极与其他行业领军企业开展战略合作,共同推动电子行业的发展和创新。

这些故事展示了博通在电子行业中的发展历程和成就。从初创时期的艰难起步,到困境中的重生,再到并购扩张和技术创新,博通始终保持着坚韧不拔的精神和追求卓越的态度。正是这样的精神和态度,使博通能够在激烈的市场竞争中脱颖而出,成为电子行业的佼佼者。

国产公司的发展小趣事
确保所有元器件都正确连接,没有短路或断路现象。

问答坊 | AI 解惑

Linux操作系统中安装网卡驱动

把网卡驱动COPY 到软盘上。在linux 的/tmp下建个空目录,然后再把软盘上的驱动COPY到这个空目录下 。 解压缩:   #tar zxvf r1000_v1.05.tgz (文件所在的目录)   #make (是在r1000_v1.05目录)   如果在此没有出现什么错误,输入MAKE ...…

查看全部问答>

一开关电源的标识

p1-1,5,12=n/c p1-2,3,4,6=5V rtn P1-7,8=+5.1V,4.25A P1-11=+12V,44ADC P1-14=CHASSIS GND J1-1,4=PROGRAM J1-2=+10 ,0.25A J1-3=RETURN 在这里的 CHASSIS GND是不是保护地的意思?    PROGRAM是不是可编程电压的意思?设在 ...…

查看全部问答>

如何利用isp给可编程器件下载程序?

大家好,小弟还是个学生,想学PLD,又没钱买昂贵的编程器,我想问一下如何给MAX7000S系列下载程序?是用并口isp下载线?像最简单的EPM7032SLC44-10引脚该如何连?用什么软件下载?那位懂得来详细说一下,万分感谢!!!!…

查看全部问答>

WinCE下NDIS.Dll是否开放源代码??

在注册表上看到如下的内容,可怎么也找不到NDIS.Dll的源代码,本来想学习一下的... [HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\NDIS]    \"Dll\"=\"NDIS.Dll\"    \"Prefix\"=\"NDS\"    \"Index\"=dword:0   ...…

查看全部问答>

大家聊聊了解芯片内部结构对我们设计的重要性

请大家随便聊聊我们编写代码时,对我们使用的FPGA芯片内部详细结构(比如LE总量、M4K总量等参数)的熟悉了解会如何影响我们的代码设计~…

查看全部问答>

Launchpad低功耗设计的几个问题

参考前人的文章,仿照着用Launchpad和NRF24L01做了一个无线温度的发射端。之前没有用低功耗设计,现在使用定时器定时,在中断中读取温度并发送。 目前的状态是使用红灯来指示程序运行,绿灯指示发送成功。红灯做Toggle,绿灯就闪一下。大概一秒钟 ...…

查看全部问答>

[7月11日,北京站] 2013 TI 多核DSP研讨会火热报名中

德州仪器 (TI) TMS320C66x 针对众多高性能市场进行了优化,可充分满足通信与网络、工业自动化、医疗影像、关键性任务、视频基础架构以及高性能计算等应用需求。围绕 KeyStone C66x系列, 2013 TI 多核 DSP 技术研讨会即将在北京 (7月11日) 召开, ...…

查看全部问答>

出9成新SATA品牌焊台,数显,恒温,无铅,原价1000多,400出

1、高频涡流发热,升降温速度快 2、特殊的传感器设计,保证快速响应,调温快捷 3、精确地温控电路,温度控制在±2°C 4、自动休眠,节能有延长寿命 5、ESD静电拆消设计,满足防静电工作需求 有意联系QQ2710917797 [ 本帖最后由 LCYGCS 于 20 ...…

查看全部问答>

大家来讨论一下模拟地和数字地的区别

如题 大家来讨论一下模拟地和数字地的区别\0\0\0eeworldpostqq…

查看全部问答>