中断响应和函数调用的区别剖析

合集下载

C语言的中断服务函数

C语言的中断服务函数

C语言的中断服务函数中断服务函数是一种特殊的函数,用于处理系统或外设发生的中断事件。

在C语言中,中断服务函数常用于嵌入式系统的开发中,用于实现硬件的响应和处理。

下面是关于C语言中断服务函数的详细介绍,包括定义、注册、实现和应用等方面。

一、中断服务函数的定义中断服务函数(Interrupt Service Routine,ISR)是一段特殊的代码,用于响应和处理中断事件。

它与普通的函数不同,不是由程序主动调用的,而是由系统或硬件触发的。

中断事件一般包括硬件的输入、定时器的溢出、软件触发等。

在C语言中,中断服务函数的定义方式与普通的函数类似,但需要使用特殊的关键字和参数。

如下是一个C语言中断服务函数的定义示例:```void interrupt_service_functio//中断处理代码```在上述示例中,`void`表示中断服务函数不返回值,`interrupt_service_function`是函数的名称。

根据不同的开发平台和编译器,中断服务函数的定义可能有所不同。

二、中断服务函数的注册要使用一个中断服务函数,需要将其注册到相应的中断源中。

中断源可以是系统的中断控制器,也可以是外设的中断引脚。

注册中断服务函数的目的是告诉系统,在相应中断事件发生时调用该函数。

以8051单片机为例,注册中断服务函数的方式如下所示:```void mairegister_interrupt_service_function(interrupt_service_functi on);//其他代码```在上述示例中,`register_interrupt_service_function`是用于将中断服务函数`interrupt_service_function`注册到系统中断控制器的函数。

在实际开发中,不同平台和配置会有不同的注册方式。

三、中断服务函数的实现中断服务函数的实现主要包括对中断事件的处理和相应操作。

中断服务函数的实现需要了解特定硬件的中断机制和相关的寄存器操作。

2022年闽南科技学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)

2022年闽南科技学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)

2022年闽南科技学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)一、选择题1、通常对文件系统来说,文件名及属性可以集中在()中以使查询。

A.目录B.索引C.字典D.作业控制块2、若文件f1的硬链接为f2,两个进程分别打开fl和f2,获得对应的文件描述符为fd1和fd2,则下列叙述中,止确的是()I.fl和f2的读写指针位置保持相同II.fl和f2共享同个内存索引节点III.fdl 和fd2分别指向各自的用户打开文件表中的一项,A.仅IIB. 仅II、IIIC.仪I、IID. I、II和II3、若某单处理器多进程系统中有多个就绪进程,则下列关于处理器调度的叙述中,错误的是()。

A.在进程结束时能进行处理器调度B.创建新进程后能进行处理器调度C.在进程处于临界区时不能进行处理器调度D.在系统调用完成并返回用户态时能进行处理器调度4、进行P0和P1;的共享变量定义及其初值为:boolean flag[2];int turn=0;flag[0]=false;flag[1]=false;若进行P0和P1,访问临界资源的类C代码实现如下:void Po()//进程Po{while(TRUE){flag[0]=TRUE;turn=1;While(flag[1]&&(turn==l));临界区;flag[0]=FALSE;}}void P1()//进程P1{while(TRUE){flag[1]=TRUE;turn=0;While(flag[0]&&(turn==0));临界区;flag[1]=FALSE;}}并发执行进程P0和P1时产生的情况是()。

A.不能保证进程互斥进入临界区、会出现“饥饿”现象,B.不能保证进程互斥进入临界区、不会出现“饥饿”现象C.能保证进程互斥进入临界区、会出现“饥饿”现象D.能保证进程互斥进入临界区、不会出现“饥饿”现象5、一个正在访问临界资源的进程由于申请等待1/0操作而被中断时,它()。

中断处理和函数调用

中断处理和函数调用

中断处理和函数调用中断处理和函数调用是计算机编程中常见的两个概念,它们在程序执行过程中起着重要的作用。

本文将分别详细介绍中断处理和函数调用的概念、原理和应用。

一、中断处理中断处理是指在计算机执行程序的过程中,当发生某些特定事件时,会暂停当前程序的执行,转而执行中断处理程序。

中断处理可以分为硬件中断和软件中断两种类型。

硬件中断是由计算机硬件设备发出的信号,用于通知CPU某种事件的发生,如键盘输入、鼠标移动等。

