MCS-8051单片机原理

时间:2024-04-03 22:26:50

内部结构

MCS-8051单片机原理
MCS-51 系列单片机主要由以下部件通过片内总线连接而成:*处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、并行输入/输出口(P0 口~P3 口)、串行口、定时器/计数器、中断控制、总线控制及时钟电路。

CPU的组成

CPU 是单片机的核心部件,由运算器和控制器组成,用以进行各种算术和逻辑运算,
并实现数据的传送。
运算器包括算术逻辑单元部件 ALU(Arithmetic and Logic Unit)、位处理器、8 位累加
器 A、寄存器 B、两个 8 位暂存寄存器 TMP1 和 TMP2 及程序状态字寄存器 PSW(8 位)
等。ALU 不仅可以实现 8 位数据的加、减、乘、除、增量、减量、十进制调整、比较等算
术运算和与、或、异或、求补等逻辑运算,同时还具有一般微机所不具备的位处理功能,可
对位变量进行置位、清零、求补及与、或等操作。
控制器是 CPU 的神经中枢,它识别指令并根据指令性质协调单片机内部各组成单元自
动协调地工作。主要包括程序计数器 PC、PC 增量器、指令寄存器、指令译码器、定时及控
制逻辑电路等。其功能是以主振频率为基准产生时钟信号,向单片机内部各组成单元发出各
种微控制信号,控制指令的读入、译码和执行,并对指令执行过程进行定时和逻辑控制。

指令执行的基本步骤

必须先在存储器中载入程序,单片机才可以开始工作。所谓程序,就是为了完成某项工作,将一系列指令有序地组合,而指令则是要求单片机执行某种操作的命令。指令分为操作码和地址码两部分。操作码部分规定了单片机的操作类型;而地址码部分一般是直接或间接地给出了参与操作的数据的存放地址,所以地址码也可以称为操作数。单片机执行一条指令一般分为两个步骤:取指令阶段和指令执行阶段。CPU 从程序存储器中取出指令操作码,送到指令寄存器,再经指令译码器译码,产生一系列控制信号,以明确该指令执行什么样的操作,以及操作数的存放地址,根据这个地址获取操作数,这是取指令阶段;然后 CPU 按操作码指明的操作类型对获取的操作数进行操作(也可称为运算),这是指令执行阶段。
那么 CPU 如何完成取指令和执行指令操作的全过程呢?
CPU 复位后,程序计数器 PC 会自动地指向第一条指令存放的存储单元的首地址(16位 PC 中的内容总是 CPU 将要执行的那条指令所在的存储单元的首地址)。在控制信号的控制下,CPU 从该存储单元中取出指令,暂存在指令寄存器中。指令的操作码部分进入指令译码器译码,译码结果通知控制电路发出相应的控制信号来控制 CPU 各部件,以完成这条指令的操作。指令的地址码部分送往操作数地址形成电路,以便形成实际的操作数地址,然后 CPU 再通过总线从该地址所在单元取出操作数送入暂存寄存器,从暂存寄存器送入算术逻辑运算部件 ALU 中。运算结果送指令所指定的单元,同时将运算结果的有关状态送入程序状态字寄存器 PSW 中。指令的实际执行过程比上述要复杂的多,并且所有的操作都是在精确的时序控制下进行的。在学习时需要注意以下两点:
1)PC 是一个有自动加 1 功能的 16 位计数器。CPU 从存储单元取指令的过程中,每取一个字节的内容,程序计数器 PC 就自动加 1。在取完这条指令后,PC 中的内容就是下一条要执行的指令所在存储单元的首地址了。PC 没有地址,是不可寻址的,因此,用户不能对它进行读和写操作。
2)以上是 CPU 顺序执行指令的操作过程,然而在实际应用中,CPU 有时还要执行程序的转移、子程序的调用和中断响应等操作,那时 PC 中的内容不再是上述情况中简单地加1,而是根据不同的情况自动地被置入或修改成新的目的地址,从而改变程序的执行顺序。

内部存储器

存储器是组成单片机的主要部件之一,其功能是存储信息(数据和程序)。存储器按其存储方式可以分成两大类:一类为随机存储器 RAM;另一类是只读存储器 ROM。CPU 在运行过程中可对 RAM 随时进行数据的写入和读出,但在关闭电源时,RAM 中所存储的信息会丢失,所以 RAM 只能用来存放暂时性的输入/输出数据、运算中的结果等。RAM 也因此常被称为数据存储器。
而 ROM 是写入数据后不能更改只能读出的存储器。在断电后,ROM 中的信息保留不变,所以 ROM 用来存放固定的程序和固定的数据,如系统程序、常数、表格等。ROM 也因此常被称为程序存储器。常用的 ROM 根据其编程方式不同可分为以下 5 种类型:掩膜型ROM(MROM)、一次性可编程ROM(PROM,又称为 OTPROM)、紫外线可擦 ROM(EPROM)、电可擦 ROM(EEPROM)、闪速 ROM(Flash ROM)。
MCS-51 单片机存储器的地址空间可分为 3 个:
1)片内片外统一编址的 64KB 的程序存储器地址
2)片内数据存储器与特殊功能寄存器统一编址的 256B 内部数据存储器地址空间(8位地址
00H-7FH,80H~FFH);
3)64KB 片外数据存储器地址空间(16 位地址 0000H~FFFFH)。
对于复杂一些的单片机应用系统,当片内所固有的程序存储器和数据存储器不能满足需要时,往往还要在单片机芯片外另行扩展存储器,称之为片外存储器。

