理论教育 MCS-51系列单片机内部结构解析

MCS-51系列单片机内部结构解析

时间:2023-07-01 理论教育 版权反馈
【摘要】:MCS-51系列单片机的内部结构如图7-3所示,可将其分为CPU、存储器、I/O口、定时器/计数器和中断系统5部分。图7-3 MCS-51系列单片机内部结构框图控制器 控制器包括程序计数器PC、指令寄存器IR、指令译码ID、振荡器及定时电路等。图7-5 MCS-51系列单片机的存储器结构程序存储器的操作完全由程序计数器控制。

MCS-51系列单片机内部结构解析

MCS-51系列单片机的内部结构如图7-3所示,可将其分为CPU(中央处理单元)、存储器、I/O(输入/输出)口、定时器/计数器和中断系统5部分。

1.CPU

CPU(中央处理单元)是单片机的核心,由运算器、控制器和专用寄存器组三部分电路组成。

(1)运算器 包括一个可进行8位算术运算和逻辑运算的ALU,8位暂存器1、暂存器2,8位累加器ACC,寄存器B和程序状态寄存器PSW等。算术逻辑部件(ALU)既可以进行加、减、乘、除四则运算,也可以进行与、或、非、异或等逻辑运算,还具有传送、移位、判断和程序转移等功能。

978-7-111-46732-8-Chapter07-14.jpg

图7-3 MCS-51系列单片机内部结构框图

(2)控制器 控制器包括程序计数器PC、指令寄存器IR、指令译码ID、振荡器及定时电路等。指令寄存器用于存放从程序存储器中取出的指令码。振荡器和定时电路用于对IR中指令码译码,并在OSC配合下产生指令的时序脉冲,以完成相应指令的执行。OSC是控制器的心脏,能为控制器提供时钟脉冲。

(3)专用寄存器组 专用寄存器组主要用来指示当前要执行指令的内存地址、存放操作数和指令执行后的状态等。它包括程序计数器PC、累加器A、程序状态寄存器PSW、堆栈指针SP、数据指针DPTR和通用寄存器B等。

1)程序计数器PC(Program Counter):程序计数器是一个二进制16位的程序地址寄存器,专门用来存放下一条需要执行指令的内存地址,能自动加1。

2)累加器A(Accumulator):累加器A又记作ACC,是一个具有特殊用途的二进制8位寄存器,专门用来存放操作数或运算结果。

3)通用寄存器B(General Purpose Register):通用寄存器B是专门为乘法和除法设置的寄存器,是二进制8位寄存器。该寄存器在乘法和除法后,用来存放乘积高8位或除法的余数。

4)程序状态寄存器PSW(Program Status Word):PSW是一个8位标志寄存器,用来存放指令执行后的有关状态。PSW中的各位通常是在指令执行过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。它的各标志位定义如下:

978-7-111-46732-8-Chapter07-15.jpg

进位标志位Cy——表示加减过程中累加器最高位有无进位或借位。若有,则Cy=1;否则,Cy=0。辅助进位标志位AC——表示加减运算时低4位有无向高4位进位或借位。若有,则AC=1;否则,AC=0。

用户标志位F0——用户可以根据自己的需要对此位赋予一定的含义。

寄存器选择位RS1和RS0——8051共有8个8位寄存器,分别命名为R0~R7。用户可以用软件改变它们的组合值,切换当前选用的工作寄存器组。其组合关系见表7-3。

7-3 RS1、RS0的组合关系

978-7-111-46732-8-Chapter07-16.jpg

溢出标志位OV——指示运算过程中是否发生了溢出,机器在执行指令过程中自动形成。

奇偶标志位P——用于指示运算结果中1的个数的奇偶性。若P=1,则为奇数,否则P=0。

5)堆栈指针SP(Stack Pointer):SP是一个8位寄存器,能自动加1或减l,专门用来存放堆栈的栈顶地址。在堆栈中,数据的存取是以“先进后出”的原则。使用堆栈之前,先给SP赋值,规定栈的起始位置。SP指针是一个双向计数器,进栈时,SP内容自动增加,出栈时自动减值。

6)数据指针DPTR(DataPointer):DPTR是一个16位的寄存器,其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,可以用来存放片内ROM地址和片外RAM、ROM地址。取址/执行时序如图7-4所示。

978-7-111-46732-8-Chapter07-17.jpg

图7-4 MCS-51系列单片机取址/执行时序