当发生硬件中断时,CPU会立即停止当前正在执行的指令,保存当前执行环境的状态,然后转而执行与中断相关的中断处理程序。

中断处理程序执行完毕后,CPU 会回到中断发生的地方,继续执行原来的程序。

软件中断是由程序中的特定指令触发的中断。

在程序中通过软件中断指令,可以主动暂停当前程序的执行,并转而执行与中断相关的中断处理程序。

软件中断通常用于实现一些特定功能,如系统调用、异常处理等。

中断处理在操作系统、驱动程序等领域有着广泛的应用。

通过中断处理,计算机可以及时响应外部设备的请求,提高系统的实时性和可靠性。

二、函数调用函数调用是指在程序中通过函数名和参数列表来调用特定的函数。

函数是一段封装了特定功能的代码块,通过函数调用可以在程序中多次使用同一段代码,提高了代码的复用性和可维护性。

在函数调用过程中,首先需要将函数的参数传递给函数,然后执行函数体中的代码。

函数执行完毕后,会返回一个返回值,并将控制权交还给调用函数的位置。

函数调用可以嵌套,即在一个函数内部调用另一个函数。

函数调用可以分为有返回值和无返回值两种类型。

有返回值的函数可以将计算结果返回给调用者,无返回值的函数则仅执行一些操作而不返回结果。

函数调用是程序结构化的基础,通过合理的函数调用可以使程序结构清晰、模块化,便于理解和维护。

函数调用也是实现面向对象编程的重要手段,通过定义类和方法,可以将函数调用封装成对象的方法调用。

三、中断处理与函数调用的关系中断处理和函数调用在程序执行过程中有着密切的联系。

单片机C语言函数中断函数(中断服务程序)

单片机C语言函数中断函数(中断服务程序)

单片机_C语言函数_中断函数(中断服务程序)在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。

中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。

(1)中断源:中断请求信号的来源。

