- 打卡等级:常住居民II
- 打卡总天数:87
- 最近打卡:2026-05-11 01:12:23
荣誉版主
- 积分
- 5084
|
前言:写给51单片机初学者的核心导读对于刚接触8051(51)单片机的初学者而言,大多会先学习汇编指令、C语言编程,能熟练写出点亮LED、串口通信、定时中断等基础程序,却往往忽略了指令背后CPU的真实工作过程——为什么一条汇编指令能让硬件做出对应动作?CPU是如何一步步读取指令、拆解指令、执行运算的?这一切的核心,就是8051CPU的微指令与微操作,而经典12T模式的8051单片机,更是理解单片机底层执行逻辑的最佳范本,所有后续增强型6T、1T内核,都是基于12T架构优化而来。
首先要明确两个关键定义,这是读懂全文的基础,也是初学者最容易混淆的概念:
微操作:是CPU内部不可再拆分的最小硬件动作,比如“打开寄存器输出门”“数据送上内部总线”“ALU启动运算”“数据写入存储单元”等,每一个微操作都由CPU内部的控制信号精准驱动,是连接软件指令和硬件电路的最小单元。
微指令:是一组微操作的集合,一条微指令对应多个同步执行的微操作,多条微指令按固定顺序组成微程序,而我们编写的每一条51汇编指令,都对应一段固化在CPU内部控制存储器中的微程序。简单来说,汇编指令是“上层命令”,微指令是“中层分解指令”,微操作是“底层硬件动作”,三者层层递进,完成指令的完整执行。
而12T模式,指的是经典8051CPU执行一个机器周期需要12个时钟周期,标记为T1、T2、T3……T12,每个时钟周期内,CPU都会执行特定的微操作,所有单周期指令在12个时钟周期内完成全部执行流程,双周期指令则需要24个时钟周期(两个连续的T1-T12)。本文将严格按照12T时序,以最具代表性的ADD A, R1(单字节单周期寄存器寻址指令)和ANL 080H, #03H(三字节双周期直接+立即寻址指令)为例,逐周期拆解微指令与微操作的执行过程,全程避开晦涩的专业术语堆砌,用通俗的语言、清晰的步骤,帮初学者彻底吃透51CPU的底层工作原理。同时,为便于理解,每个机器周期均明确划分取指、译码、执行、回送四个阶段,最后按指令类型总结各阶段核心规律。
一、12T标准8051CPU核心硬件模块与时序基础1.1 指令执行必备核心硬件模块(初学者必知)在拆解微操作之前,必须先认识参与指令执行的核心硬件模块,这些模块是微操作的执行载体,初学者无需深究电路原理,只需记住功能即可:
- 程序计数器PC:16位寄存器,始终存放下一条要执行的指令地址,自动递增,是CPU的“指令地址指针”,每取完一个指令字节,PC自动加1。
- 程序存储器ROM:存放用户编写的程序机器码,CPU根据PC地址读取指令,是“指令仓库”。
- 指令寄存器IR:存放当前正在执行的指令操作码,等待译码。
- 指令译码器ID:对IR中的操作码进行译码,生成对应的控制信号,触发后续微指令和微操作,是CPU的“指令翻译官”。
- 控制存储器CM:CPU内部专用ROM,固化所有指令对应的微程序,是“微指令仓库”,译码后直接从中调取对应微指令序列。
- 累加器A(ACC):8位专用寄存器,所有算术、逻辑运算的核心寄存器,大部分运算都要通过A完成,结果也默认存回A。
- 工作寄存器R0-R7:分4组,每组8个8位寄存器,默认使用第0组,R1是其中之一,用于快速存储临时数据,寻址速度最快。
- 算术逻辑单元ALU:CPU的“运算核心”,负责执行加法、减法、与、或、异或等算术逻辑运算,本身不存储数据,只接收数据运算。
- 暂存器1、暂存器2:ALU的配套临时存储单元,存放待运算的两个操作数,避免数据冲突。
- 程序状态字PSW:8位标志寄存器,存放运算后的状态标志,如进位标志CY、辅助进位AC、溢出标志OV等,反映运算结果状态。
- 内部数据总线DB:CPU内部数据传输通道,所有寄存器、存储器、ALU之间的数据传输,都通过内部总线完成。
- 地址总线AB:传输存储器、寄存器地址信号,定位数据存放位置。
- 片内RAM:8051内部128B/256B数据存储单元,080H属于特殊功能寄存器区或扩展RAM区,用于存储运行过程中的数据。
1.2 12T机器周期时序规则(核心!逐周期对应微操作)经典8051单片机的时钟电路产生连续的时钟脉冲,1个时钟周期=1个T状态,1个机器周期=6个状态周期(S1-S6),每个状态周期包含2个时钟周期(P1、P2),换算下来就是1个机器周期=12个时钟周期,即T1-T12,对应关系如下:
所有12T 8051的指令执行,都严格遵循这个时序,单周期指令在T1-T12内完成取指、译码、执行、回写全流程;双周期指令需要先完成第一个12T(第一机器周期)的取指、译码、取操作数,再通过第二个12T(第二机器周期)完成运算、回写,全程24个时钟周期。
同时,51CPU的指令执行分为四个核心阶段,贯穿每个机器周期的12个时钟周期,这四个阶段是理解指令执行的核心框架,初学者需重点掌握:
- 取指阶段:CPU根据PC地址,从ROM中读取指令字节,送入指令寄存器,PC自动加1,核心是“获取指令”;
- 译码阶段:指令译码器解析指令寄存器中的操作码,识别指令类型、寻址方式,调取控制存储器中对应的微程序,核心是“理解指令”;
- 执行阶段:按T1-T12时序,逐条执行微指令,完成数据读取、ALU运算等核心操作,核心是“完成指令规定的动作”;
- 回送阶段:将运算结果写回目标寄存器/存储器,更新状态标志位(若有),复位控制信号,准备下一条指令,核心是“保存结果、恢复状态”。
初学者切记:每个时钟周期(T1-T12)都有固定的微操作,不能颠倒、不能省略,且四个阶段在每个机器周期内有序衔接,这是12T 8051CPU的核心执行规则,也是理解微指令与微操作的关键。
二、单字节单周期指令ADD A, R1的12T微指令与微操作全流程(分四阶段)2.1 指令基础信息(初学者先理清)指令助记符:ADD A, R1
指令功能:将累加器A中的8位二进制数据,与工作寄存器R1中的8位二进制数据进行无进位加法运算,运算结果存回累加器A,同时根据运算结果更新PSW中的CY(进位)、AC(辅助进位)、OV(溢出)、P(奇偶)标志位。
指令长度:单字节指令,机器码为00101001B(29H),无需额外操作数字节,属于寄存器寻址,寻址速度最快。
执行周期:单机器周期(12T,T1-T12),全程12个时钟周期完成所有微操作,四个阶段(取指、译码、执行、回送)均在这12个时钟周期内完成。
核心微操作逻辑:取指→译码→读R1数据→读A数据→ALU加法运算→结果回写A→更新PSW标志位。
2.2 逐T周期(T1-T12)微指令与微操作拆解(明确四阶段)以下每一个时钟周期,都对应具体的微指令(微操作集合)和底层硬件动作,同时明确划分四个阶段,初学者可逐行对照理解,无需死记硬背,重点理清时序、数据流向和阶段衔接。
第一阶段:取指阶段(T1-T2)——获取指令操作码核心任务:CPU根据PC地址,从ROM中读取ADD A, R1的指令操作码,送入指令寄存器,完成“取指”,为后续译码做准备。
T1(S1P1):PC地址送地址总线,启动ROM取指对应微指令:PC输出使能,地址总线加载指令地址
具体微操作:1. 程序计数器PC的输出门打开,将当前指令的16位地址(假设为0000H,由程序下载时确定)送到16位地址总线AB上;2. 地址总线将地址信号传输至程序存储器ROM,ROM接收到地址信号,准备读取对应地址的指令机器码;3. 此时CPU内部控制信号锁定PC值,防止地址错乱,本周期无数据传输,仅完成地址定位,为取指做准备。
T2(S1P2):从ROM读取指令操作码,送入指令寄存器IR对应微指令:ROM读使能,指令操作码送入IR,PC自加1
具体微操作:1. ROM的读控制信号有效,将T1周期定位地址对应的指令机器码29H(ADD A, R1)读出,送到8位内部数据总线DB上;2. 指令寄存器IR的输入门打开,将数据总线上的指令操作码29H写入IR,完成取指操作;3. PC执行自增微操作,PC=PC+1,变为0001H,指向下一条指令的地址,为后续指令执行做准备;4. 指令译码器开始初步接收IR中的操作码,准备解析指令类型,取指阶段结束,进入译码阶段。
第二阶段:译码阶段(T3)——解析指令,调取微程序核心任务:指令译码器解析IR中的操作码,识别指令类型和寻址方式,调取控制存储器中对应的微程序,完成“译码”,为执行阶段做准备。
T3(S2P1):指令译码,调取对应微程序对应微指令:指令译码,控制存储器输出微指令序列
具体微操作:1. 指令译码器ID对IR中的29H操作码进行完整译码,识别出这是“累加器A与寄存器R1加法”指令,确定寻址方式为寄存器寻址;2. 译码完成后,控制信号触发控制存储器CM,从中调取ADD A, R1对应的完整微程序序列,按T4-T12的时序准备输出微指令;3. 工作寄存器组选择逻辑激活,根据PSW中RS1、RS0(默认00)选中第0组寄存器,锁定R1的地址,为后续读R1数据做准备;4. 内部总线清空,为后续数据传输预留通道,译码阶段结束,进入执行阶段。
第三阶段:执行阶段(T4-T7)——完成数据读取与加法运算核心任务:读取两个操作数(R1和A的数据),送入ALU执行加法运算,生成运算结果和状态标志位,完成“执行”指令规定的核心动作。
T4(S2P2):读取工作寄存器R1数据,送入暂存器1对应微指令:R1读使能,数据送入ALU暂存器1
具体微操作:1. 工作寄存器R1的输出控制信号有效,打开R1的输出门,将R1中存储的8位数据送到内部数据总线DB上;2. ALU左侧暂存器1的输入门打开,将数据总线上的R1数据写入暂存器1,完成第一个操作数的暂存;3. 本周期R1数据仅做暂存,不参与运算,ALU保持待机状态,等待第二个操作数传入。
T5(S3P1):读取累加器A数据,送入暂存器2对应微指令:累加器A读使能,数据送入ALU暂存器2
具体微操作:1. 累加器A的输出控制信号有效,打开A的输出门,将A中存储的8位原始数据送到内部数据总线DB上;2. ALU右侧暂存器2的输入门打开,将数据总线上的A数据写入暂存器2,完成第二个操作数的暂存;3. 此时ALU的两个输入端均已准备好待运算数据,暂存器1(R1)、暂存器2(A)数据保持稳定,等待运算控制信号。
T6(S3P2):ALU启动加法运算,生成运算结果对应微指令:ALU加法运算使能,计算初始结果
具体微操作:1. ALU接收到控制信号,切换至加法运算模式,对暂存器1(R1)和暂存器2(A)的数据执行8位二进制加法运算;2. 运算过程同步进行,生成初步的8位运算结果,同时检测运算过程中的进位状态:bit7进位(CY)、bit3进位(AC);3. 运算结果暂存于ALU的输出缓冲器中,不直接写入A,避免覆盖原始数据;4. PSW标志位缓冲器开始记录CY、AC的初始状态,暂不写入PSW。
T7(S4P1):运算结果校验,生成完整标志位对应微指令:标志位检测,生成OV、P标志
具体微操作:1. 对ALU运算结果进行溢出检测,判断bit6进位和bit7进位是否一致,生成溢出标志OV:一致则OV=0,不一致则OV=1;2. 检测运算结果中1的个数,生成奇偶标志P:1的个数为奇数,P=1;偶数则P=0;3. 此时CY、AC、OV、P四个标志位全部生成,存入PSW缓冲器,等待最终写入;4. ALU输出缓冲器中的运算结果保持稳定,确认无数据错误,执行阶段结束,进入回送阶段。
第四阶段:回送阶段(T8-T12)——保存结果,复位状态核心任务:将ALU的运算结果写回累加器A,更新PSW标志位,复位控制信号和内部模块,准备下一条指令,完成“回送”。
T8(S4P2):空拍与总线准备,为结果回写做准备对应微指令:内部总线复位,累加器A写使能准备
具体微操作:1. 12T 8051CPU本周期为空闲微操作(空拍),主要用于同步时序,避免数据传输冲突;2. 内部数据总线DB清空,释放总线控制权,为后续将运算结果写入A做准备;3. 累加器A的写控制信号预激活,打开写使能预备开关,等待T9周期写入数据;4. PC值保持不变,微程序按时序正常推进,无硬件动作变更。
T9(S5P1):运算结果写入累加器A对应微指令:ALU结果输出,数据写入累加器A
具体微操作:1. ALU输出缓冲器的输出门打开,将加法运算后的8位结果送到内部数据总线DB上;2. 累加器A的写使能信号完全有效,将数据总线上的运算结果写入A,覆盖A中原有的数据;3. 此时A中数据已更新为R1+A的结果,核心运算功能完成;4. 暂存器1、暂存器2执行清零微操作,释放存储资源,等待下一次运算。
T10(S5P2):PSW标志位写入,更新状态寄存器对应微指令:标志位缓冲器输出,写入PSW
具体微操作:1. PSW标志位缓冲器的输出门打开,将T6、T7周期生成的CY、AC、OV、P标志位送到内部总线;2. PSW寄存器的写使能信号有效,将四个标志位写入PSW的对应位,覆盖原有标志;3. 完成标志位更新后,PSW缓冲器清零,控制信号锁定PSW值,防止误修改;4. 此时指令的核心功能和状态更新全部完成,仅剩收尾时序。
T11(S6P1):控制信号复位,内部模块待机对应微指令:控制信号复位,模块状态清零
具体微操作:1. 所有寄存器的读、写控制信号全部复位,关闭输入输出门,避免数据泄露;2. ALU切换至待机状态,地址总线、数据总线清空,释放所有总线资源;3. 指令寄存器IR清零,准备接收下一条指令的操作码;4. 本周期为时序同步周期,确保所有硬件模块恢复初始待机状态。
T12(S6P2):指令执行完毕,准备下一条指令对应微指令:微程序结束,CPU就绪
具体微操作:1. ADD A, R1对应的微程序全部执行完毕,控制存储器停止输出微指令;2. CPU状态标记为“就绪”,等待下一个机器周期的时钟脉冲,准备执行PC指向的下一条指令;3. 全程12个时钟周期结束,单周期指令的四个阶段(取指、译码、执行、回送)全部完成,无任何遗留微操作。
三、三字节双周期指令ANL 080H, #03H的24T微指令与微操作全流程(分四阶段)3.1 指令基础信息(初学者先理清)指令助记符:ANL 080H, #03H
指令功能:将片内RAM 080H单元中的8位数据,与立即数03H(二进制00000011B)执行按位“与”逻辑运算,运算结果存回片内RAM 080H单元,本指令不影响PSW任何标志位。
指令长度:三字节指令,机器码依次为:操作码53H、直接地址08H、立即数03H,需要分三次从ROM读取指令字节,属于直接寻址+立即寻址,流程更复杂。
执行周期:双机器周期(24T,第一机器周期T1-T12,第二机器周期T1-T12),两个机器周期均包含取指、译码、执行、回送四个阶段,但各阶段的核心任务不同:
- 第一机器周期(T1-T12):核心完成“取指、译码、取操作数”,回送阶段仅做时序同步和模块准备,不执行运算、不回写结果;
- 第二机器周期(T1-T12):核心完成“执行运算、回写结果”,取指、译码阶段仅做衔接,不读取新指令。
按位与运算规则:1&1=1,1&0=0,0&1=0,0&0=0,仅对应位均为1时,结果位才为1,常用于屏蔽数据的高6位,保留低2位。
3.2 第一机器周期(T1-T12):取指、译码、取操作数(四阶段)第一机器周期的核心任务是完整读取三字节指令、解析指令类型、获取直接地址(080H)和立即数(03H),四个阶段围绕“获取指令和操作数”展开,不执行运算,全程为第二周期的运算做准备。
第一阶段:取指阶段(T1-T7)——读取三字节指令(操作码、直接地址、立即数)核心任务:分三次读取指令的三个字节(操作码、直接地址、立即数),依次送入对应寄存器,PC同步递增,完成“取指”,为译码和取操作数做准备(因是三字节指令,取指阶段占用T1-T7,比单字节指令更长)。
T1(S1P1):PC地址送地址总线,定位第一字节操作码微指令:PC输出地址,ROM地址定位
微操作:PC将当前指令首地址(假设0000H)送地址总线,ROM接收地址,准备读取第一字节操作码53H,PC保持原值,无其他动作。
T2(S1P2):读取操作码53H,送入IR,PC+1微指令:ROM读操作码,IR加载,PC自增
微操作:ROM读出53H操作码送数据总线,IR写入操作码,PC变为0001H,指令译码器开始初步解析,识别为“直接地址与立即数逻辑与”指令。
T4(S2P2):PC地址送总线,定位第二字节直接地址微指令:PC输出新地址,准备读直接地址
微操作:PC(0001H)送地址总线,ROM定位第二字节存储单元,准备读取直接地址08H,内部总线清空,为地址传输做准备。
T5(S3P1):读取直接地址08H,送入地址暂存器微指令:ROM读直接地址,地址暂存器加载
微操作:ROM读出08H送数据总线,地址暂存器写入该值,锁定片内RAM 080H单元地址,PC自增为0002H,准备读取第三字节立即数。
T6(S3P2):PC地址送总线,定位第三字节立即数微指令:PC输出地址,准备读立即数
微操作:PC(0002H)送地址总线,ROM定位第三字节存储单元,准备读取立即数03H,地址暂存器保持080H地址不变。
T7(S4P1):读取立即数03H,送入立即数暂存器微指令:ROM读立即数,立即数暂存器加载
微操作:ROM读出03H送数据总线,立即数暂存器写入该值,PC自增为0003H,指向下一条指令,至此三字节指令全部读取完毕,取指阶段结束。
第二阶段:译码阶段(T3)——解析指令,确定操作流程核心任务:指令译码器完整解析操作码,确定指令为三字节、直接寻址+立即寻址,调取对应微程序,明确后续取操作数和运算的流程,完成“译码”。
T3(S2P1):指令译码,确定指令长度与寻址方式微指令:完整译码,确认三字节指令
微操作:译码器解析53H操作码,确定指令为三字节,后续需读取直接地址08H和立即数03H,控制存储器调取对应微程序,准备后续取操作数字节,译码阶段结束,进入执行阶段。
第三阶段:执行阶段(无独立时序,融入取指阶段)核心任务:本机器周期的执行阶段无独立时钟周期,核心动作已融入取指阶段(读取直接地址和立即数,存入对应暂存器),完成“取操作数”的核心动作,为第二机器周期的运算做准备,执行阶段随取指阶段结束而完成。
第四阶段:回送阶段(T8-T12)——时序同步,模块准备核心任务:不回写运算结果(本周期无运算),仅完成控制信号复位、总线清空、内部模块待机,确保操作数稳定暂存,为第二机器周期的运算做准备,完成“回送”衔接。
T8-T12(S4P2-S6P2):第一周期收尾,准备第二周期运算微指令:时序同步,模块待机
微操作:这5个时钟周期为双周期指令的时序预留周期,无核心数据操作,主要完成控制信号复位、总线清空、内部模块准备,确保第一周期结束后,所有操作数(080H地址、03H立即数)均已稳定暂存,等待第二机器周期执行运算,第一机器周期四个阶段全部完成。
3.3 第二机器周期(T1-T12):读RAM、逻辑运算、结果回写(四阶段)第二个12T是指令的核心执行周期,四个阶段围绕“读取RAM数据、执行与运算、回写结果”展开,取指、译码阶段仅做衔接,不读取新指令,核心动作集中在执行和回送阶段。
第一阶段:取指阶段(无独立时序,仅做衔接)核心任务:本机器周期不读取新指令,取指阶段仅做时序衔接,PC保持0003H不变,确保CPU不误读下一条指令,取指阶段快速完成,无独立时钟周期。
第二阶段:译码阶段(无独立时序,仅做衔接)核心任务:不重新译码(第一机器周期已完成译码),仅调取第一机器周期确定的微程序,确保执行阶段的微操作有序推进,译码阶段快速完成,无独立时钟周期。
第三阶段:执行阶段(T1-T4)——读取RAM数据,执行与运算核心任务:读取片内RAM 080H单元的数据,与立即数03H一起送入ALU,执行按位与运算,生成运算结果,完成“执行”指令规定的核心动作。
T1(S1P1):地址暂存器输出,选中RAM 080H单元微指令:地址输出,片内RAM寻址
微操作:地址暂存器输出080H地址到内部地址总线,片内RAM接收到地址信号,选中080H存储单元,打开该单元的读使能预备开关,准备输出数据。
T2(S1P2):读取RAM 080H单元数据,送入暂存器1微指令:RAM读使能,数据送入ALU暂存器1
微操作:片内RAM 080H单元输出门打开,将内部存储的8位数据送到内部数据总线,ALU暂存器1写入该数据,完成第一个运算操作数的准备。
T3(S2P1):立即数暂存器输出,数据送入暂存器2微指令:立即数输出,送入ALU暂存器2
微操作:立即数暂存器输出门打开,将03H送到内部数据总线,ALU暂存器2写入该立即数,此时ALU两个操作数均已准备就绪,等待运算信号。
T4(S2P2):ALU启动按位与运算,生成结果微指令:ALU逻辑与运算使能,计算结果
微操作:ALU切换至逻辑与运算模式,对暂存器1(RAM数据)和暂存器2(03H)执行按位与运算,运算结果存入ALU输出缓冲器,因指令不影响标志位,无需检测PSW标志,直接跳过标志位生成步骤,执行阶段结束,进入回送阶段。
第四阶段:回送阶段(T5-T12)——回写结果,复位状态核心任务:将ALU的运算结果写回片内RAM 080H单元,复位控制信号和内部模块,准备下一条指令,完成“回送”。
T5-T6(S3P1-S3P2):空拍与总线准备,为写RAM做准备微指令:总线复位,RAM写使能准备
微操作:两个时钟周期为空拍周期,同步时序,内部数据总线清空,地址总线重新加载080H地址,片内RAM 080H单元的写使能信号预激活,准备接收运算结果。
T7(S4P1):ALU结果输出,送上内部数据总线微指令:ALU结果输出,总线加载数据
微操作:ALU输出缓冲器打开,将按位与运算后的结果送到内部数据总线,数据保持稳定,等待写入RAM单元,地址总线始终保持080H地址不变。
T8(S4P2):运算结果写入片内RAM 080H单元微指令:RAM写使能,结果回写存储单元
微操作:片内RAM 080H单元的写使能信号有效,将数据总线上的运算结果写入该单元,覆盖原有数据,完成指令核心功能,此时结果已永久存入RAM单元。
T9-T12(S5P1-S6P2):指令执行完毕,硬件复位微指令:控制信号复位,微程序结束
微操作:所有暂存器、寄存器清零,读写作能信号全部复位,地址总线、数据总线清空,ALU恢复待机状态,双周期24T时序全部结束,ANL 080H, #03H指令的两个机器周期、四个阶段全部完成,CPU等待下一条指令。
四、不同类型指令(单字节单周期、单字节双周期、双字节双周期)四阶段总结结合上述两条典型指令的拆解,下面针对8051单片机中最常见的三种指令类型——单字节单周期、单字节双周期、双字节双周期,分别总结其取指、译码、执行、回送四个阶段的核心特点、时序分配和操作逻辑,帮助初学者快速掌握不同类型指令的执行规律,对比理解四阶段的差异。
4.1 单字节单周期指令(以ADD A, R1为例)定义:指令长度为1字节(仅操作码,无操作数字节),执行周期为1个机器周期(12T),四个阶段均在12个时钟周期内完成,寻址方式多为寄存器寻址、累加器寻址,执行速度最快,是8051中最基础、最常用的指令类型。
(1)取指阶段(T1-T2,2个时钟周期)核心动作:PC输出指令地址→ROM读取单字节操作码→送入指令寄存器IR→PC自增1(因是单字节,PC仅加1),完成取指,时序短、动作简单,无额外操作数字节读取。
关键特点:取指阶段仅需2个时钟周期,一次性完成指令读取,无后续取操作数动作(操作数在寄存器中,无需从ROM/RAM读取)。
(2)译码阶段(T3,1个时钟周期)核心动作:指令译码器解析IR中的操作码→识别指令类型和寄存器寻址方式→调取控制存储器中对应的微程序→锁定操作数寄存器(如R1)地址,完成译码。
关键特点:译码速度快,仅需1个时钟周期,无需解析操作数字节(无操作数),直接锁定寄存器地址,为执行阶段做准备。
(3)执行阶段(T4-T7,4个时钟周期)核心动作:读取寄存器(R1)和累加器A的数据→送入ALU暂存器→ALU执行运算(加法)→生成运算结果和状态标志位,完成核心执行动作。
关键特点:执行阶段动作集中,主要是“读取操作数→运算”,操作数来自寄存器,读取速度快,无需访问ROM/RAM,时序分配紧凑。
(4)回送阶段(T8-T12,5个时钟周期)核心动作:空拍同步时序→运算结果写回累加器A→更新PSW标志位→控制信号复位→内部模块待机→准备下一条指令,完成回送。
关键特点:回送阶段包含空拍、结果回写、标志位更新、状态复位,时序最长,确保结果稳定存储和CPU状态恢复,为下一条指令执行做好准备。
4.2 单字节双周期指令(补充典型指令:MOVX A, @DPTR)定义:指令长度为1字节(仅操作码),执行周期为2个机器周期(24T),四个阶段分布在两个12T机器周期内,寻址方式多为外部RAM寻址(如MOVX指令),因需要访问外部RAM,操作复杂,需额外时序,故为双周期。
(1)取指阶段(第一机器周期T1-T2,2个时钟周期)核心动作:与单字节单周期指令一致,PC输出地址→ROM读取单字节操作码→送入IR→PC自增1,完成取指,无额外操作数字节读取。
关键特点:取指阶段与单字节单周期完全相同,时序短,仅读取操作码,操作数地址由DPTR(数据指针)提供,无需从指令中读取。
(2)译码阶段(第一机器周期T3,1个时钟周期)核心动作:解析操作码→识别为外部RAM寻址指令→调取对应微程序→激活DPTR,准备输出外部RAM地址,完成译码。
关键特点:译码阶段需识别外部寻址方式,激活DPTR,为后续访问外部RAM做准备,译码动作比单周期指令多一步“地址指针激活”。
(3)执行阶段(第一机器周期T4-T12 + 第二机器周期T1-T4,13个时钟周期)核心动作:第一机器周期T4-T12:DPTR输出外部RAM地址→选中外部RAM单元→准备读取数据;第二机器周期T1-T4:读取外部RAM数据→送入ALU暂存器→完成数据读取(无运算,仅读取数据),执行阶段跨两个机器周期。
关键特点:执行阶段最长,核心是访问外部RAM(外部设备访问速度慢,需额外时序),动作主要是“地址输出→选中单元→读取数据”,无复杂运算,时序主要用于外部设备同步。
(4)回送阶段(第二机器周期T5-T12,8个时钟周期)核心动作:外部RAM数据写回累加器A→空拍同步→控制信号复位(外部RAM和DPTR)→内部模块待机→准备下一条指令,完成回送。
关键特点:回送阶段主要是“数据回写”和“外部设备复位”,因涉及外部RAM,需额外时序确保数据稳定,回送时序比单周期指令长。
4.3 双字节双周期指令(补充典型指令:ANL direct, #data,以ANL 080H, #03H为例)定义:指令长度为2字节(操作码+操作数),执行周期为2个机器周期(24T),四个阶段分布在两个12T机器周期内,寻址方式多为直接寻址+立即寻址,因需要读取两个操作数字节,且可能访问内部RAM,操作复杂,故为双周期(注:ANL 080H, #03H为三字节,其规律与双字节双周期一致,仅取指阶段更长)。
(1)取指阶段(第一机器周期T1-T7,7个时钟周期)核心动作:分两次(双字节)/三次(三字节)读取指令→第一次读取操作码→第二次读取直接地址→第三次(三字节)读取立即数→PC同步递增(每读一个字节加1)→将操作数存入对应暂存器,完成取指。
关键特点:取指阶段最长,因需要读取多个操作数字节,时序主要用于从ROM中读取操作码和操作数,是双字节/三字节指令取指阶段的核心特点。
(2)译码阶段(第一机器周期T3,1个时钟周期)核心动作:解析操作码→识别为直接寻址+立即寻址指令→确定指令长度(双字节/三字节)→调取对应微程序→锁定直接地址(如080H),完成译码。
关键特点:译码阶段需同时识别“直接寻址+立即寻址”两种方式,明确指令长度(双字节/三字节),核心是锁定直接地址和立即数的存储位置,为后续读取操作数和运算做准备,译码动作比单周期、单字节双周期指令更细致,需确认操作数的类型和存储方式。
(3)执行阶段(第一机器周期执行阶段融入取指,第二机器周期T1-T4,4个时钟周期)核心动作:第一机器周期无独立执行时序,执行动作融入取指阶段,完成直接地址和立即数的读取与暂存;第二机器周期T1-T4:根据直接地址读取片内RAM数据→将RAM数据和立即数分别送入ALU暂存器→ALU执行对应逻辑/算术运算(如按位与)→生成运算结果,完成核心执行动作。
关键特点:执行阶段分为两部分,第一机器周期侧重“准备操作数”,第二机器周期侧重“执行运算”,核心动作是“读取RAM数据→运算”,操作数分别来自片内RAM(直接寻址)和指令本身(立即寻址),时序分配集中在第二机器周期。
(4)回送阶段(第一机器周期T8-T12 + 第二机器周期T5-T12,13个时钟周期)核心动作:第一机器周期T8-T12:时序同步、控制信号复位、操作数稳定暂存,为第二周期运算做准备,不回写结果;第二机器周期T5-T12:空拍同步时序→运算结果写回片内RAM直接地址单元→控制信号复位(RAM、暂存器等)→内部模块待机→准备下一条指令,完成最终回送。
关键特点:回送阶段跨两个机器周期,第一周期仅做衔接准备,第二周期核心是“结果回写”,因涉及片内RAM写入,需额外空拍确保数据稳定,回送时序最长,涵盖准备、回写、复位全流程,确保指令执行完整。
4.4 三种指令类型四阶段核心对比(补充总结,便于对比记忆)为帮助初学者快速区分三种指令的四阶段差异,提炼核心对比要点,无需死记硬背,重点掌握时序分配和核心动作差异:
- 取指阶段:单字节单周期(2T,仅读操作码)→ 单字节双周期(2T,仅读操作码)→ 双字节双周期(7T左右,读操作码+操作数),时序随指令字节数增加而延长;
- 译码阶段:均为1T(第一机器周期T3),差异在于译码内容——单周期侧重寄存器寻址,单字节双周期侧重外部RAM寻址,双字节双周期侧重直接+立即寻址;
- 执行阶段:单字节单周期(4T,寄存器取数+运算)→ 单字节双周期(13T,外部RAM访问+取数)→ 双字节双周期(4T,RAM取数+运算,含操作数准备),时序随寻址复杂度增加而延长;
- 回送阶段:单字节单周期(5T,回写A+更新标志)→ 单字节双周期(8T,回写A+外部设备复位)→ 双字节双周期(13T,分两周期,回写RAM+复位),核心是“回写目标不同”(A/外部RAM/片内RAM)。
总结:8051单片机指令的四阶段(取指、译码、执行、回送)是固定框架,时序分配和核心动作随指令长度(单字节/双字节/三字节)、执行周期(单周期/双周期)、寻址方式的不同而变化,但核心逻辑一致——“获取指令→理解指令→执行动作→保存结果”,掌握这一逻辑,即可快速拆解任何12T 8051指令的底层微操作流程。
|
|