每个机器周期(12个振荡周期)由6个状态周期组成,而每个状态周期由两个时相P1、P2组成,所以一个机器周期可依次表示为S1P1、S1P2、S2P1、S2P2、…、S6P1、S6P2。一般情况下,算术逻辑操作发生在时相P1期间,而内部寄存器之间的传送发生在时相P2期间,图中标明的内部状态和时相表明了CPU指令取出和执行的时序。这些内部时钟信号无法从外部观察,故用XTAL2振荡信号作参考,而ALE可作为外部工作状态指示信号用。

对于单周期指令,读入指令寄存器时,从S1P2开始执行命令。如果为双字节指令,则在同一机器周期的S4读入第二字节,如果它为单字节指令,则在S4周期读入的指令操作码无效,而且程序计数器不加1。在任何情况下,到达S6P2时结束指令操作。图7-4中(A)、(B)分别为单字节单周期和双字节单周期指令的时序。MCS-51系列单片机一般情况下,双字节指令都在一个机器周期内执行完,对于双周期指令,不论是单字节还是双字节,都是在第一个机器周期内读完操作数,如图7-4中(C)、(D)所示。

2.存储器

单片机的存储器有程序存储器(ROM)与数据存储器(RAM),在使用上是严格区分的。程序存储器存放程序指令及常数、表格等;数据存储器则存放缓冲数据。

(1)程序存储器的结构及运行操作 程序存储器的结构如图7-5a所示。可直接寻址范围为64KB。对于片内有ROM/EPROM的单片机8051/8751,当管脚EA=1,低4K地址(0000H~0FFFH)指向片内;EA=0时,则向片外。对于片内无ROM/EPROM的单片机8031构成应用系统时,必须使EA=0。

978-7-111-46732-8-Chapter07-18.jpg

图7-5 MCS-51系列单片机的存储器结构

程序存储器的操作完全由程序计数器(PC)控制。PC值指向程序指令操作码单元,则程序执行该操作指令;PC值指向常数、表格单元,则实现取数、查表操作。因此,程序存储器的操作为程序运行与查表操作两类。

1)程序运行控制操作:程序运行控制有复位控制、中断控制和转移控制。

复位控制与中断控制有相应的硬件结构,其程序入口地址是固定的,见表7-4。转移控制由转移指令给定,有条件转移指令与无条件转移指令,请参照指令系统表。

2)查表操作:MCS-51指令系统提供了两条查表指令(MOVC),其寻址方式是采用基址加偏址的间接寻址方式。

MOVC A,@A+DPTR 该指令是把A作为一个无符号偏址数据加到DPTR上,把所得的地址内容送到累加器A中,DPTR作为一个16位的基址寄存器,执行完指令后,DPTR的内容不变。

MOVC A,@A+PC 该指令是以PC作为基址寄存器,A作为偏址数据,相加后所得数据作为地址,取出该地址内容送入累加器A中,该指令执行完以后PC值不变,仍指向下一条指令。

7-4 复位中断入口地址

978-7-111-46732-8-Chapter07-19.jpg

(2)数据存储器的结构及运行操作 数据存储器的结构如图7-5b所示。由于片内、外数据存储器使用不同的指令(MOV与MOVX),即使数据存储器的片、内外地址重叠,也不会造成操作混乱。片内数据存储器与工作寄存器统一编址。

1)片内数据存储器结构如图7-6所示。由工作寄存器、位寻址区、数据缓冲区组成,堆栈可在07H以上不使用的连续单元任意设置。片内数据存储器的复位状态及操作方法见表7-5。片内存储器中任一单元都可以作为直接地址(direct)或间接地址(@Ri,i=0,1)的内容与累加器(A)、立即数进行图7-7所示的操作。片内数据存储器的间接寻址是通过工作寄存器R0、R1进行的,标记为@Ri。

978-7-111-46732-8-Chapter07-20.jpg

图7-7 片内数据存储器的结构及操作

2)片外数据存储器的操作:片外数据存储器的最低位的128个地址单元与片内数据存储器地址重叠,并且与I/O(输入/输出)口统一编址。片外数据存储器只有间接传送指令、MOVX一种操作方式。其地址指针可用DPTR或Ri,其指令如下:

MOVX @DPTR,A 和 MOVX A,@DPTR

MOVX @Ri, A 和 MOVX A,@Ri

使用Ri作地址指针时,高8位由传送指令给P2赋值而定,低8位即为@Ri。

7-5 片内数据存储器的复位状态及操作方法

978-7-111-46732-8-Chapter07-21.jpg

3.I/O口

(1)I/O口的内部结构 I/O口的每一位结构如图7-8所示,每一位均由锁存器、输出驱动器和输入缓冲器组成。图中的上拉电阻实际上是由场效应晶体管构成的,并不是线性电阻。

978-7-111-46732-8-Chapter07-22.jpg

