MCS-51系列单片机CPU的主要特点是:使用8位微处理器,即按8位二进制数为1字节进行数据处理;由算术逻辑运算单元(Arithmetic and Logical Unit,ALU)、定时控制器与专用寄存器组(Special Function Register,SFR)三部分电路组成。在图2-1中以ALU为核心标出了CPU的这3个主要组成电路。
1.算术逻辑运算单元
单片机的核心是CPU,而算术逻辑运算单元ALU是CPU的核心。其主要特点是:
1)ALU在MCS-51系列单片机中的主要功能是按指令对8位二进制数进行各种算术运算、逻辑运算、传送移位、判断等操作。运算和操作结果的状态由程序状态字(Program Status Word,PSW)保存。
ALU在按8位二进制数为1B处理数据时,可进行四则算术运算:加法、减法、乘法与除法。这里要说明的是,它的减法是补码的加法,乘法是8位的乘法,除法是8位数的除法。
ALU在进行与、非、或等逻辑运算时,可以有字节操作和位操作。即,可按字节进行逻辑比较,也可对可位寻址的字节单元中的某1位进行逻辑比较。
2)ALU由加法器、两个暂存器TMP1和TMP2及一个布尔处理器组成。
ALU的加法器与布尔处理器必须有两个操作数才能进行算术与逻辑操作,两个寄存器TMP1与TMP2就是与之配合,用来放二个操作数的。
3)运算速度高,大部分指令执行时间为1μs,乘法、除法指令执行时间也仅为4μs,(当fosc=12MHz时)。
2.定时控制器
定时控制器由定时控制逻辑电路、指令寄存器IR、振荡器OSC等组成。
(1)定时控制逻辑电路 其功能是对指令寄存器IR中的指令进行译码,并在OSC配合下产生指令时序脉冲,来控制CPU的工作节奏,以完成相应指令的执行,使CPU的工作有节拍地一步一步进行下去。
(2)指令寄存器IR其功能是存放指令码,这个指令码是CPU刚刚从程序存储器中取出来,准备在下一步执行的程序指令。
这里要搞清的一个问题是,寄存器和存储器有什么区别?一般来说,寄存器跟存储器在结构上都是8位的双稳数字电路,都是存8位二进制数的,但其位置不一样,其作用也就不一样。如,指令寄存器IR里面专门放指令,而RAM里面可放任意的8位二进制数据。
(3)振荡器OSC它是控制器的心脏,其功能是为CPU提供时钟脉冲。
引脚XTAL1为振荡器OSC电路中反相放大管的输入端,XTAL2为反相放大管的输出端。只要在引脚XTAL1和XTAL2上外接定时反馈回路,OSC就能自激振荡,产生矩形时钟脉冲序列。定时反馈回路常由石英晶振和微调电容组成,如图2-2所示。振荡器OSC的频率是单片机的重要性能指标之一。时钟频率越高,单片机控制器的控制节拍就越快,运算速度也就越快。因此不同型号的单片机所需要的时钟频率也是不相同的。
3.专用寄存器组SFR
CPU内还包括了一个很重要的部分:一个专用的寄存器组SFR。这是为CPU提供重要信息的专用8位内存单元,有定时器的地址,有控制接口的状态字(也就是对接口的控制字)等。接口是个电路。电路什么时候工作,怎么工作由单片机根据放在这些特殊寄存器SFR里的信息来管理。由于SFR在CPU内,使用起来就非常方便。举个例子来说,就像我们身上穿的衣服都有口袋是为了使随身物品存取方便、快捷。SFR共有21个寄存器,见表2-1。下面介绍几个最常用的专用寄存器。
(1)程序计数器(Program Counter,PC)程序计数器PC是一个二进制16位的程序地址寄存器,主要功能是:
1)存放下一条要执行的指令在程序存储器中的16位地址。
2)自动加1功能。CPU执行指令时,它根据程序计数器中的地址从存储器中取出当前需要执行的指令码,并把它送给控制器分析执行,随后程序计数器中地址码自动加1,以便为CPU取下—条需要执行的指令码作准备。在执行连续程序时,CPU每从程序存储器中取出一条指令,PC的值就自动加1,使CPU能在程序存储器中连续取出指令。所以需要执行程序的机器码必须在程序执行前预先一条条地按顺序放到程序存储器中,并将程序计数器设置为程序第一条指令的内存地址。PC单元本身没有地址,是不可寻址的,因此用户无法对其进行读写,但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。
3)CPU复位时PC=0000H,通常在ROM的0000H~0002H单元存放一条三字节的长转移指令LJMP ADDR16,其中ADDR16为主程序始址,使PC指向主程序的始址,保证程序从头开始。
实际上程序计数器PC就是CPU执行程序的指针,CPU要执行哪条指令是由PC值决定的,即PC给出了CPU下一条指令在程序存储器中的地址。PC寄存器相当于单片机的指挥棒,其作用是非常重要的,所以我们在学习单片机的软、硬件时要特别注意PC的行为,也就是PC的工作情况与动向。
表2-1 特殊功能寄存器一览表
①可以位寻址。
②仅52子系列单片机有。
(2)累加器(Accumulator,A)又记作ACC,是专门用来存放操作数据与运算结果的二进制8位寄存器。累加器是最忙的一个寄存器。它必定放一个操作数,并要存放操作后的结果。也就是说,CPU的ALU在进行运算时用的两个操作数,其中一个数要放在累加器里,而计算结果一定放在累加器里。累加器在代表直接地址E0H时,记作ACC,而在专指累加器的指令中,其助记符只写A。
例如:在3+5的加法程序中,第一条指令是把加数3预先送入累加器A,为第二条加法指令的执行作准备,在第二条指令执行后累加器A内容为两数之和8。
MOV A,#03H ;A←3
ADD A,#05H ;A←A+5
累加器的结果会影响到一个重要的特殊功能寄存器(PSW)的内容。
另外,累加器A是数据传送的中转寄存器,单片机的大部分数据传送都通过累加器进行。
例如:
MOV DPTR,#0100H;DPTR指向片外RAM的一单元地址0100H
MOV A,#01H
MOVX @DPTR,A ;累加器A中内容01H送入片外RAM的0100H单元
(3)程序状态字(Program Status Word,PSW)PSW是一个很重要的8位标志寄存器,主要用来描述CPU执行指令后在累加器中结果的特性:进位、溢出等,借此,我们可以了解CPU的当前状态,并作出相应的处理。各位状态通常是在指令执行过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。PSW各标志位定义见表2-2。
表2-2 PSW各标志位定义
1)进位标志位(Carry,Cy),其功能如下:
①加减运算最高位有进位(加法)或有借位(减法),CY位由硬件自动置1,否则被清零。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示0~255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误。解决的方法是将最高位进到CY里,用CY置位来计入最高位的进位行为。此外,CPU在进行移位操作时也会影响这个标志位。
②在位操作中,CY作累加位使用,在位传送、位逻辑操作中,都要使用进位标志位。
2)辅助进位位(Auxiliary Carry,AC),用于表示加减运算时低4位即A3有无向高4位即A4进位或借位,A3向A4有进位或借位时,则AC由硬件置位,即AC=1,否则AC位被清零。
3)用户标志位(Flag zero,F0),此标志位的状态通常不是机器在执行指令过程中自动形成的,是由用户根据程序执行的需要用软件方法(即传送指令)置位或复位的。该标志位状态一经设定,便由用户程序直接检测,以控制用户程序的转向。
4)工作寄存器组选择位RS1、RS0,MCS-51系列单片机共有8个8位工作寄存器,分别命名为R0~R7,用户通过改变RS1、RS0的状态可以方便地设定当前R0~R7的组号,即实际物理地址。工作寄存器R0~R7的物理地址和RS1、RS0之间的选择关系见表2-3。
表2-3 工作寄存器R0~R7的物理地址和RS1、RS0之间的选择关系表
(www.xing528.com)
MCS-51系列单片机在复位后RS1=0、RS0=0,CPU选中第0组作为当前工作寄存器,R0~R7物理地址为00H~07H。根据需要,用户可利用传送指令或位操作指令来改变其状态,如用“SETB RS0”指令将RS0置1,则第1组就是当前工作寄存器,R0~R7物理地址为08H~0FH,这样的设置为程序中保护现场提供了方便。
5)溢出标志位(Overflow,OV),用于带符号数的加减运算,指示运算过程中是否发生了溢出,由机器执行指令过程中自动形成。若机器在执行运算指令过程中,运算结果超出累加器A所能表示的8位有符号数的范围,即-128~+127,则OV标志由硬件自动置1,否则OV由硬件清“0”,表示运算结果正确。用户根据执行运算指令后的OV状态,可以判断累加器A中的结果是否正确。
在无符号数的乘法运算中,当乘积超出255时,OV由硬件自动置1,表示乘积超出了8位二进制数的允许范围,乘积分别存放在B寄存器和累加器A中,反之,OV由硬件清“0”,表示乘积未超过255,仅在A中存放。在除法运算中,当除数为0时,OV由硬件自动置1,表示除法不能进行,反之,则OV由硬件清“0”,表示除法运算可正常进行。
6)奇偶标志位(Parity,P),表明运算结果即累加器A中1的个数的奇偶性。在每个指令周期由硬件根据A中的内容对P进行置位或复位,若累加器A中1的个数为奇数,P=1;若累加器A中的1的个数为偶数,P=0。
例如:设程序执行前RS1、RS0=00H,F0=0,求机器执行如下程序后PSW中各位的状态是什么?
MOV A,#0AH
ADD A,#0F7H
解:上述加法指令执行时
式中,CP为最高位进位,CP=1;CS为次高位进位,CS=1;F0、RS0、RS1由用户根据需要设定,加法指令不会改变其状态;最高位有进位,Cy=1;A3向A4有进位,AC=1;结果A中的1的个数为奇数,P=1;OV的状态可由下式确定:
因为CP⊕CS=1⊕1=0
所以OV=0
故PSW=11000001B=C1H
(4)堆栈指针(Stack Pointor,SP)SP是一个专门用来存放堆栈的栈顶地址的8位寄存器,能自动加1或减1。
1)堆栈的概念。堆栈是一种按特定顺序进行存取的存储区,这种特定顺序可归结为“后进先出”或“先进后出”。就是在片内RAM中划出一部分单元,用作存放临时数据区。这些临时数据是指令执行过程中的不能丢失的数据,丢失以后程序就无法进行下去,所以要把这些数据保留在堆栈里。也可以说,堆栈相当于一个保护区,有紧急情况发生时,把重要数据保护起来。如,在执行中断或调用子程序时,第一个要保护的临时数据是当前PC值,所以在发生中断或调用子程序时,CPU会自动把PC当前值写入堆栈,中断或调用子程序完了以后,CPU可取出PC值使程序回到断点处继续执行下去。另外,在发生中断或调用子程序时,会发生累加器A和其他存储单元的重复使用,所以必须把当前A或其他存储单元的内容写入堆栈保护起来,以便返回后,恢复累加器A或其他存储单元的内容,即恢复现场。综上所述,堆栈主要是为子程序调用和中断操作而设立的,其具体功能是保护断点地址和保护现场,也可用于调用子程序时参数的传递。
堆栈有栈顶和栈底之分,栈底由栈底地址标志,是固定不变的,决定了堆栈在片内RAM中的物理位置。栈顶由栈顶地址指示,需要一个专门的硬件寄存器作为堆栈栈顶指针,简称栈指针SP,栈指针所指定的存储单元,就是堆栈的栈顶。当堆栈中空无数据时,栈顶地址和栈底地址重合,即SP也是栈底地址;当有数据写入堆栈中,SP指向栈顶地址。
8051单片机中堆栈的工作方式是由低向高堆放,属向上生长型,也就是:
每压入一个8位二进制数,SP增加1——栈顶上浮;每弹出一个8位二进制数,SP减少1——栈顶下降。
2)堆栈区域设定。MCS-51系列单片机复位后,SP初值为07H,由于片内RAM的07H单元后的区域分别为工作寄存器区和位寻址区,通常这两个区域在程序中有重要用途,所以在用户程序设计的开始,一般都将堆栈设在片内RAM的30H~7FH地址空间。
例:MOV SP,#51H;SP指示了堆栈在片内RAM中的起始地址,即栈底地址51H。
3)堆栈的操作。数据写入堆栈称为入栈或进栈,对应指令的助记符为PUSH;数据从堆栈中读出则称为出栈或弹出堆栈,对应指令的助记符为POP。堆栈示意图如图2-3所示。
进栈操作:首先(SP)+1,然后写入数据。
出栈操作:首先读出数据,然后(SP)-1
例:MOV SP,#70H ;设定栈底指针。
PUSH ACC ;累加器内容X写入堆栈。
(5)数据指针(Data Pointer,DPTR)标准MCS-51系列单片机有一个数据指针DPTR,由两个8位寄存器DPH和DPL组成,存放外部ROM/RAM的16位地址和扩展I/O接口的访问地址,是MCS-51系列中唯一的一个供用户使用的16位寄存器,另外,也可以作为两个8位特殊功能寄存器使用。
DPH存放高8位地址数,DPL存放低8位地址数。
图2-3 堆栈示意图
a)没有写入数时的堆栈 b)写入一个数的堆栈
AT89S51增加了一个16位的数据指针DPTR,双数据指针寄存器,便于访问数据存储器。DPTR0是AT89C51单片机原有的数据指针,即上述讲到的数据指针DPTR;DPTR1是新增加的数据指针。数据指针可作为一个16位寄存器来用,也可作为两个独立的8位寄存器DP0H(或DP1H)和DP0L(或DP1L)来用。
AUXR1的DPS位用于选择两个数据指针。当DPS=0时,选用DPTR0;当DPS=1时,选用DPTR1。
(6)通用寄存器B B是专门为乘法和除法设置的8位寄存器,执行乘法运算时,B中存放乘数,乘法操作后,乘积的高8位又存于B中;除法运算时,B中存放除数,除法操作后,B又存放余数。在其他情况下,它可被用作一般的数据寄存器,用于暂存数据,地址为0F0H。
(7)AUXR寄存器
AUXR是一个8位辅助寄存器,该寄存器不可以位寻址,其格式如图2-4所示。
图2-4 AUXR寄存器的格式
DISALE是ALE引脚的禁止/允许位。0:ALE有效,发出脉冲;1:ALE仅在执行MOVC和MOVX类指令时有效;不访问外部存储器时,ALE不输出脉冲信号。
DISRTO是禁止/允许WDT(看门狗)溢出时的复位输出。0:WDT溢出时,在RST引脚输出一个高电平脉冲;1:RST引脚仅为输入脚。
WDIDLE是WDT在空闲模式下的禁止/允许位。0:WDT在空闲模式下继续计数;1:WDT在空闲模式下暂停计数。
(8)AUXR1寄存器
AUXR1是辅助寄存器,格式如图2-5所示。
图2-5 AUXR1寄存器的格式
DPS是数据指针寄存器选择位。0:选择数据指针寄存器DPTR0;1:选择数据指针寄存器DPTR1。
现在回顾一下,CPU里面有什么?有ALU、控制器与特殊功能寄存器组SFR。SFR里面也要特别注意三个寄存器:累加器ACC、程序计数器PC,程序状态字PSW。ACC和PSW是密切相关的,PSW主要用来反映累加器A的状态,即A操作以后的状态。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。