(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。

期间涉及到CPU响应中断的条件,现场保护,现场恢复。

(3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。

优先级是可以编程的,而优先权是固定的。

80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。

80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制(1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。

在这里我们讲下注意的事项(1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。

(2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。

所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断被CPU多次响应。

(3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。

简述中断响应过程

简述中断响应过程

简述中断响应过程中断是指主程序的执行被某些事件打断后,CPU强制跳转到相应的处理程序去完成特定任务,处理完成后再返回主程序的执行位置继续执行。

中断可以提高计算机的可靠性和及时性。

在实际应用中,中断响应是函数库的重要组成部分之一,因此,深入了解中断响应过程对编写高质量代码和系统优化至关重要。

中断响应过程是一系列步骤,以下是中断响应过程的详细描述:1.发生中断事件。

中断事件可以是I/O完成,时钟中断,硬件故障等。

2. CPU接收中断请求。

当CPU接收到中断请求后,会立即响应请求并且将当前执行的指令压入栈中保存程序现场,为中断处理程序提供空间。

3.关中断。

在CPU处理中断之前,会先关闭中断请求。

这是为了防止其他中断事件的干扰。

关闭中断请求不会影响其他正在执行的程序。

4.跳转到中断处理程序。

当中断发生时,CPU会跳转到中断处理程序的入口地址,并开始执行中断处理程序。

此时,CPU不再执行主程序,而是转向中断服务程序。

5.保存现场。

中断处理程序会首先保存现场。

现场包括程序执行状态,数据和寄存器的内容等。

保存现场的好处是当中断处理程序执行完毕后,能保证主程序继续执行时的状态不变。

通过栈机制,中断程序可以在处理过程中保存现场,并在中断处理程序完成之后恢复现场。

6.处理中断。

中断处理程序会根据中断类型来执行相应的处理任务。

这些任务包括I/O操作,处理键盘输入,更新状态等。

中断程序执行的时间可能会很长,因此,在中断处理程序中不要阻塞或长时间占用CPU。

7.恢复现场。

当中断处理程序执行完毕后,必须将保存的现场恢复为先前的状态。

恢复过程包括恢复程序执行状态,数据和寄存器的内容。

在恢复现场之后,中断处理程序将控制权转移到主程序。

8.开中断。

中断处理程序执行完毕后,会打开中断请求,并将控制权转移到主程序。

打开中断请求可以保证其他中断事件得以及时响应。

总结中断响应机制使得计算机可以在外部设备或事件驱动下进行自主处理。

通过理解中断请求的工作方式和执行过程,我们可以编写更高效的代码来处理各种中断事件。

2022年吉首大学计算机科学与技术专业《操作系统》科目期末试卷A(有答案)

2022年吉首大学计算机科学与技术专业《操作系统》科目期末试卷A(有答案)

2022年吉首大学计算机科学与技术专业《操作系统》科目期末试卷A(有答案)一、选择题1、在一个文件被用户进程首次打开的过程中,操作系统需做的是()A.将文件内容读到内存中B.将文件控制块读到内存中C.修改文件控制块中的读写权限D.将文件的数据缓冲区首指针返回给用户进程2、如果当前读写磁头正在53号柱面上执行操作,依次有4个等待访问的请求,柱面号,依次为98,37,124,65,当采用()算法时,下一次磁头才可能到达37号柱面。

A.先来先服务B.最短寻道时间优先C.电梯调度(初始磁头移动方向向着小磁道方向)D.循环扫描(磁头移动方向向着大磁道方向)3、结构(Cobegin语句1:语句2 Coend)表示语句1和语句2并发执行。

代码如下:X:=0;Y:=0;CobeginBeginX:=1;Y:=Y+X;EndBeginY:=2;X:=X+3;EndCoend当这个程序执行完时,变量X和Y的值有可能为()。

I.X=1,Y=2 II.X=1,Y=3 III.X=4,Y=6A.IB. I和IIC.II和IIID. I、II和III4、对进程的管理和控制使用()。

A.指令B.原语C.信号量D.信箱通信5、一个正在访问临界资源的进程由于申请等待1/0操作而被中断时,它()。

A.允许其他进程进入与该进程相关的临界区B.不允许其他进程进入临界区C.允许其他进程抢占处理器,但不能进入该进程的临界区D.不允许任何进程抢占处理器6、在可变分区分配管理中,某一作业完成后,系统收回其内存空间,并与相邻区合并,为此修改空闲区说明表,造成空闲分区数减1的情况是()。

A.无上邻空闲分区,也无下邻空闲分区B.有上邻空闲分区,但无下邻空闲分区C.无上邻空闲分区,但有下邻空闲分区D.有上邻空闲分区,也有下邻空闲分区7、使用修改位的目的是()。

A.实现LRU页面置换算法B.实现NRU页面置换算法C.在快表中检查页面是否进入D.检查页面是否最近被写过8、假设4个作业到达系统的时刻和运行时间见表。

关于中断服务函数里面是否可以调用其他函数的问题

关于中断服务函数里面是否可以调用其他函数的问题

的值已经改变,从而导致程序运行不正确,反过来亦然。

另一方面,func()与TaskB有直接的调用关系,因而其局部变量b与c不会被互相覆盖,但也不能保证func的局部变量c不会与TaskA或其他任务的局部变量形成可覆盖关系。

根据上述分析我们很容易就能够判断出TaskA和TaskB这两个函数是不可重入的(当然,func也不可重入)。

那么如何让函数成为可重入函数呢?C51编译器采用了一个扩展关键字reentrant作为定义函数时的选项,需要将一个函数定义为可重入函数时,只要在函数后面加上关键字reentrant即可。

厦门城论坛z' V- \0 L/ Z2 A. G) j与非可重入函数的参数传递和局部变量的存储分配方法不同,C51编译器为可重入函数生成一个模拟栈(相对于系统堆栈或是硬件堆栈来说),通过这个模拟栈来完成参数传递和存放局部变量。

模拟栈以全局变量?C_IBP、?C_PBP和?C_XBP作为栈指针(系统堆栈栈顶指针为SP),这些变量定义在DATA地址空间,并且可在文件startup.a51中进行初始化。

根据编译时采用的存储器模式,模拟栈区可位于内部(IDATA)或外部(PDATA或XDATA)存储器中。

如表1所示:表1s. h; j5 s) j- _4 @厦门电子城厦门城电子零件单片机电子,xmecity,电子制作,DIY,电脑元件,9 A/ c6 `2 `6 M4 |注意:51系列单片机的系统堆栈(也叫硬件堆栈或常规栈)总是位于内部数据存储器中(SP为 8位寄存器,只能指向内部),而且是“向上生长”型的(从低地址向高地址),而模拟栈是“向下生长”型的。

, g! c) @% u( z) M/ r: x7 w1、可重入函数参数传递过程剖析 T0 T$ T3 J. R# e在进入剖析之前,先简单讲讲c51函数调用时参数是如何传递的。

简单来说,参数主要是通过寄存器R1~R7来传递的,如果在调用时,参数无寄存器可用或是采用了编译控制指令“NOREGPARMS”,则参数的传递将发生在固定的存储器区域,该存储器区域称为参数传递段,其地址空间取决于编译时所选择的存储器模式。

2022年山西工学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)

2022年山西工学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)

2022年山西工学院计算机科学与技术专业《操作系统》科目期末试卷B(有答案)一、选择题1、文件系统中设立打开(open)系统调用的卡要目的是()。

A.把文件从辅存读到内存B.把文件的控制信息从辅存读到内存C.把文件的FAT表信息从辅存读到内存D.把磁盘文件系统的控制管理信息从辅存读到内存2、用户在删除某文件的过程中,操作系统不可能执行的操作是A.删除此文件所在的目录B.删除与此文件关联的目录项C.删除与此文件对应的文件控制块D.释放与此文件关联的内存缓冲区3、某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台打印机。

当N的取值不超过()时,系统不会发生死锁。

A.4B.5C.6D.74、下列关于银行家算法的叙述中,正确的是()A.银行家算法可以预防死锁B.当系统处于安全状态时,系统中…定无死锁进程C.当系统处于不安全状态时,系统中一定会出现死锁进程D.银行家算法破坏了产生死锁的必要条件中的“请求和保持”条件5、下列选项中,导致创建新进程的操作是()。

I.用户登录成功 II.设备分配 III.启动程序执行A.仅I和IIB.仅II和IIIC. 仅I和IIID. I,II,III6、()存储管理方式提供一维地址结构。

A.分段B.分页C.分段和段页式D.以上都不对7、产生内存抖动的主要原因是()A.内存空间太小B.CPU运行速度太慢C.CPU调度算法不合理D.页面置换算法不合理8、()不是操作系统的功能。

A.CPU管理B.存储管理C.网络管理D.数据管理9、假定下列指令已装入指令寄存器,则执行时不可能导致CPU从用户态变为内核态(系统态)的是()。

A.DIV R0,R1;(R0)/(R1)→ROB.INT n;产生软中断C.NOT RO;寄存器R0的内容取非D.MOV RO,addr;把地址 addr处的内存数据放入寄存器RO中10、某进程的段表内容见表,当访问段号为2、段内地址为400的逻辑地址时,进行地址转换的结果是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在《微机原理》和《计算机组成》等课程[1-4]教学中(本文以MCS-51单片机为例),中断过程既是教学难点又是教学重点,它与主程序调用子程序过程有一定相似性,但又有很大区别,调用子程序过程相对比较容易掌握,通过把两过程结合起来,采用比较教学方法,能收到了很好的教学效果。

1、两过程定义与作用子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。

子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。

子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。

一般微机首先执行主程序,碰到调用指令就转去执行子程序,子程序执行完后,返回指令就返回主程序断点(即调用指令的下一条指令),继续执行没有处理完的主程序,这一过程叫做(主程序)调用子程序过程。

子程序结构可简化程序,防止重复书写错误,并可节省内存空间。

计算机中经常把常用的各种通用的程序段编成子程序,提供给用户使用。

用户在自己编写的程序中,只要会调用这些子程序,就可大大简化用户编程的困难。

中断是计算机中央处理单元CPU与外设I/O交换数据的一种方式,除此方式外,还有无条件、条件(查询)、存贮器直接存取DMA和I/O通道等四种方式。

由于无条件不可靠,条件效率低,DMA和I/O通道两方式硬件复杂,而中断方式CPU效率高,因此一般大多采用中断方式。

中断概念是当计算机正在执行某一(主)程序时,收到一中断请求,如果中断响应条件成立,计算机就把正在执行的程序暂停一下,去响应处理这一请求,执行中断服务程序,处理完服务程序后,中断返回指令使计算机返回原来还没有执行完的程序断点处继续执行,这一过程称为中断过程。

有了中断,计算机才能具有并行处理,实时处理和故障处理等重要功能。

2、两过程的联系与区别2.1联系中断与调用子程序两过程属于完全不同的概念,但它们也有不少相似之处。

两者都需要保护断点(即下一条指令地址)、跳至子程序或中断服务程序、保护现场、子程序或中断处理、恢复现场、恢复断点(即返回主程序)。

两者都可实现嵌套,即正在执行的子程序再调另一子程序或正在处理的中断程序又被另一新中断请求所中断,嵌套可为多级。

正是由于这些表面上的相似处,很容易使学生把两者混淆起来,特别是把中断也看为子程序,这就大错特错了。

2.2区别中断过程与调用子程序过程相似点是表面的,从本质上讲两者是完全不一样的。

两者的根本区别主要表现在服务时间与服务对象不一样上。

首先,调用子程序过程发生的时间是已知和固定的,即在主程序中的调用指令(CALL)执行时发生主程序调用子程序,调用指令所在位置是已知和固定的。

而中断过程发生的时间一般的随机的,CPU在执行某一主程序时收到中断源提出的中断申请时,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的(软中断发生时间是固定的),也可以说,调用子程序是程序设计者事先安排的,而执行中断服务程序是由系统工作环境随机决定的;其次,子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。

而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系;第三,主程序调用子程序过程完全属于软件处理过程,不需要专门的硬件电路,而中断处理系统是一个软、硬件结合系统,需要专门的硬件电路才能完全中断处理的过程;第四,子程序嵌套可实现若干级,嵌套的最多级数由计算机内存开辟的堆栈大小限制,而中断嵌套级数主要由中断优先级数来决定,一般优先级数不会很大。

3、MCS-51单片机两过程详细比较3.1调用子程序过程主程序调用子程序过程应包括保护断点、跳至子程序首址、保护现场、子程序处理、恢复现场、恢复断点(子程序返回)6步。

这六步都是用软件指令完成的。

其中前两步保护断点和跳至子程序首址由调用指令CALL完成。

保护断点其实就是把断点地址推入堆栈中保护起来,要注意的是保护的断点应是紧跟着调用指令的下一条指令地址,而不是调用指令本身地址,否则会引起重复调用“死循环”,这点必须提醒学生注意。

LCALL与ACALL是MCS-51单片机的两条调用指令,分别称为长调用和绝对调用,两指令主要区别在于LCALL后面操作数直接就是16位二进制的子程序入口地址;而ACALL后面操作数只是11位二进制数,子程序入口地址是把这11位数作为低位地址,再加上ACALL的下一条指令地址(即断点地址)的高5位作为高位地址,从而形成16位的子程序入口地址。

由此可知,两条调用指令的调用范围是不一样的,LCALL为64KB程序存贮器任何范围,而ACALL在高5位地址不变的同一页2KB范围内。

由于主程序与子程序可能会使用相同的寄存器和存贮单元存放数据,如果两者这些数据无关,那么子程序在使用这些相同寄存器和存贮单元之前,就必须先把主程序存放在这些区间里的数据现场保护起来,子程序在使用这些区间结束后,再把主程序现场恢复出来,以便子程序返回主程序后,主程序继续使用这些区间。

现场保护与恢复一般采用堆栈推入PUSH指令与堆栈弹出POP指令实现,当然也可采用改变工作寄存器R0~R7区间指针等方法实现。

子程序返回只需用RET指令就可把保护在堆栈中的断点恢复出来,继续执行主程序。

此外,主程序与子程序是密切联系的,它们之间存在着入口参数与出口参数传递问题,也就是主程序如何把输入参数传给子程序,子程序又如何把处理结果的输出参数带回给主程序,两者参数传递一般可采用寄存器或存贮单元、堆栈、数据指针等方法实现。

子程序再调用子程序叫做子程序嵌套,由于MCS-51单片机只能把内部RAM00~7FH 128字节单元作为堆栈使用,断点地址保护到堆栈中需占2字节单元,所以子程序最多可能嵌套64级,当然实际使用中子程序嵌套一般2~3级,否则程序结构就显得太复杂了。

3.2 中断过程中断过程远比调用子程序过程要复杂,它包括中断请求(或申请)、中断排队、中断响应、中断服务(或处理)和中断返回5大步。

这5大步是由硬件和软件结合完成的。

中断请求由中断源向CPU提出。

MCS-51单片机只有T/C0定时/计数器0溢出、T/C1定时/计数器1溢出、TXD/RXD串行口发送与接收一帧完、INT0外部中断0和INT1外部中断1等5个硬件中断源,其中前三个为内部中断源,后两个为外部中断源。

由于CPU在某一时刻只能响应一个中断请求,为处理执行主程序时同时来了多个中断请求和正在处理某一中断时又来了新的中断请求这两种情况,计算机采用硬件或软件给各个中断源按优先权大小进行中断排队,从多个中断申请中选出一个级别最高中断请求而响应之,这一过程称为中断排队。

MCS-51单片机用户可用指令设置高、低两个优先级,而且同级中还有5个固定的隐含优先级,从高到低的优先级顺序分别是INT0、T/C0、INT1、T/C1、TXD/RXD。

这样,在执行主程序时,同时来了两个以上中断请求,则先按高低两级选择高优先级,如只有一个高级就直接选之,如有两个以上都是同级,则按同级隐含优先级,选择其中一个高级别。

如正在执行一个低优先级,又来了一个高优先级(即正在执行的中断级别低于新来的中断级别),则高优先级中断低优先级,这就形成了两级中断嵌套。

如正在执行低的又来了另一低的或者正在执行高的又来了一个低的或高的(即正在执行的中断级别高于或等于新来的中断级别),则不予理睬,不会引起中断嵌套,也就是说同级隐含原则在不同时来了同级中断时无效。

可见,MCS-51单片机最多形成两级中断嵌套。

CPU在执行任何机器指令时,在每一个机器周期T CY都要抽点时间(MCS-51单片机为S5P2状态节拍)来采集查询有无中断请求,如没有,则继续执行原程序机器指令,如有中断请求,则先从中选出级别最高者,在中断响应条件成立时,去处理响应此中断请求。

MCS-51单片机的中断响应必要条件是中断屏蔽总开关EA和中断请求相应的屏蔽分开关都必须闭合,只有这样,中断请求信号才能送到CPU。

此外,还不能碰到以下3种情况,即有优先级更高的中断请求同时提出或者正在执行同级或高级中断,正在执行的指令还没有执行完、正在执行RETI或访问中断屏蔽寄存器IE和中断排队寄存器IP,这3种情况是中断响应的充分条件。

这1种情况中断排队轮不到它响应;第2种情况必须等到现行指令执行完,再响应中断,指令周期分为1、2、4T CY三种机器周期,计算机每个TCY出现仅查看一次中断请求,因此,2T CY和4T CY机器指令有可能没有执行完。

如果执行指令没执行完就去响应中断,则中断处理返回后,计算机很难把分断开执行的同一条指令连贯起来;第3种情况处理与第2种情况类似,但它除了要把现行的RETI指令或访问IE、IP指令执行完处,还需再执行下一条指令,方能响应中断。

利用这个原理,很容易实现单步STEP操作(调试程序时使用)。

中断服务和中断返回又由关(禁止)同级和低级中断、中断请求撤除、保护断点、跳至中断服务程序入口、保护现场、中断处理、恢复现场、开(允许)同级和低级中断、恢复断点(中断返回)等9小步组成。

这9步中断服务过程与前面介绍的6步调用子程序过程类似,只是增加了开、关同级和低级中断请求以及中断请求撤除3步,其余6步完全一致。

开、关同级和低级中断目的是使不同时来中断请求的同级隐含排队原则无效,此时只能实现高级嵌套低级的两级中断嵌套。

在中断处理的返回前清除原中断请求原因是防止同一次中断申请被重复响应。

中断服务过程的前4步是由硬件自动实现的,这点完全不同于调用子程序过程。

当然TXD/RXD中断请求与INT0、INT1电平触发中断请求还需用户分别用软件和硬件清除中断请求。

MCS-51单片机的中断服务程序入口地址是固定的,它们分别是INT0为0003H、T/C0为000BH、INT1为0013H、T/C1为001BH、TXD/RXD为0023H。

断点现场保护与恢复也是通过堆栈推入与弹出或改变工作寄存器区来实现的。

中断处理完后,就应返回断点继续执行主程序,开同级和低级中断、恢复断点2步可用中断返回指令RETI实现,注意子程序返回指令RET只能实现恢复断点,而不能开同级和低级中断。

4、结论中断过程与调用子程序过程是微机原理教学中重点和难点内容之一。

两过程之间既有联系,又有区别。

本文从多个不同角度详细地对比了它们的异同。

对于培养学生编制软件及开展计算机应用方面的能力,具有积极的指导意义,采用这种比较教学法,有利于教学质量的提高。

相关文档
最新文档