图7-8 I/O口的每一位结构

P0口和P2口在对外部存储器进行读/写时要进行地址/数据的切换,故在P0、P2口的结构中设有多路转换器,分别切换到地址/数据和内部地址总线上,如图7-8a、c所示。多路转换器的切换由内部控制信号控制。P1口作为第一功能使用时,第二功能输出控制线应为电平,如图7-8b所示。这时,与非门的输出取决于口锁存器状态,P3口的结构、操作与P1口相同。P3口作第二功能使用时,相应的口锁存器必须为1状态,此时,与非的输出状态由第二功能输出控制线的状态确定,反映了第二功能输出电平状态。

P1、P2、P3口均有内部上拉电阻,如图7-8b、c、d所示。当它们用作输入方式时,各口对应的锁存器必须先置1,由此关断输出驱动器(场效应晶体管)。这时P1、P2、P3口相应引脚内部的上拉电阻可将电平上拉成高电平,然后进行输入操作;当输入为低电平时,它能拉低为低电平输入。

P0口与其他I/O口不同,内部没有上拉电阻。图中驱动器上方的场效应晶体管仅用于外部存储器读/写时,作为地址/数据线用。其他情况下,场效应晶体管被开路,因而P0口具有开漏输出。如果再给锁存器置入“1”状态,使输出的两个场效应晶体管均关断,使引脚处于“浮空”,就成为高阻状态。由于P1、P2、P3口内部均有固定的上拉电阻,故皆为准双向口。在作输入时,可用一般方法由任何一种TIL或MOS电路所驱动。

(2)I/O口的读—修改—写操作 由图7-8可见,每个输入/输出口具有两种读入方法,即读锁存器和读引脚,并有相应的指令。读锁存器指令都是从锁存器中读取数据,进行处理,并保证处理后的数据重新写入锁存器中,这类指令成为读—修改—写指令。

在ANL、ORL、XRL;JBC;CPL;INC、DEC;DJNZ;MOV;CLR;SETB等指令中,当目的操作数为某一I/O口或I/O的某一位时,这些指令均为读—修改—写指令。读引脚指令一般都是以I/O端口为源操作数的指令,执行读引脚指令时,打开三态门,输入口状态。例如,读P1口的输入状态时,读引脚指令为:MOV A,P1

根据I/O口的结构及CPU的控制,当执行读引脚操作后,口锁存器状态与引脚状态应相同;但当给口锁存器写入某一状态后,响应的口引脚是否呈现锁存器状态与外电路的连接有关。例如用I/O口线驱动晶体管时,该口线锁存器写入“1”后使晶体管导通,而晶体管一旦导通,基极电平为“0”。如果该口线无读引脚操作时,口锁存器与引脚状态不一致。

(3)I/O口的写操作及负载能力 执行改变锁存器数据的指令时,在该指令的最后一个时钟周期里将数据写入锁存器。然而输出缓冲器仅仅在每个状态周期的相位1(P1)期间采样口锁存器,因而锁存器中的新数据在下一个状态周期的相位1出现之前是不会出现在输出线上的。

P1、P2、P3口的输出缓冲器可驱动4个LSTFL电路。对于上述HMOS芯片单片机的输入/输出口,在正常情况下,可任意由TFL或NMOS电路驱动。HMOS及CHMOS型单片机的输入输出口由集电极开路或漏极开路的输出来驱动时,不必加上拉电阻。

P0口输出缓冲器能驱动8个LSTFL电路,驱动MOS电路需外接上拉电阻,但P0口用做地址/数据总线时,可直接驱动MOS的输入而不必加上拉电阻。

4.定时器/计数器

(1)结构 定时器与计数器在组成上有着内在联系,定时器是一种特殊的计数器——记录时间间隔的计数器,而计数器是记录信号(通常为脉冲信号)个数的电路。在许多单片机系统中,定时器与计数器都由一套电路来组成,称为“定时器/计数器(Timer/Counter)”。

单片机中的计数器通常按二进制计数,计数的范围用二进制的位数来表示,如8位、16位计数器等。计数器的初始值可由软件来设置,计数器超过计数范围的情况,称为溢出。溢出时,相应的溢出标志位置位。

如果计数信号由内部的基准时钟源提供,则此时的计数器就变为定时器了。

单片机中的定时器/计数器由程序来设置其工作模式,如设置为定时器工作模式,就不能作为计数器使用;如设置为计数器工作模式,就不能作为定时器使用。定时器/计数器溢出时,叫通过中断方式通知CPU。

MCS-51单片机的51系列有两个定时器/计数器,分别记为′Timer0和′Timerl或T0和T1。

