您好,欢迎访问三七文档
1第6章中断系统在CPU与外设交换信息时,存在一个快速的CPU与慢速的外设间的矛盾。为解决这个问题,采用了中断技术。良好的中断系统能提高计算机实时处理的能力,实现CPU与外设分时操作和自动处理故障,从而扩大了计算机的应用范围。当CPU正在处理某项事务的时候,如果外界或内部发生了紧急事件,要求CPU暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。向CPU提出中断请求的源称为中断源。微型计算机一般允许有多个中断源。当几个中断源同时向CPU发出中断请求时,CPU应优先响应最需紧急处理的中断请求。为此,需要规定各个中断源的优先级,使CPU在多个中断源同时发出中断请求时能找到优先级最高的中断源,响应它的中断请求。在优先级高的中断请求处理完了以后。再响应优先级低的中断请求。当CPU正在处理一个优先级低的中断请求的时候,如果发生另一个优先级比它高的中断请求,CPU能暂停正在处理的中断源的处理程序,转去处理优先级高的中断.请求,待处理完以后,再回到原来正在处理的低级中断程序,这种高级中断源能中断低级中断源的中断处理称为中断嵌套。MCS-51系列单片机允许有五个中断源,提供两个中断优先级(能实现二级中断嵌套)。每一个中断源的优先级的高低都可以通过编程来设定。中断源的中断请求是否能得到响应,受中断允许寄存器IE的控制;各个中断源的优先级可以由中断优先级寄存器IP中的各位来确定;同一优先级中的各中断源同时请求中断时,由内部的查询逻辑来确定响应的次序。这些内容都将在本节中讨论。6.1中断请求源和中断请求标志1、中断请求源MCS-51中断系统可用图6-1来表示。五个中断源是:◆0INT来自P3.2引脚上的外部中断请求(外中断0)。◆1INT来自P3.3引脚上的外部中断请求(外中断1)。◆T0片内定时器/计数器0溢出(TF0)中断请求。◆T1片内定时器/计数器1溢出(TF1)中断请求。◆串行口片内串行口完成一帧发送或接收中断请求源TI或RI。每一个中断源都对应有一个中断请求标志位,它们设置在特殊功能寄存器TCON和SCON中。当这些中断源请求中断时,分别由TCON和SCON中的相应位来锁存。21IT0=0IT0=1INT0T0T1TXRXTCONIEEX0EAIPPX01111100000PSPT1PX1PT0SCON中断标志源允许总允许硬件查询矢量地址矢量地址自然优先级自然优先级IT1=0IT1=1INT1IE0TF0IE1TF1TIRIEX0EX1≥1ET1ES优先级高级中断请求PC低级中断请求PC图6-1中断系统2、中断标志⑴定时器控制寄存器TCONTCON是定时器/计数器0和1(T0,T1)的控制寄存器,它同时也用来锁存T0,T1的溢出中断请求源和外部中断请求源。TCON寄存器中与中断有关的位如下图所示。D7D6D5D4D3D2D1D0TF1TF0IE1IT1IE0IT0其中:①TF1定时器/计数器1(T1)的溢出中断标志。当T1从初值开始加1计数到计数满,产生溢出时,由硬件使TF1置“1”,直到CPU响应中断时由硬件复位。②TF0定时器/计数器0(T0)的溢出中断标志。其作用同TF1。③IE1外中断1中断请求标志。如果IT1=1,则当外中断1引脚1INT上的电平由1变0时,IE1由硬件置位,外中断1请求中断。在CPU响应该中断时由硬件清0。3④IT1外部中断1(1INT)触发方式控制位。如果IT1为1,则外中断1为负边沿触发方式(CPU在每个机器周期的S5P2采样1INT脚的输入电平,如果在一个周期中采样到高电平,在下个周期中采样到低电平,则硬件使IE1置1,向CPU请求中断);如果IT1为0,则外中断1为电平触发方式。此时外部中断是通过检测1INT端的输入电平(低电平)来触发的。采用电平触发时,输入到1INT的外部中断源必须保持低电平有效,直到该中断被响应。同时在中断返回前必须使电平变高,否则将会再次产生中断。⑤IE0外中断0中断请求标志。如果IT0置1,则当0INT上的电平由1变0时,IE0由硬件置位。在CPU把控制转到中断服务程序时由硬件使IE0复位。⑥IT0外部中断源0触发方式控制位。其含义同IT1。⑵、串行口控制寄存器SCON串行口控制寄存器SCON中的低2位用作串行口中断标志,如下图所示。D7D6D5D4D3D2D1D0TIRI其中:RI串行口接收中断标志。在串行口方式0中,每当接收到第8位数据时,由硬件置位RI;在其他方式中,当接收到停止位的中间位置时置位RI。注意,当CPU转入串行口中断服务程序入口时不复位RI,必须由用户用软件来使RI清0。TI串行口发送中断标志。在方式0中,每当发送完8位数据时由硬件置位TI;在其他方式中于停止位开始时置位。TI也必须由软件来复位。6.2中断控制1、中断允许和禁止在MCS-51中断系统中,中断允许或禁止是由片内的中断允许寄存器IE(IE为特殊功能寄存器)控制的,IE中的各位功能如下:D7D6D5D4D3D2D1D0EAESET1EX1ET0EX0其中:4EACPU中断允许标志。EA=0,CPU禁止所有中断,即CPU屏蔽所有的中断请求;EA=1,CPU开放中断。但每个中断源的中断请求是允许还是被禁止,还需由各自的允许位确定(见D4~D0位说明)。ES串行口中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。ET1定时器/计数器1(T1)的溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。EX1外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。ET0定时器/计数器0(T0)的溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。EX0外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。中断允许寄存器中各相应位的状态,可根据要求用指令置位或清0,从而实现该中断源允许中断或禁止中断,复位时IE寄存器被清0。2、中断优先级控制MCS-51中断系统提供两个中断优先级,对于每一个中断请求源都可以编程为高优先级中断源或低优先级中断源,以便实现二级中断嵌套。中断优先级是由片内的中断优先级寄存器IP(特殊功能寄存器)控制的。IP寄存器中各位的功能说明如下:D7D6D5D4D3D2D1D0PSPT1PX1PT0PX0其中:PS串行口中断优先级控制位。PS=1,串行口定义为高优先级中断源;PS=0,串行口定义为低优先级中断源。PT1T1中断优先级控制位。PT1=1,定时器/计数器1定义为高优先级中断源;PT1=0,定时器/计数器1定义为低优先级中断源。PX1外部中断1中断优先级控制位。PX1=1,外中断1定义为高优先级中断源;PX1=0,外中断1定义为低优先级中断源。PT0定时器/计数器0(T0)中断优先级控制位,功能同PT1。PX0外部中断0中断优先级控制位。功能同PX1。中断优先级控制寄存器IP中的各个控制位都可由编程来置位或复位(用位操作指令或字节操作指令),单片机复位后IP中各位均为0,各个中断源均为低优先级中断源。3中断优先级结构MCS-51中断系统具有两级优先级(由IP寄存器把各个中断源的优先级分为高优先级和低优先级),它们遵循下列两条基本规则:(1)低优先级中断源可被高优先级中断源所中断,而高优先级中断源不能被任何中5断源所中断;(2)一种中断源(不管是高优先级或低优先级)一旦得到响应,与它同级的中断源不能再中断它。为了实现上述两条规则,中断系统内部包含两个不可寻址的优先级状态触发器。其中一个用来指示某个高优先级的中断源正在得到服务,并阻止所有其它中断的响应;另一个触发器则指出某低优先级的中断源正得到服务,所有同级的中断都被阻止,但不阻止高优先级中断源。当同时收到几个同一优先级的中断时,响应哪一个中断源取决于内部查询顺序。其优先级排列如下:中断源同级内的中断优先级外部中断0最高定时器/计数器0溢出中断外部中断1定时器/计数器1溢出中断串行口中断最低6.3中断响应1、中断响应过程CPU在每个机器周期的S5P2时刻采样中断标志,而在下一个机器周期对采样到的中断进行查询。如果在前一个机器周期的S5P2有中断标志,则在查询周期内便会查询到并按优先级高低进行中断处理,中断系统将控制程序转入相应的中断服务程序。下列三个条件中任何一个都能封锁CPU对中断的响应:(1)CPU正在处理同级的或高一级的中断;(2)现行的机器周期不是当前所执行指令的最后一个机器周期;(3)当前正在执行的指令是返回(RETI)指令或是对IE或IP寄存器进行读/写的指令。上述三个条件中,第二条是保证把当前指令执行完,第三条是保证如果在当前执行的是RETI指令或是对IE,IP进行访问的指令时,必须至少再执行完一条指令之后才会响应中断。中断查询在每个机器周期中重复执行,所查询到的状态为前一个机器周期的S5P2时采样到的中断标志。这里要注意的是:如果中断标志被置位,但因上述条件之一的原因而未被响应,或上述封锁条件已撤消,但中断标志位已不再存在(已不再是置位状态)时,被拖延的中断就不再被响应,CPU将丢弃中断查询的结果。也就是说,CPU对中断标志置位后,如未及时响应而转入中断服务程序的中断标志不作记忆。CPU响应中断时,先置相应的优先级激活触发器,封锁同级和低级的中断。然后根6据中断源的类别,在硬件的控制下,程序转向相应的向量入口单元,执行中断服务程序。硬件调用中断服务程序时,把程序计数器PC的内容压入堆栈(但不能自动保存程序状态字PSW的内容),同时把被响应的中断服务程序的入口地址装入PC中。五个中断源服务程序的入口地址是:中断源入口地址外部中断00003H定时器0溢出000BH外部中断10013H定时器1溢出001BH串行口中断0023H通常,在中断入口地址处安排一条跳转指令,以跳转到用户的服务程序入口。中断服务程序的最后一条指令必须是中断返回指令RETI。CPU执行完这条指令后,把响应中断时所置位的优先级激活触发器清0,然后从堆栈中弹出两个字节内容(断点地址)装入程序计数器PC中,CPU就从原来被中断处重新执行被中断的程序。2、中断响应时间外部中断0INT和1INT的电平在每个机器周期的S5P2时被采样并锁存到IE0和IE1中,这个置入到IE0和IE1的状态在下一个机器周期才被查询电路查询,如果产生了一个中断请求,而且满足响应的条件,CPU响应中断,由硬件生成一条长调用指令转到相应的服务程序入口。这条指令是双机器周期指令。因此,从中断请求有效到执行中断服务程序的第一条指令的时间间隔至少需要三个完整的机器周期。如果中断请求被前面所述的三个条件之一所封锁,将需要更长的响应时间。若一个同级的或高优先级的中断已经在进行,则延长的等待时间显然取决于正在处理的中断服务程序的长度,如果正在执行的一条指令还没有进行到最后一个周期,则所延长的等待时间不会超过三个机器周期,这是因为MCS-51指令系统中最长的指令(MUL和DIV)也只有四个机器周期;假若正在执行的是RETI指令或者是访问IE或IP指令,则延长的等待时间不会超过五个机器周期(为完成正在执行的指令还需要一个周期,加上为完成下一条指令所需要的最长时间——四个周期,如MUL和DIV指令)。因此,在系统中只有一个中断源的情况下,响应时间总是在三个机器周期到八个机器周期之间。6.4外部中断触发方式MCS-51的外部中断INTx(0INT和1INT)可以用程序控制为电平触发或负边沿触发(通过编程对定时器/计数器控制寄存器TCON中的IT0和IT1位进行清“0”或置“1”)。7若ITX(X=0,1)为0,则外部中断INTx程控为电平触发,由INTx引脚上所检测到的低电平(必须保持到CPU响应该中断时为止,并且还应在中断返回前变为高电平)触发。若ITX=1,则外部中断INTx由负边沿触发。即在相继的两个机器周期中,前一个周期从INTx引脚上检测到高电平,而在后一个周期检测到低电平,则置位TCON寄存器中的中断请
本文标题:第6章中断系统
链接地址:https://www.777doc.com/doc-2197088 .html