内部程序存储器

MCS-51 单片机有片内有程序存储器和片内无程序存储器之分。如 80C51 单片机片内设置有4KB 的掩膜型 ROM。其地址范围是 0000H-0FFFH。当 EA 接高电平时,指令寻址地址在 0000H~0FFFH 时,CPU 访问内部存储单元,如果指令寻址地址大于 0FFFH 时,CPU自动转向对片外存储器的访问。当 EA 接低电平(接地)时,CPU 只能访问外部程序存储器,这时外部程序存储器的地址从 0000 开始编址。80C31、80C32 单片机因其片内无程序存储器,所以只能采用将EA 接地的方法。
程序存储器的一 些低端地址单元是用作存储特定程序的入口地址的,其中0000H-0002H 这 3 个单元是系统的启动单元。系统复位后,程序计数器 PC 中的复位值是0000H,所以系统是从 0000H 单元开始取指令执行程序的。在编程时,应当在这 3 个单元中存放一条无条件转移指令,以转向执行指定的程序。而地址为 0003H~002AH 的 40 个单元是中断服务程序地址区,分成 5 段,每段 8 个单元,分别分配给 5 个中断源,具体分配如下:
MCS-8051单片机原理
在中断响应后,系统按中断类型自动转到各中断服务程序的首地址单元去中断服务程序地址区应当存放中断服务程序,但在实际应用中,8 个存储单元往往难以存下一个完整的中断服务程序,所以,通常是从该中断服务程序的首地址开始,存放一条无条件转移指令,以便响应中断后,通过该地址区转到中断服务程序的实际入口地址单元中去。

内部数据存储器

MCS-51 单片机内部有 128 或 256 字节的 RAM 用作数据存储器(不同的型号有区别),它们均可读写,部分单元还可以位寻址。
80C51 单片机的片内数据存储器共有 256 个字节,地址范围为 00H-7FH 单元的 128 个字节作为用户 RAM 区,分成工作寄存器区、位寻址区、通用 RAM 区三部分;地址范围为80H~FFH 单元的 128 个字节作为特殊功能寄存器区(SFR)。
MCS-8051单片机原理

堆栈

堆栈就是在单片机内部 RAM 中,从某个选定的存储单元开始划定的一个地址连续的区域。设立堆栈的目的是用于数据的暂存,中断、子程序调用时断点和现场的保护与恢复。这个区域本身没有任何特殊之处,它就是内部 RAM 的一部分,也是用来存放数据的,不同的是这个区域以选定的某个存储单元作为栈底,只允许向一个方向写入数据,最后一个写入数据的存储单元称为栈顶。堆栈的生成有两种情况:向高地址方向写入数据生成的堆栈称为向上生长型堆栈;反之称为向下生长型堆栈。MCS-51 单片机设置的是向上生长型堆栈。数据写入堆栈为插入(PUSH)运算,通常称为入栈;数据从堆栈中读出为删除(POP)运算,通常称为出栈。按堆栈的规定,入栈和出栈只能在栈顶一端进行。因此,向上生长型的堆栈栈顶存储单元的地址必定随着数据的入栈而递增,随着数据的出栈而递减,并由此规定可知,对栈顶进行入栈和出栈操作必定是“先进后出”或“后进先出”。

堆栈指针

堆栈指针 SP 是一个 8 位特殊功能寄存器,用于指示堆栈的栈顶地址, SP 总是指向堆栈栈顶,它决定了栈顶在内部 RAM 中的物理位置。所以,每当执行一次入栈操作(PUSH 指令)时,SP 就会在原来值的基础上自动加 1;每当执行一次出栈操作(POP 指令)时,SP就会在原来值的基础上自动减 1。当堆栈中位空(无数据)时,栈顶地址等于栈底地址,两者重合,SP 的内容即为栈底地址。栈底地址一旦设定,就固定不变,直至重新设置。每当数据进栈或出栈时,SP 的内容都随之变化,即栈顶随之浮动。
数据入栈的操作过程为:先将 SP 加 1(SP←SP+1),然后将要入栈的数据存放在 SP指定的存储单元中。将数据从堆栈中弹出时,先将 SP 寄存器指定的存储单元的内容传送到POP 指令给定的寄存器或内部 RAM 单元中,然后 SP 减 1(SP←SP-1)。

堆栈的开辟

单片机的堆栈只能开辟在片内数据存储器中,称为内堆栈形式。系统复位后,SP 中的复位值是 07H,即 SP 指向片内数据存储器中地址为 07H 的存储单元,这个存储单元正好在单片机片内数据存储器的工作寄存器区。为了避免占用宝贵的工作寄存器区和位寻址区,所以,在程序设计时,常用指令对 SP 中的复位值进行修改,把堆栈开辟在通用 RAM 区,即在 30H~7FH 地址范围内开辟一个地址连续的存储区域来实现堆栈。

复位

复位是单片机的初始化操作,其主要功能是将程序计数器 PC 初始化为 0000H,使单片机从 0000H 单元开始执行程序。除了进入系统的正常初始化外,当程序运行出错或操作错误使系统处于死锁状态时,也须重新启动单片机,使其复位。