每个定时器/计数器有一个外部输入端(T0和T1)、一个16位的二进制加法计数器(TH0、TL0和TH1、TL1)以及两个内部特殊功能寄存器TMOD和TCON。TMOD(Timer/Counter Mode Control)是定时器/计数器模式控制寄存器,其格式如下(寄存器各位不可位寻址):

978-7-111-46732-8-Chapter07-23.jpg

TMOD被分成两部分,每部分4位,分别用于定时器/计数器0和定时器/计数器1。其中GATE和978-7-111-46732-8-Chapter07-24.jpg用于控制计数信号的输入,M1、M0用于定义计数器的工作方式;TCON是定时器/计数器控制寄存器,其格式如下(寄存器各位可位寻址):

978-7-111-46732-8-Chapter07-25.jpg

TCON也被分成两部分,高4位用于定时器/计数器。其中TRl、TR0用于控制计数信号的输入,TFl、TF0为计数器的溢出位

(2)原理 定时器/计数器中心部件为两个内部的8位二进制加法计数器,即TH0、TL0和THl、TL1,它们同时也是程序可访问的寄存器,相应的地址为8CH(TH0)、8AH(TL0)、8DH(TH1)、8BH(TL1)。

掌握定时器/计数器的工作原理,可从以下三个方面考虑:

1)计数信号的选择和控制。以定时器/计数器0为例,计数信号的选择和控制如图7-9所示。

978-7-111-46732-8-Chapter07-26.jpg

图7-9 计数信号的选择和控制

由图7-9可看出,计数信号的选择和控制通过TMOD中的GATE、978-7-111-46732-8-Chapter07-27.jpg和TCON中的

TR0这三个控制位来实现。TMOD中的978-7-111-46732-8-Chapter07-28.jpg用于选择计数信号的来源:978-7-111-46732-8-Chapter07-29.jpg,计数信号取自于内部,其计数频率为晶振频率的1/12,此时工作于定时器模式;978-7-111-46732-8-Chapter07-30.jpg,计数信号来自于外部T0(P3.4),此时工作于计数器模式。

在计数器模式下,CPU检测外部T0(P3.4)或T1(P3.5)引脚,当出现“1”到“0”的跳变时,作为一个计数信号,使内部计数器加1。因为检测需要两个机器周期,所以能检测到的最大计数频率为CPU晶振频率的1/24。

TMOD中的GATE和TCON中的TR0用于控制计数脉冲的接通,通常有两种使用方法:

①GATE=0时,仅仅由程序设置TR0=1来接通计数脉冲,由程序设置TR0=0来停止计数。此时与外部978-7-111-46732-8-Chapter07-31.jpg无关。

②GATE=1时,先由程序设置TR0=1,然后由外部IN T 0=1来控制接通计数脉冲,978-7-111-46732-8-Chapter07-32.jpg则停止计数。如TR0=0,则禁止978-7-111-46732-8-Chapter07-33.jpg来控制接通计数脉冲。

所以,GATE位是专门用来选择计数启动方式的控制位,GATE=0时可由程序来启动计数,GATE=1时可由外部硬件通过978-7-111-46732-8-Chapter07-34.jpg端来启动计数。

利用978-7-111-46732-8-Chapter07-35.jpg时的特性,通过定时器可测量978-7-111-46732-8-Chapter07-36.jpg端或978-7-111-46732-8-Chapter07-37.jpg的正脉冲宽度

2)两个8位计数器的级联。两个8位计数器均为加法计数器,它们的级联和计数范围是由TMOD中的M1、M0来控制的。M1、M0可设置四种内部计数的工作方式,见表7-6。

7-6 计数器工作方式

978-7-111-46732-8-Chapter07-38.jpg

图7-10为定时器/计数器的工作方式0和工作方式1示意图。两者的区别仅在于:对工作方式0,TL0为5位二进制加法计数器;对工作方式1,TL0为8位二进制加法计数器。

978-7-111-46732-8-Chapter07-39.jpg

图7-10 定时器/计数器的工作方式0和工作方式1示意图

工作方式0主要为兼容早期的MCS—48单片机所保留,一般可用工作方式1来代替。

工作方式1的特点是:计数范围宽,但每次的初值均要由程序来设置。

工作方式2的特点是:初值只需设置一次,每次溢出后,初值自动会从TH0加载到TL0或从TH1加载到TL1。但计数范围较工作方式1小。定时器/计数器的工作方式2,如图7-11所示。

978-7-111-46732-8-Chapter07-40.jpg

图7-11 定时器/计数器的工作方式2

