中央处理器CPU是单片微机内部的核心部件,主要包括控制器、运算器和工作寄存器及时序电路。在单片微机中,工作寄存器(即通用寄存器)属于数据存储器的一部分,在后面与片内数据存储器一起介绍,这里仅介绍控制器、运算器及时序电路的基本组成、功能与特点。
2.3.1中央控制器
识别指令,并根据指令性质控制计算机各组成部件进行工作的部件,与运算器一起构成中央处理器。

程序计数器PC(program counter)
程序计数器PC是一个独立的计数器,不属于内部的特殊功能寄存器。PC中存放的是下一条将要从程序存储器中取出的指令的地址。
基本工作过程
读指令时,程序计数器PC将其中的数作为所取指令的地址输出给程序存储器,然后程序存储器按此地址输出指令字节,同时程序计数器PC本身自动加1,指向下一条指令地址。
- 程序计数器PC的变化的轨迹决定程序的流程(PC指哪里,程序去哪里)
- 在执行条件转移或无条件转移指令时,程序计数器将被置入转移的目的地址,程序的流向发生变化。
- 在执行调用指令或响应中断时,将子程序的入口地址或者中断矢量地址送入PC,程序流向发生变化。
- PC是不可以直接访问、修改的,只能通过上面所述的方式间接改变
- PC的宽度决定了程序储存器可以直接寻址的范围
- 80C51中,PC是一个16位的计数器,因此可以对64KB的程序储存器寻址
DPTR(Data Pointer)数据指针
DPTR是80C51中一个16位的特殊功能寄存器,主要用作地址存储,可分为DPH(高8位)和DPL(低8位)。
- 基本功能:
- 片外数据存储器地址指针
- I/O寻址用的地址寄存器
- 程序存储器访问的基址寄存器
特性 | DPTR | PC |
位数 | 16位 | 16位 |
访问性 | 可访问修改 | 不可直接访问 |
输出方式 | P0,P2+ALE,WR,RD | P0,P2+ALE,PSEN |
PC是不可访问的(51),DPTR是可以访问、修改的
指令寄存器IR、指令译码器及控制逻辑
关键组件功能:
- 指令寄存器IR:存放当前指令的操作码
- 指令译码器:对指令进行解码分析
- 定时控制逻辑:根据指令性质产生控制信号
- 振荡电路:提供基本时钟信号
控制信号说明
信号 | 功能 |
PSEN | 程序存储器使能信号 |
ALE | 地址锁存使能信号 |
EA | 外部访问控制信号 |
RST | 复位信号 |
2.3.2 运算器
作用:
实现对操作数的算术逻辑运算和位操作。
组成:
主要包括算术逻辑运算单元ALU、累加器ACC(A)、两个暂存器、B寄存器、程序状态字PSW、以及BCD码运算修正电路。
算术逻辑运算单元ALU
在图中可以看到,ALU(算术逻辑单元)实质上是全加器,它通过暂存器1和暂存器2接收输入数据,并将运算结果输出到内部总线,同时还会更新PSW(程序状态字)的相关状态位。
并不是只能做加法,而是通过全加器的结构实现加减乘除等复杂的运算

