第7章 中断系统

发布时间:2024-08-09  

一、中断概述

中断技术是在微机中广泛使用的一种资源共享技术。


中断

中断是指当CPU在正常执行程序时,由于外部或内部事件强迫CPU停止当前执行的程序,转去为事件服务(中断服务),服务完毕,又能自动返回到被中断的程序中继续执行。


中断功能


实现CPU与外设的速度匹配和并行工作;

实现实时控制;

实现故障检测和自动处理。

中断控制


设置中断源(引起中断的事件),确定它们提出中断请求的方式;

确定中断优先级和中断的嵌套方式;

中断现场的保护与恢复。

中断嵌套示意图


中断处理过程

中断处理过程如下:

中断源提出申请,并建立相应的中断标志(由硬件置位标志位);

CPU结束当前指令,响应该中断申请,同时把主程序断点处地址(程序计数器PC当前值)压入堆栈,即保护断点;

保护现场。把断点处的有关信息(如工作寄存器、累加器、标志位的内容),压入堆栈;

执行中断服务程序;

恢复现场。把保存的现场内容从堆栈弹出,以恢复寄存器和存储单元的原有内容;

返回主程序(或调用程序),执行中断返回指令,把断点处地址从栈顶弹出,从断点处继续执行主程序(或调用程序)。

二、MCS-51 中断系统

中断源

5个中断源:2个外部中断INT0、INT1,3个内部中断T0、T1、串行口。

2个优先级:高级中断和低级中断,由用户定义。

MCS-51 中断系统结构图


中断控制寄存器

与中断控制有关的寄存器有4个:


TCON:定时控制寄存器

SCON:串行口控制寄存器

IE:中断允许寄存器

IP:中断优先级寄存器

(1) 定时控制寄存器(TCON)


 8F 8E 8D 8C 8B 8A 89 88

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 (88H)

                   INT1触发请求标志

                   INT0触发方式 0:电平触发(低) 1:边沿触发(下跳沿)

                   INT0请求标志 0:无请求(硬件置位或清除) 1:有请求

IT0(IT1):外中断请求信号方式控制位

IT0(IT1)=1,脉冲方式(后沿负跳变有效)

IT0(IT1)=0,电平方式(低电平有效)

IE0(IE1):外部中断请求标志位

当CPU采样(S5P2)到INT0或INT1端出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务程序时,再由硬件自动清零。

TF0(TF1):计数溢出标志位

当计数器产生计数溢出时,此位由硬件置位。当转向中断服务程序时,再由硬件自动清0。计数溢出标志位的使用有两种情况:

采用中断方式时,做中断请求标志位来使用;

采用查询方式时,作查询状态位来使用。

(2) 串口控制寄存器(SCON)


 9F 9E 9D 9C 9B 9A 99 98 

SM0 SM1 SM2 REN TB8 RB8 TI RI (98H)

                        串行口发送中断请求标志

                        串行口接收中断请求标志  

其中与中断有关的控制位共有两位:TI和RI,分别为串口发送和接收中断请求标志位。当串口发送(或接收)完一帧数据后,由硬件置位;在转向中断服务程序后,用软件清零。


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


AF AE AD AC AB AA A9 A8

EA / / ES ET1 EX1 ET0 EX0 (A8H)

EA:中断允许总控制位

EA=0,禁止所有中断;EA=1,开放所有中断。

EX0(EX1):外部INT0、INT1中断允许位

EX0(EX1)=0,禁止;EX0(EX1)=1,允许。

ET0(ET1):定时/计数器T0、T1中断允许位

ET0(ET1)=0,禁止;ET0(ET1)=1,允许。

ES:串行中断允许位

ES=0,禁止; ES=1,允许。

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


BF BE BD BC BB BA B9 B8 

/ / / PS PT1 PX1 PT0 PX0 (B8H)

PX0:外部中断0(INT0)优先级设定位

PT0:定时中断0(T0)优先级设定位

PX1:外部中断1(INT1)优先级设定位

PT1:定时中断1(T1)优先级设定位

PS: 串行中断优先级设定位

为0的位优先级为低级;为1的位优先级为高级。若5个中断源都定义为相同优先级时,CPU按下列顺序查询执行。


INT0 -> T0 -> INT1 -> T1 -> TI、RI

MCS-51单片机中断优先级的控制原则是:


低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。


如果一个中断请求已被响应,则同级的其他中断响应将被禁止。


如果同级的多个请求同时出现,则按CPU查询次序确定哪个中断请求被响应。其查询次序为:外部中断0 -> 定时中断0 -> 外部中断1 -> 定时中断1 -> 串行中断。


中断请求的撤除

中断响应后,如果不及时清除中断请求标志,会引起中断的混乱。下面按中断请求的类型说明中断请求的撤除方法。

(1) 定时中断由硬件自动撤除

定时中断响应后,硬件自动把标志位(TFx)清零。

(2) 外部中断的自动与强制撤除

若外部中断以脉冲方式触发,则由硬件自动地把标志位(IEx)清零。若以电平方式触发,则需由外部电路和软件配合撤除。

(3) 串行中断软件撤除