工作方式3的特点是:增加了—个独立的计数器,但只能适用于定时器/计数器0,而且占用了定时器/计数器1的TR1和TF1,所以此时的定时器/计数器1只能用于不需要中断的应用,如作为串行口的波特性发生器。定时器/计数器的工作方式3,如图7-12所示。

978-7-111-46732-8-Chapter07-41.jpg

图7-12 定时器/计数器的工作方式3

以上四种工作方式对溢出处理均相同,加法计数超出范围后,溢出信号将使TCON中的TF0或TF1置位,计数值回到0或初值,重新开始计数。TF0或TF1置位后,可向CPU提出中断请求。TF0和TF1在CPU响应中断后会自动复位,而在禁止中断响应时,也可由软件来复位。

3)定时和计数范围的计算。由于内部计数器TH0、TL0和TH1、TL1的溢出值固定不变,所以定时和计数范围只能通过设置初值来控制。下面主要介绍工作方式1和工作方式2的计数范围计算。

①工作方式1。工作方式1的计数范围为216-初值=10000H-初值=65536-初值。初值的取值范围为0000H~OFFFFH,即0~65535。当初值为0时,可得最大计数值Nmax=65536;而初值为0FFFFH=65535时,可得最小计数值Nmin=1。

定时时间T为计数范围乘上计数周期,即

978-7-111-46732-8-Chapter07-42.jpg

根据定时时间T可计算出应设置的初值为

978-7-111-46732-8-Chapter07-43.jpg

当晶振频率fosc=12MHz时,计数周期为1μs,当初值为0时,可得最大定时时间Tmax为65536μs,即65.536ms。如果设置定时时间T=5ms=5000μs,则978-7-111-46732-8-Chapter07-44.jpg,且TH0、TL0或TH1、TL1的初值可设置为0ECH、78H。

②工作方式2。工作方式2的计数范围为28-初值=100H-初值=256-初值。初值取值范围为

000H~0FFH,即0~255。当初值为0时,可得最大计数值Nmax=256;而初值为0FFH=255时,可得最小计数值Nmin=1。

定时时间T为计数范围乘上计数周期,即

978-7-111-46732-8-Chapter07-45.jpg(www.daowen.com)

根据定时时间T可计算出应设置的初值,即

978-7-111-46732-8-Chapter07-46.jpg

当晶振频率fosc=12MHz时,最大定时时间Tmax只有256μs,即0.256ms。如果设置定时时间T=0.1ms=μs,则

978-7-111-46732-8-Chapter07-47.jpg

即TH0或TH1的初值可设置为9CH。

在实际应用过程,这些范围往往不能满足要求,这就需要通过程序来扩展计数范围和定时范围,此时常要用到中断处理。

5.中断系统

“存储程序和程序控制”是计算机的基本工作原理。CPU平时总是按照规定顺序执行程序存储器中的指令,但在实际应用中,有许多外部或内部事件需要CPU及时处理,这就要改变CPU原来执行指令的顺序。计算机中的“中断(Interrupt)”就是指由于外部或内部事件而改变原来CPU正在执行指令顺序的一种工作机制。

计算机的中断机制涉及三个内容:中断源、中断控制和中断响应。中断源是指引起中断的事件,中断控制是指中断的允许/禁止、优先和嵌套等处理方式,中断响应是指确定中断入口、保护现场、进行中断服务、恢复现场和中断返回等过程。在计算机中,能实现中断功能的部件称为中断系统。

MCS-51单片机的中断系统由中断源、中断控制电路和中断入口地址电路等部分组成。结构框图如图7-13所示。

978-7-111-46732-8-Chapter07-48.jpg

图7-13 MCS-51单片机的中断系统结构框图

从MCS-51中断系统结构框图中可看出,中断系统涉及的四个寄存器是:定时器/计数器控制寄存器TCON(Timed Counter Control)、串行口控制寄存器SCON(SerialPortContro1)、中断允许寄存器rE(Interrupt Enable)和中断优先级寄存器IP(Interrupt Priority)。外部中断事件与输入引脚978-7-111-46732-8-Chapter07-49.jpg978-7-111-46732-8-Chapter07-50.jpg、T0、T1、TXD、RXD有关。

(1)中断源 MCS-51单片机中有三类中断源:两个外部中断、两个定时器/计数器中断和一个串行口中断。这些中断源提出中断请求后会在专用寄存器TCON和SCON中设置相应的中断标志。TCON寄存器的格式如下:

978-7-111-46732-8-Chapter07-51.jpg

其中与中断有关的位是IE0、IE1为外部中断请求标志,TF0、TF1为计数器/定时器中断请求标志,IE0、IE1为外部中断请求信号类型选择控制位。

