简述单片机中断程序的组成

简述单片机中断程序的组成,第1张

在汇编语言里

中断程序首先有入口地址(比如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=0i<8i++)

{

led=(led<<1)|0x01

P1=led

delay(500)

}

}

//unsigned char a

void main(void)//主函数{TCON=0x01EX0=1//外部中断允许

EA=1//开总中断while(1){//其他程序}}

void int0(void) interrupt 0 //外部中断0 中断子程序{//这里面可以写中断子程序/*a++if(a==2) a=0while(!zd)if(a) TR0=1//开关计时器

else TR0=0*/}

由于对你的要求“按下INTO接的按键,使单片机执行间隔四灯轮流闪烁的中断子程序”不够理解,只能给你这样一个程序框架了

进入中断要执行中断子程序,不同的中断源要进入不同的中断子程序。对于51的C编程,可以用中断标号,如‘interrupt 0’来使中断进入不同的中断。

中断标号与它们的中断优先级一致,即

1)中断响应的事前准备:

系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。

2) CPU检查是否有中断/异常信号

CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断请求过来,如果有那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量

对于异常和系统调用那样的软中断,因为中断向量是直接给出的,所以和通过IRQ(中断请求)线发送的硬件中断请求不同,不会再专门去取其对应的中断向量。

3) 根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符

CPU根据得到的中断向量到IDT表里找到该向量对应的中断描述符,中断描述符里保存着中断服务程序的段选择符。

4) 根据取得的段选择符到GDT中找相应的段描述符

CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。

5) CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址

CPU会根据CPL和中断服务程序段描述符的DPL信息确认是否发生了特权级的转换,比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的首地址存在TR寄存器中)里取得该程序的内核栈地址。

6) 保护当前程序的现场

CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,eip,errorCode(如果是有错误码的异常)信息。

7) 跳转到中断服务程序的第一条指令开始执行

CPU利用中断服务程序的段描述符将其第一条指令的地址加载到cs和eip寄存器中,开始执行中断服务程序。这意味着先前的程序被暂停执行,中断服务程序正式开始工作。

8) 中断服务程序处理完毕,恢复执行先前中断的程序

在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。程序执行这条返回指令时,会从栈里d出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行。

扩展资料

硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。

中断在计算机多任务处理,尤其是实时系统中尤为有用。这样的系统,包括运行于其上的 *** 作系统,也被称为“中断驱动的”(interrupt-driven)。

中断使CPU中止正在执行的程序而转去处理特殊事件的 *** 作,这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。

在运行一个程序的过程中,断续地以“插入”方式执行一些完成特定处理功能的程序段,这种处理方式称为中断。

参考资料来源:百度百科-中断处理


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

原文地址: http://outofmemory.cn/yw/7890979.html

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

发表评论

登录后才能评论

评论列表(0条)

保存