累加器A(ACC/A寄存器)
累加器A是CPU中使用最频繁的一个八位专用寄存器,简称ACC或A寄存器。
累加器A存放操作数,是ALU单元的输入之一,也是ALU运算结果的暂存单元
容易产生瓶颈,因为绝大部分运算都要用到累加器A
B寄存器
B寄存器在80C51中主要有以下功能:
- 乘除法运算时的专用寄存器:
- 乘法时:与累加器A配合,A存低8位,B存高8位
- 除法时:被除数从A取,除数从B取,商存入A,余数存入B
- 内部RAM功能:在不进行乘除法运算时,B寄存器可以作为内部RAM的一个普通单元使用
这种设计充分利用了寄存器资源,既可以作为专用寄存器参与运算,又可以在不需要时作为普通存储单元使用。
程序状态字PSW:program status word
程序状态字PSW(Program Status Word)是一个8位寄存器,地址为D0H,可按位访问。主要用于存放ALU运算结果的状态标志位。
硬件自动生成的标志位
- 奇偶校验位(P):用于检测累加器A中1的个数是否为偶数
- 溢出标志位(OV):表示运算结果是否超出有效数据范围
- 辅助进位标志位(AC):记录第3位向第4位的进位情况,用于BCD运算
- 进位标志位(CY):指示运算是否产生进位或借位
可用软件方法设定的标志位
- PSW.1:保留位,未使用
- RS1和RS0:用于选择4个不同的工作寄存器组
- F0:用户可自定义用途的标志位
<aside>
RS1和RS0的组合可以选择4个不同的寄存器组:
RS1 | RS0 | 寄存器组 |
0 | 0 | 组0 (00H-07H) |
0 | 1 | 组1 (08H-0FH) |
1 | 0 | 组2 (10H-17H) |
1 | 1 | 组3 (18H-1FH) |
</aside> | ㅤ | ㅤ |
2.3.3 时钟电路以及CPU工作时序

时钟电路

振荡器

振荡器由/PD位(power down)(特殊功能寄存器PCON中的一位)控制,/PD=1振荡器停止工作,系统进入低功耗状态
晶体振荡器产生基础时钟频率
内部时钟发生器
内部时钟发生器实际上是一个二分频的触发器
ALE信号(Adress-Lock-Enable)
状态时钟经过三分频后产生ALE引脚上的输出
在80C51架构中,ALE信号每次有效确实会触发一次读取操作,但这些操作可能是有效的(被CPU使用)或无效的(被丢弃)。
这种描述主要是从硬件时序和指令执行机制的角度解释了ALE信号与读指令操作的关联,而不是说明ALE信号的主要设计目的(地址锁存)。
时序定时单位
状态时钟送入六分频电路生成机器周期时序
时序单位
80C51的时序定时单位一共有4个:节拍、状态、机器周期、指令周期
- *节拍 P:**振荡脉冲的周期称为节拍。
- *状态 S:**一个状态 S 包含两个节拍,其前半周期对应的节拍叫 P1,后半周期对应的节拍叫 P2。
- *机器周期:**80C51 采用定时控制方式,因此它有固定的机器周期。规定一个机器周期的宽度为 6 个状态,并依次表示为 S1~S6。由于一个机器周期共有 12 个振荡脉冲周期,因此,机器周期就是振荡脉冲的 1/12 分频。
- 当振荡脉冲频率为 12 MHz 时,一个机器周期为 1μs;当振荡脉冲频率为 6 MHz 时,一个机器周期为 2μs。
- 机器周期是单片微机的最小时间单位。
- *指令周期:**执行一条指令所需要的时间称为指令周期。它是最大的时序定时单位。80C51 的指令周期根据指令的不同,可包含 1、2、4 个机器周期。当振荡脉冲频率为 12 MHz 时,80C51 一条指令执行的时间最短为 1μs,最长为 4μs。
80C51指令时序
每一个ALE对应一次读指令操作
一个机器周期有两个ALE周期
每一次读指令是否有效,取决于PC的值;如果PC没有变化,那么每一次读到的指令是相同的,属于无效读取。
- 单字节单周期指令(例如 INC A):
- 只需进行一次读指令操作。
- 当第二个 ALE 有效时,由于 PC 没有加 1,读出的仍是原指令,属于一次无效的操作。
- 双字节单周期指令(例如 ADD A, #data):
- 对应于 ALE 的两次读操作均为有效。
- 第一次是读取指令操作码,第二次是读取指令第二字节(本例中是立即数)。
- 单字节双周期指令(例如 INC DPTR):
- 两个机器周期进行四次读操作,但后面三次读操作全为无效。
- 单字节双周期指令(例如 MOVX 类指令):
- 每个机器周期内有两次读操作,但 MOVX 类指令情况不同:
- 第一机器周期:从 ROM 读取指令,此操作有效。
- 第二机器周期:对外部 RAM 访问,与 ALE 信号无关,因此不产生读指令操作。