SCON寄存器的格式如下:

978-7-111-46732-8-Chapter07-52.jpg

其中与中断有关的位是串行口发送和接收中断请求标志TI、RI。

各中断源提出中断请求的过程说明如下。

1)外部中断。外部中断源是通过两个外部引脚978-7-111-46732-8-Chapter07-53.jpg978-7-111-46732-8-Chapter07-54.jpg引入的。

978-7-111-46732-8-Chapter07-55.jpg为外部中断0请求信号。有两种有效的中断请求信号:专用寄存器978-7-111-46732-8-Chapter07-56.jpg中的IT0位(即TCON.0)置为“0”,表示978-7-111-46732-8-Chapter07-57.jpg有效的中断请求信号为低电平;TCON中的IT0位为“1”,表示INT0有效的中断请求信号为由高电平变为低电平的下降沿。一但出现有效的中断请求信号,会使TCON中的IE0位(即TCON.1)置位,由此向CPU提出978-7-111-46732-8-Chapter07-58.jpg的中断请求。

978-7-111-46732-8-Chapter07-59.jpg1为外部中断1请求信号,与978-7-111-46732-8-Chapter07-60.jpg类似,中断请求信号是低电平有效还是下降沿有效,由专用寄存器TCON中的ITl位(即TCON.2)来控制。有效的中断请求信号,会使TCON中的IEl位(即TCON.3)置为“1”,由此向CPU提出978-7-111-46732-8-Chapter07-61.jpg的中断请求。

CPU响应中断后会自动清除TCON中的中断请求标志位IE0和IE1。

2)定时器/计数器中断。定时器/计数器的中断源是由其溢出位引入的。当定时器/计数器到达设定的时间或检测到设定的计数脉冲后,其溢出位置位。

TF0和TF1分别为定时器/计数器0和定时器/计数器1的溢出位,它们位于专用寄存器TCON的bit5和bit7。当定时器/计数器溢出时,相应的TF0或TF1就会置为“1”,由此向CPU提出定时器/计数器的中断请求。CPU响应中断后,会自动清除这些中断请求标志位。

定时器/计数器的计数脉冲由外部引脚T0和T1引入时,定时器/计数器就变为计数器。当计数脉冲使得定时器计数溢出时,相应的TF0或TFl就会置为“1”,由此向CPU提出计数器的中断请求。

3)串行口中断。串行口发送完一帧串行数据或接收到一帧串行数据后,都会发出中断请求。专用寄存器SCON中的T1(SCON.1,)和RI(SCON.0)为串行中断请求标志位。

T1为串行发送中断标志。一帧串行数据发送结束后,由硬件置位。T1置位既表示一帧信息发送结束,同时也是中断请求信号,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方法来发送下一个数据。

RI为接收中断标志位。接收到一帧串行数据后,由硬件置位,RI置位既表示一帧数据接收完毕,同时也是中断请求信号,可用查询的方法或者用中断的方法及时处理接收到的数据,否则下一帧数据会将前一帧数据冲掉。

TI、RI与前面的中断请求标志位IE0、IE1、TF0、TF1不同,CPU响应中断后不会自动清除TI、RI,只能靠软件复位。

(2)中断控制 当发生中断请求后,CPU是否立即响应中断还取决于当时的中断控制方式。中断控制主要解决三类问题:

•中断的屏蔽控制,即什么时候允许CPU响应中断;

•中断的优先控制,即多个中断请求同时发生时,先响应哪个中断请求;

•中断的嵌套,即CPU正在响应一个中断时,是否允许响应另一个中断请求。

1)中断的屏蔽。MCS-51单片机的中断屏蔽控制通过中断允许寄存器IE来实现。IE的格式如下:

978-7-111-46732-8-Chapter07-62.jpg

其中EA(Enable All Interrupts)是总允许位,如果它等于“0”,则禁止响应所有中断。当EA为“1”时,CPU才有可能响应中断请求。但CPU是否允许响应中断请求,还要看各中断源的屏蔽情况,IE中其他各位说明如下:

ES(Enables the Serial Port Interrupt)为串行口中断允许位,ET0(Enables the Timer 0Overflow Interrupt)为定时器/计数器0中断允许位,EX0(Enables External Interrupt 0)为外部中断0中断允许位,ET1为定时器/计数器1中断允许位,EX1为外部中断1中断允许位,ET2为52子系列所特有的定时器2中断允许位。

允许位为0,表示屏蔽相应的中断,即禁止CPU响应来自相应中断源提出的中断请求。允许位为“1”,表示允许:CPU响应来自相应中断源提出的中断请求。

