什么是单片机的中断

什么是单片机的中断,第1张

不同的计算机其硬件结构和软件指令是不完全相同的,因此,中断系统也是不相同的。

计算机的中断系统能够加强CPU对多任务事件的处理能力。中断机制是现代计算机系统中的基础设施之一,它在系统中起着通信网络作用,以协调系统对各种外部事件的响应和处理。中断是实现多道程序设计的必要条件。 中断是CPU对系统发生的某个事件作出的一种反应。

引起中断的事件称为中断源。中断源向CPU提出处理的请求称为中断请求。发生中断时被打断程序的暂停点称为断点。

CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。

CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现实行软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。

响应处理

大多数中断系统都具有如下几方面的 *** 作,这些 *** 作是按照中断的执行先后次序排列的。

1、 接收中断请求。

2、 查看本级中断屏蔽位,若该位为1则本级中断源参加优先权排队。

3、 中断优先权选择。

4、 处理机执行完一条指令后或者这条指令已无法执行完,则立即中止现行程序。接着,中断部件根据中断级去指定相应的主存单元,并把被中断的指令地址和处理机当前的主要状态信息存放在此单元中。

5、 中断部件根据中断级又指定另外的主存单元,从这些单元中取出处理机新的状态信息和该级中断控制程序的起始地址。

6、 执行中断控制程序和相应的中断服务程序。

7、 执行完中断服务程序后,利用专用指令使处理机返回被中断的程序或转向其他程序。

冲突

在一些罕见的情况下,两个ISA设备可以共享相同的 IRQ,只要它们不同时使用即可。为了解决这个问题,后来的PCI 总线允许 IRQ 共享。PCI Express没有物理中断线,并使用消息信号中断(MSI) 到 *** 作系统(如果可用)。

在早期的 IBM 兼容个人计算机中,中断曾经是一种常见的硬件错误,当两个设备尝试使用相同的中断请求(或 中断)向可编程中断控制器(PIC)发出中断信号时会收到该错误。

PIC 期望每条线路仅来自一个设备的中断请求,因此沿同一条线路发送 中断信号的多个设备通常会导致 中断 冲突,从而导致计算机死机。

例如,如果在系统中添加调制解调器 扩展卡并分配给中断4,传统上分配给串行端口 1,则可能会导致中断冲突。最初,中断 7 是使用声卡的常见选择,但后来发现 中断 7 会干扰打印机端口(LPT1)时使用了中断5 。该串行端口经常禁用可以用于其他设备的中断线。

中断 2/9 是 MPU-401 MIDI 端口的传统中断线,但这与ACPI系统控制中断(SCI 在 Intel 芯片组上硬连线到 中断9)冲突;

这意味着 ISA MPU-401 带有硬连线中断2/9 的卡和带有硬编码 中断 2/9 的 MPU-401 设备驱动程序不能在启用 ACPI 的系统上以中断驱动模式使用。

以上内容参考 百度百科-中断

//本段程序开辟一个16字节的接受缓冲区,防止处理不及时时丢掉数据。

#include<reg51h>

unsigned char rxdat[16];

unsigned char ptd,getdat[3];

unsigned char put,get;

main()

{

unsigned char i;

TMOD=0x20;

TH0=0xfd;

TL0=0xfd;

TR1=1;

ES=1;

put=0;

get=0;

i=0;

while(1){

if(put!=get)(

get=get&0x0f;

getdat[i]=rxdat[get];

get++;

i++;

if(i>2)i=0;

}

}

void serint() interrupt 4 using 0

{

if(RI){

Ri=0;

put=put&0x0f;

rxdat[put]=SBUF;

put++;

}

if(TI)TI=0;

}

#include<reg52h> //包含52单片机寄存器定义的头文件

/

函数功能:主函数

/

void main(void)

{

EA=1; //开放总中断

EX0=1; //允许使用外中断

IT0=1; //选择负跳变来触发外中断

P0=0xff; //关闭所有P0口的LED灯

while(1); //无限循环,

}

/

函数功能:外中断T0的中断服务程序

/

void int0(void) interrupt 0 using 0 //外中断0的中断编号为0

{

P0=~P0; //每产生一次中断请求,P1取反一次。

}

在汇编语言里

中断程序首先有入口地址(比如ORG 0003H) 之后是中断处理语句 最后有一个返回指令RETI;

例如:

ORG 000BH

LJMP TION

MOV R4,#0

MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

SETB EA

SETB ET0

WAIT: SJMP WAIT

TION: INC R4

CJNE R4,#10,timer

timer:MOV TH0,#3CH

MOV TL0,#0B0H

RETI

如果你说的是C51

中断程序结构如下:

void 中断程序名(void) interrupt n using m //确定中断源和中断程序所用寄存器

{

// 中断处理部分

}

例如:

void Time0_int(void) interrupt 1 using 1

{

uchar led,i;

led=0xfe;

P1=led;

delay(500);

for(i=0;i<8;i++)

{

led=(led<<1)|0x01;

P1=led;

delay(500);

}

}

一般中断处理的主要步骤分别是中断请求、中断判优、中断响应、中断处理和中断返回。

在微机系统中,对于外部中断,中断请求信号是由外部设备产生,并施加到CPU的NMI或INTR引脚上,CPU通过不断地检测NMI和INTR引脚信号来识 别是否有中断请求发生。对于内部中断,中断请求方式不需要外部施加信号激发,而是通过内部中断控制逻辑去调用。无论是外部中断还是内部中断,中断处理过程 都要经历以下步骤: 请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回。

请求中断

当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。系统要求中断请求信号一直保持到CPU对其进行中断响应为止。

中断响应

CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断 服务子程序。对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF=1)的情 况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期。

关闭中断

CPU响应中断后,输出中断响应信号,自动将状态标志寄存器FR或EFR的内容压入堆栈保护起来,然后将FR或EFR中的中断标志位IF与陷阱标志位TF清零,从而自动关闭外部硬件中断。因为CPU刚进入中断时要保护现场,主要涉及堆栈 *** 作,此时不能再响应中断,否则将造成系统混乱。

保护断点

保护断点就是将CS和IP/EIP的当前内容压入堆栈保存,以便中断处理完毕后能返回被中断的原程序继续执行,这一过程也是由CPU自动完成。

中断源识别

当系统中有多个中断源时,一旦有中断请求,CPU必须确定是哪一个中断源提出的中断请求,并由中断控制器给出中断服务子程序的入口地址,装入CS与IP/EIP两个寄存器。CPU转入相应的中断服务子程序开始执行。

保护现场

主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的。

中断服务

中断服务是执行中断的主体部分,不同的中断请求,有各自不同的中断服务内容,需要根据中断源所要完成的功能,事先编写相应的中断服务子程序存入内存,等待中断请求响应后调用执行。

恢复现场

当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容d出,即恢复主程序断点处寄存器的原值。

中断返回

在中断服务子程序的最后要安排一条中断返回指令IRET,执行该指令,系统自动将堆栈内保存的 IP/EIP和CS值d出,从而恢复主程序断点处的地址值,同时还自动恢复标志寄存器FR或EFR的内容,使CPU转到被中断的程序中继续执行。

以上就是关于什么是单片机的中断全部的内容,包括:什么是单片机的中断、单片机中断程序、单片机的中断程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9429205.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存