中央处理器(CPU)是由算术逻辑部件(ALU)、控制器和寄存器通过总线连接而成的一个整体。中央处理器是整个单片机的核心部件。CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
51系列单片机是8位数据总线的处理器,能处理8位二进制数据或代码。AT89S52的CPU与8051的CPU完全兼容,这里以AT89S52为例进行介绍。
算术逻辑部件是进行算术及逻辑运算的功能部件。AT89S52单片机的算术逻辑部件包括运算器、累加器A、寄存器B、暂存器TMP、程序状态寄存器PSW、堆栈指针SP、数据指针DPTR等。其可以进行加、减、乘、除四则运算,也可以进行与、或、非、异或等逻辑运算,还可以执行数据传送、移位、判断和程序转移等功能。
51系列单片机的ALU提供了丰富的指令系统和极快的指令执行速度,大部分指令执行时间为1μs,乘法指令为4μs。AT89S52的ALU与8051的ALU完全兼容,其位处理功能非常强,这对“面向控制”特别有用,指令功能极为丰富,8位并行处理能力极强。
控制器是用来统一指挥和控制计算机进行工作的部件。其主要的功能是从程序存储器中提取指令,送到指令寄存器,再送入指令译码器进行译码。控制器通过定时和控制电路,在规定的时刻发出各种操作所需要的全部内部控制信息及CPU外部所需要的控制信号,如ALE、 PSEN 、RD、WR等,使各部分协调工作,完成指令所规定的各种操作。
8051的控制器包括时钟发生器、定时控制逻辑、指令寄存器、指令译码器、程序计数器PC、程序地址寄存器、数据指针寄存器DPTR和堆栈指针SP等。
寄存器是用来存放信息的单元,其优点是存取速度快、方便,寄存器的数量是衡量一台计算机处理能力的重要标志。51系列单片机的寄存器可分为工作寄存器(即通用寄存器)、专用寄存器和特殊功能寄存器(SFR)。特殊功能寄存器是专为对应功能服务的,在2.4.2节“数据存储器及其扩展”将详细介绍。本节主要介绍通用寄存器R0~R7。
片内RAM的00H~1FH(共32B)空间,开辟了4个通用寄存器区,每组共有8个8位的寄存器R0~R7,通过对PSW的RS1和RS2进行设置,选择任意一组使用,同时其余三组被屏蔽。其优点是,避免进站保护、减少堆栈深度、节省出入栈指令和时间。不用的通用寄存器可作为片内RAM访问。
专用寄存器是专门为某些功能部件设计的寄存器。其主要包括程序计数器PC、累加器A、寄存器B、程序状态寄存器PSW、堆栈指针SP、数据指针DPTR等,下面分别介绍这几种寄存器的功能。
程序计数器PC是一个16位二进制的程序地址寄存器,专门用来存放下一条需要执行指令的内存地址,能自动加1。
CPU执行指令时,根据程序计数器PC中的地址从存储器中取出当前执行的指令码,将其送给控制器分析执行,随后程序计数器PC中的地址码自动加1,以便取下一条指令码。这样一次次加1,指令就被一条条执行。
8051的程序计数器PC是由16个触发器构成,其编码范围为0000H~FFFFH,其寻址范围为64KB。
累加器A(或者ACC)是运算过程中的暂存寄存器,是一个8位二进制寄存器,用于提供操作数和存放操作结果。通过内部总线直接与ALU相连,一般的信息传递和交换均需通过累加器A。
寄存器B一般用于乘除法操作指令,也是一个8位二进制寄存器,由8个触发器组成,与累加器A配合使用。寄存器中存放乘数或除数、乘积的高位字节和除法的余数。其他情况下,可作为一般寄存器或中间结果暂存器使用。
程序状态寄存器PSW是一个8位寄存器,用于存放指令执行后的有关状态,为后面的指令执行提供状态条件。PSW中的各状态位通常是在指令执行过程中自动形成的,用户可以根据需要改变PSW的状态。PSW中的各状态标志位如图2-4所示。
PSW中的各状态标志位说明如下。
●C y :高位进位标志位。如果指令运算结果高位产生进位或借位,则C y 被置为“1”,否则为“0”。它在位处理指令中作为累加器用,所以又称为“布尔累加器”。
●AC:辅助进位标志位。根据指令运算结果的低4位即D3有无向高4位D4进位或借位,来进行置位。如果有进位或借位,则置AC为“1”,否则为“0”。AC也常称之为半字节进位标志位,常用于BCD码调整。
●F 0 :用户标志位。该标志位不是在指令执行过程中自动形成的,是由用户根据需要通过传送指令设置。该标志位可用于决定用户程序的走向。
●RS 1 和RS 0 :工作寄存器选择标志位。用于选择内部RAM的4组工作寄存器的某组置于前台,每个寄存器由8个8位寄存器(R0~R7)组成。通过改变RS 1 和RS 0 ,可以决定通用寄存器的实际物理地址。这两者之间的关系如表2-1所示。
●OV:溢出标志位。当运算结果数值的绝对值超过允许的最大值时,就会产生溢出。由机器在程序执行过程中自动形成。当运算结果数的A7或A6其中的一位产生进位或借位时,OV位自动置“1”,否则置“0”,其逻辑表达式为OV=A 7 ⊕A 6 。
●—:保留位,无定义,用户不能使用。
●P:奇偶校验标志位。逻辑运算后,运算结果中“1”的个数为奇数,则P位自动置“1”,否则置“0”。
图2-4 PSW中的状态标志位
表2-1 RS 1 、RS 0 与寄存器R0~R7间的对应关系
堆栈指针SP是在片内RAM中开辟一个存储区域,专门存放堆栈栈顶的地址。其中堆栈是一组编有地址码的特殊存储单元。堆栈指针SP采用8位增量的寄存器,堆栈深度为0~255个存储单元。
数据进栈时,SP自动增1,将数据压入SP所指向的堆栈单元;弹出时,将SP所指向的堆栈单元内的数据推出栈,然后SP自动减1。SP总是指向栈顶。堆栈按照“先进后出、后进先出”的原则进行数据存取。
在系统复位后,堆栈指针SP的初始值为07H,即栈底为08H单元。这样就与工作寄存器区域重叠,必须重新定义SP,在片内RAM中开辟一个合适的堆栈区域。
数据指针DPTR是一个16位寄存器,是由8位寄存器DPH和DPL组合而成。其中DPH为DPTR的高8位,DPL为DPTR的低8位。它既可以作为16位数据指针用,也可以分开以8位寄存器(DPH、DPL)单独使用。DPTR可以用来存放片内ROM的地址,也可以存放片外RAM和片外ROM的地址。
AT89S52设有两个DPTR,分别为DP0(DP0H、DP0L)和DP1(DP1H、DP1L),通过对特殊功能寄存器AUXR 1 的DPS位进行设置选择。当DPS=0,选择DP0;当DPS=1,选择DP1。