IE中各位均可通过指令来改变其内容。CPU复位后,IE各位均被清“0”,禁止响应所有中断。

如果要设置允许CPU响应定时器/计数器1中断、外部中断1,禁止其他中断源提出的中断请求,则可以执行如下指令:

MOV IE,#0:禁止所有中断

SETB IE1:允许定时器/计数器1中断

SETB EX1:允许外部中断1

SETB EA:打开总允许位

2)中断的优先级控制。MCS-51单片机的中断优先级分为两级:高优先级和低优先级:通过软件控制和硬件轮询来实现优先控制。

对每个中断源,可通过编程设置为高优先级或低优先级中断,具体由优先级寄存器IP来控制。IP的格式如下:

978-7-111-46732-8-Chapter07-63.jpg

其中,PS为串行口优先级控制位,PT0、PT1为定时器/计数器0、定时器/计数器1优先级控制位,PX0、PX1为外部中断0、外部中断1优先级控制位。另外,PT2为52子系列所特有的定时器/计数器2优先级控制位。

优先级控制位设为“1”,相应的中断就是高优先级,否则就是低优先级。CPU开机复位后,IP各位均被清“0”,所有中断均设为低优先级。

如有多个中断源有中断请求信号,CPU先响应高优先级的中断。当CPU同时收到几个同一优先级的中断请求时,CPU则通过内部硬件轮询决定优先次序,这种中断轮询顺序。

(Interrupt Polling Sequence)也称同级内的辅助优先级,MCS-51单片机同级内的中断轮询顺序见表7-7。

7-7 同级内的中断轮询顺序

978-7-111-46732-8-Chapter07-64.jpg

通过指令设置IP各优先控制位,结合同级内中断轮询顺序,可确定CPU中断响应的优先次序。

例如,要求定时器/计数器0为高优先级,其余为低优先级,可用如下程序实现:

MOV IP,#0;设置所有中断源为低优先级

SETB PT0;设置定时器/计数器0为高优先级

上面程序也可用一条指令完成:

MOV IP,#00000010B;使PT0为1,其余为0

当一个系统有多个高优先级中断源时,只要CPU响应了其中一个高优先级中断,其他中断就不会再响应。推荐的办法是:一个系统中只设置一个高优先级中断,或者这些高优先级中断的服务程序能在较短的时间内及时完成,以不影响其他高优先级的中断响应。

3)中断的嵌套。CPU工作时,在同一时刻接收到多个中断请求的机会不是很多。较常发生的情况是,CPU先后接收到多个中断请求,CPU在响应一个中断请求时,又接收到一个新的中断请求,这就要涉及中断的嵌套问题。

MCS-51单片机中有两级中断的优先级,所以可实现两级的中断嵌套。

如果CPU已响应一个低优先级的中断请求,并正在进行相应的中断处理,此时,又有一个高优先级的中断源提出中断请求,CPU可以再次响应新的中断请求,但为了使原来的中断处理能恢复,在转而处理高级别中断之前还需断点保护,高优先级的中断处理结束,则继续进行原来低优先级的中断处理。

如果第二个中断请求的优先级没有第一个优先级高(包括相同的优先级),则CPU在完成第一个中断处理之前不会响应第二个中断请求,只有等到第一个中断处理结束,才会响应第二个中断请求。

因此中断的嵌套处理遵循以下两条规则:

•低优先级中断可以被高优先级中断所中断,反之不能;

•一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。

MCS-51单片机硬件上不支持多于二级的中断嵌套。另外,在中断嵌套时,为了使得第一中断处理能恢复,必须注意现场的保护和CPU资源的分配。

(3)中断响应

1)中断请求信号的检测。MCS-51单片机的中断请求信号是由中断标志、中断允许标志和中断优先标志经逻辑运算而得到。

中断标志就是外部中断IE0和IE1、内部定时器/计数器中断,TF0和TF1、串行口中断TI和RI,它们直接受中断源控制。

中断允许标志就是外部中断允许位EX0和EX1、内部定时器/计数器中断允许位ET0和ET1、串行口中断允许位ES以及总允许位EA。它们可通过指令来设置。

中断优先标志就是PX0、PX1、PT0、PT1和PS。它们也是通过指令来设置。

MCS-51单片机的CPU对中断请求信号的检测顺序和逻辑表达式见表7-8。

CPU工作时,在每个机器周期中都会去查询中断请求信号。所谓中断,其实也是查询。是由硬件在每个机器周期进行查询,而不是通过指令查询。

7-8 中断请求信号的检测顺序和逻辑表达式

978-7-111-46732-8-Chapter07-65.jpg