串行中断的标志位是TI和RI,但对这两个中断标志位不进行自动清零。因为在中断响应后,还需测试这两个标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行中断请求的撤除应使用软件方法。

即:

CLR TI ; TI <- 0 CLR RI ; RI <- 0


中断管理

ORG 0000H 

LJMP MAIN ; 跳过中断地址表,转主程序

ORG 0003H

LJMP INT0F ; 转INT0中断服务

ORG 000BH  

LJMP T0F ; 转T0中断服务

ORG 0013H

LJMP INT1F ; 转INT1中断服务  

ORG 001BH

LJMP T1F ; 转T1中断服务

ORG 0023H

LJMP SIOF ; 转串口中断服务

ORG 0030H  

MAIN: MOV SP,#5FH ; 主程序

利用定时器扩充中断源

定时器T0设置为方式2(自动重装常数)外部计数方式。TH0、TL0的初值均为0FFH,并允许T0中断,且CPU开放中断。


MOV TMOD,#06H

MOV TL0,#0FFH

MOV TH0,#0FFH

SETB TR0  

SETB ET0

SETB EA

定时器方式0应用举例(第5章)

设单片机晶振频率fosc=6MHz,使用定时器1以方式0产生周期为500us的方波,并由P1.0输出。以查询或中断方式完成。


解:


计算定时初值x

欲产生500us的方波,只需在P1.0端以250us为周期交替输出高低电平即可实现。为此,定时时间应为250us。晶振为6MHz,则1个机器周期为2us。

则: (2^13-x)*2uS=250uS

x=8067=1111110000011B

即: TH1=0FCH,TL1=03H。

查询方式程序:


MOV TMOD,#00H ; T1工作在方式0

SETB TR1 ; 启动T1工作

LOOP: MOV TL1,#03H  

      MOV TH1,#0FCH ; 置定时初值

WAIT: JNB TF1,WAIT ; 定时未到,循环等待

      CLR TF1 ; 定时到,清TF1

      CPL P1.0 ; 由P1.0输出,信号取反

      SJMP LOOP ; 循环输出方波  

中断方式程序:


ORG 001BH ; T1中断入口

     LJMP SUBT ; 跳至中断服务程序SUBT

ORG 100H  

     MOV TMOD,#00H ; T1工作在方式0

     MOV TL1,#03H

     MOV TH1,#0FCH ; 置定时初值

     SETB EA ; 开中断

     SETB ET1 ; 允许T1中断

LOOP: SETB TR1 ; 启动T1工作

WAIT: SJMP WAIT ; 等待中断

      LJMP LOOP

ORG 200H ; 中断服务程序  

SUBT: CPL P1.0 ; 输出信号取反

      MOV TL1,#03H

      MOV TH1,#0FCH ; 重置定时初值

      RETI ; 中断返回

乙机接收程序(第5章)--串口中断实现

(查询方式)与甲机发送相呼应,接收器把接收到的32个字节数据存放在内部RAM的20H~3FH中,波特率与晶振频率同上。若奇校验出错,则置进位位1。程序如下:


START:MOV TMOD,#20H ; T1方式2

      MOV TL1,#OE8H  

      MOV TH1,#OE8H

      SETB TR1

      MOV R0,#20H

      MOV R7,#32  

LOOP: MOV SCON,#01010000B ; 串行口方式1,能接收

DONE: JNB RI,DONE ; 等待接收一帧

      CLR RI ; 清RI,再接收

      MOV A,SBUF ; 取数据

      JNB P,ERROR ; 校验错,转出错处理

      ANL A,#7FH ; 去掉奇校验位

      MOV @R0,A ; 奇校验,存数据

      INC R0 ; 指向下一数据

      DJNZ R7,LOOP ; 数据块,未接收完,循环

      AJMP START ; 循环接收

ERROR: ... ; 出错处理

(中断方式)程序如下:


START:MOV TMOD,#20H ; T1方式2

      MOV TL1,#OE8H

      MOV TH1,#OE8H

      SETB TR1  

      MOV R0,#20H

      MOV R7,#32

      MOV SCON,#01010000B ; 串口方式1,接收

      SETB EA ; 开总中断

      SETB ES ; 开串口中断

      SJMP $ ; 等待接收或处理其他

 

ORG 0023H ; 串口中断处理子程序

     LJMP ZDCL  

ORG 100H

ZDCL: CLR RI ; 清RI,再接收

      MOV A,SBUF 

      MOV A,SBUF ; 取数据

      JNB P,ERROR ; 校验错,转出错处理

      ANL A,#7FH ; 去掉奇校验位  

      MOV @R0,A ; 奇校验,存数据

      INC R0 ; 指向下一数据

      DJNZ R7,FH ; 数据块,未接收完,循环

      CLR ES ; 关串口中断

FH:   RETI ; 返回主程序  

ERROR: ... ; 出错处理

包括中断概述、MCS-51中断系统、中断管理、利用定时器扩充中断源、定时器方式0应用举例以及串口中断实现的接收程序。中断技术是单片机系统中非常重要的一部分,合理利用中断可以大大提高系统的实时性和可靠性。在实际应用中,需要根据具体需求合理设置中断源、中断优先级和中断服务程序,以实现高效可靠的系统控制。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>