理论教育 单片机CPU的基本结构和工作原理

单片机CPU的基本结构和工作原理

时间:2023-06-25 理论教育 版权反馈
【摘要】:4.2.2.3专用寄存器组专用寄存器组主要用来指示当前要执行指令的内存地址、存放操作数和指示指令执行后的状态等,包括程序计数器、累加器A、程序状态字寄存器、堆栈指示器SP寄存器、数据指针DPTR和通用寄存器B。

单片机CPU的基本结构和工作原理

8051的中央处理器(CPU)主要由算术逻辑单元、控制器部件和寄存器3部分电路组成。CPU是整个单片机的核心部件,实现了运算器和控制器的功能,具体介绍如下所述。

4.2.2.1 算术逻辑单元

8051的算术逻辑运算单元(ALU)由一个加法器、两个8位暂存器(TMP1和TMP2)和布尔处理器组成。ALU是8051的处理核心,程序通过累加器A、寄存器B和寄存器组R0~R7等控制ALU以完成各种算术和逻辑运算,同时可以用乘法和除法指令来增强运算能力。

4.2.2.2 定时控制部件

定时控制部件起到控制器的作用,由定时控制逻辑、指令寄存器和振荡器等电路组成。单片机的工作过程就是执行用户编写程序的过程,而控制单元可以完成此项重任。指令寄存器(IR,Instruction Register)用于存放从程序存储器中取出的指令码,定时控制逻辑用于对指令寄存器中的指令进行译码,并在晶体振荡器的配合下产生执行指令所需的时序脉冲,从而完成指令的执行过程。

4.2.2.3 专用寄存器组

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

(1)程序计数器

程序计数器是一个16位二进制的程序地址寄存器,用来存放下一条要执行指令的地址,指令执行完后可以自动加1,以便指向下一条要执行的指令,可以说CPU就是靠PC指针来实现程序的执行。

(2)累加器A。

累加器A是一个8位二进制寄存器,用来存放操作数和运算结果。在CPU执行某种运算前,两个操作数中的一个通常放在累加器A中,运算完成后便把结果存放在累加器A中,可以说累加器A是使用最频繁的寄存器。

(3)程序状态字。

PSW是一个8位二进制寄存器,用来存放指令执行后的有关CPU状态,通常由CPU来填写,但是用户也可以改变各种状态位的值。标志位的定义参见表4-4。

表4-4 PSW标志位的定义

1)进位标志位Cy(Carry)。用于表示加法运算中的进位和减法中的借位。加法运算中有进位或减法运算中有借位,则Cy位置1,否则为0。

2)辅助进位AC(Auxiliary Carry)。用于表示加法运算时低4位有没有向高4位进位和减法运算中低4位有没有向高4位借位。若有进位或借位则AC位置1,否则该位为0。

3)用户标志位F0(Flag zero)。该位是由用户根据程序执行的需要自行设定的标志位,用户可以通过设置该位来决定程序的流向。

4)寄存器选择位RS1和RS0(Register Select)。8051单片机有4个寄存器组,每组有8个8位工作寄存器R0~R7,它在RAM中的实际物理地址可以根据需要来选择确定使用哪个寄存器组,参见表4-5。(www.daowen.com)

表4-5 RS1、RS0选择工作寄存器组

5)溢出标志位OV(Over flow)。表示运算过程中是否发生了溢出。若执行结果超过了8位二进制数所能表示数据的范围(即有符号数-128~+127),则OV标志位置1。

对于无符号数(也就是都是正数),如果加法出现了进位、减法出现了借位,则表示该次运算结果发生了溢出。对于有符号数,如果正数减负数的结果出现了负数、负数减正数的结果出现了正数,则表示该次运算结果同样发生了溢出。

无符号数与有符号数判断溢出的方法不一样,对于有符号数需要通过OV溢出标志位来判断,而无符号数要用进位表示位Cy来判断。

6)PSW.1位。PSW.1位没有定义,系统没有使用,用户可以根据自己的需要来决定是否使用该标志位。

7)奇偶标志位P(Parity)。奇偶标志位P用于指示运算结果中1的个数的奇偶性。若P=1,则累加器A中1的个数为奇数;若P=0,则累加器A中1的个数为偶数。

(4)堆栈指针SP。

堆栈是一种数据结构,堆栈指针SP(Stack Pointer)是一个8位寄存器,指示了栈顶在内部RAM中的位置。数据写人堆栈称为入栈(PUSH),从堆栈中取出数据称为出栈(POP)。

堆栈是为了中断操作和子程序的调用而设立的,用于保存现场数据,即常说的断点保护和现场保护。单片机无论是转入子程序或中断服务程序的执行,执行完后还是要返回到主程序。在转入子程序和中断服务程序前,必须先将现场的数据保存起来,否则返回时CPU根本不知道原来的程序执行到哪一步、应该从何处开始执行。

MCS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元。同时MCS-51的堆栈可以由用户设置,SP的初始值不同,堆栈的位置也不同。

堆栈的操作有两种方法:

1)自动方式。在响应中断服务程序或调用子程序时,返回地址自动入栈。当需要返回执行程序时,返回的地址自动交给程序计数器PC,以保证程序返回断点处继续执行。这种方式不需要编程人员干预。

2)手动方式。使用专用的堆栈操作指令进行入栈和出栈操作只有两条指令:入栈使用PUSH指令,用于在中断服务程序或子程序调用时保护现场;出栈使用POP指令,用于子程序完成时为主程序恢复现场。

(5)数据指针DPTR。

数据指针DPTR(Data Pointer)是一个16位的寄存器,由两个8位寄存器DPH和DPL组成,其中DPH为高8位,DPL为低8位。

数据指针DPTR可以用来存放片内ROM、片外RAM和片外ROM的存储区地址,用户通过该指针实现对不同存储区的访问。

(6)通用寄存器B。

通用寄存器B是专门为乘法和除法而设置的寄存器,是一个二进制8位寄存器。在乘法或除法运算之前用来存放乘数或除数,在运算之后用来存放乘积的高8位或除法的余数。

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

我要反馈