2)中断请求的响应条件。MCS-51单片机的CPU在检测到有效的中断请求信号同时,还必须同时满足下列三个条件才能在下一机器周期响应中断:

①无同级或更高级的中断在服务。

②现行的机器周期是指令的最后一个机器周期。

③当前正执行的指令不是中断返回指令(RETI)或访问IP、IE寄存器等与中断有关的指令。

条件①是为了保证正常的中断嵌套。

条件②是为了保证每条指令的完整性。MCS-51单片机指令有单周期、双周期、四周期指令等,CPU必须等整条指令执行完了才能响应中断。

条件③是为了保证中断响应的合理性。如果CPU当前正执行的指令是返回指令(RETI)或访问IP、IE寄存器的指令,则表示本次中断还没有处理完,中断的屏蔽状态和优先级将要改变,此时,应至少再执行一条指令才能响应中断,否则,有可能会使上一条与中断控制有关的指令没起到应有的作用。

3)中断响应的过程。CPU响应中断的过程可分为设置标志、保护断点、选择中断入口、进行中断服务和中断返回五个部分,如图7-14所示。

978-7-111-46732-8-Chapter07-66.jpg

图7-14中断响应流程

①设置标志。响应中断后,由硬件自动设置与中断有关的标志。例如,将置位一个与中断优先级有关的内部触发器,以禁止同级或低级的中断嵌套,还会复位有关中断标志,如IE0、lE1、IT0、IT1,表示相应中断源提出的中断请求已经响应,可以撤消相应的中断请求。

另外,响应中断后,单片机外部的978-7-111-46732-8-Chapter07-67.jpg978-7-111-46732-8-Chapter07-68.jpg引脚状态不会自动改变。因此,需要在中断服务程序中,通过指令控制接口电路来改变978-7-111-46732-8-Chapter07-69.jpg978-7-111-46732-8-Chapter07-70.jpg引脚状态,以撤消此次中断请求信号。否则,中断返回后,将会再次进入中断。

②保护断点。中断的断点保护是由硬件自动实现的,当CPU响应中断后,硬件把当前PC寄存器的内容压入堆栈,即执行如下操作:

(SP)←(SP)+1;((SP))←(PC7-0);

(SP)←(SP)+1;((SP))←(PC15-8);

③选择中断入口。根据不同的中断源,选择不同的中断入口地址送人PC,从而转入相应的中断服务程序。MCS-51单片机中各中断源所在的中断入口地址见表7-9。

7-9 中断源所在的中断入口地址

978-7-111-46732-8-Chapter07-71.jpg

④进行中断服务。由于各中断入口地址间隔较近,通常可安排一条绝对转移指令,跳转到相应的中断服务程序。中断服务程序通常还要考虑现场的保护和恢复。不同的中断请求会有不同的中断服务要求,中断服务程序也各不相同。

⑤中断返回。中断服务程序最后执行中断返回指令RETI,标志着中断响应的结束。

CPU执行RETI指令,将完成恢复断点和复位内部标志工作。

恢复断点操作如下:

(PC15-8)←((SP));(SP)←(SP)-1;

(PC7-0)←((SP));(SP)←(SP)-1;

这与RET指令的功能类似,但决不能用RETI指令来恢复断点,因为RETI指令还有修改内部标志的功能。

RETI指令会复位内部与中断优先级有关的触发器,表示CPU已脱离—个相应优先级的中断响应状态。

4)中断响应时间

在实时控制系统中,为满足实时性要求,需要了解CPU的中断响应时间。现以外部中断为例,讨论中断响应的最短时间。在每个机器周期的S5P2,

978-7-111-46732-8-Chapter07-72.jpg978-7-111-46732-8-Chapter07-73.jpg的引脚状态被锁存到内部寄存器中,而实际上,CPU要在下一个周期才会查询这些值。如中断请求条件满足,则CPU将要花费2个机器周期用于保护断点、设置内部中断标记和选择中断入口。这样从提出中断请求到开始执行中断服务程序的第一条指令,至少隔开3个机器周期,这也是最短的中断响应时间。

如果遇到同级或高优先级中断服务时,则后来的中断请求需要等待的时间将取决于正在进行的中断服务程序。

如果现行的机器周期不是指令的最后一个机器周期,则附加的等待时间要取决于这条指令所需的机器周期数。一条指令最长的执行时间需要4个机器周期(如MUL和DIV指令),附加的等待时间最多为3个机器周期。

如果当前正执行的指令是返回指令(RET1)或访问IP、IE寄存器等与中断有关的指令,则附加的等待时间有可能增加到5个机器周期:完成本条与中断有关的指令需要1个机器周期,完成一条完整指令需要1~4个机器周期。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