MCS-51 单片机内部组成部分详解
扫描二维码
随时随地手机看文章
中央处理器(CPU)
MCS-51单片机的CPU字长为8位,内部包含运算器、控制器和特殊功能寄存器。由于特殊功能寄存器在功能和使用方法方面与存储器比较相似,因此将与存储器一同讲解。本小节仅介绍运算器和控制器的基本情况。
1.运算器
运算器包含1个8位的算术逻辑运算单元(ALU)、2个暂存器(TMP1和TMP2)、累加器ACC、寄存器B、程序状态字寄存器(PSW)和1个布尔处理器。
算术逻辑运算单元ALU可以进行1个字节(8位二进制数)的加、减、乘、除等算术运算和“与”“或”“非”等逻辑运算。
累加器ACC和寄存器B均是8位寄存器。进行算术逻辑运算时,ACC提供数据和保存运算结果。在进行乘、除法运算时,寄存器B与ACC配合,提供数据并保存运算结果。
程序状态寄存器PSW是8位寄存器,其中的二进制位用于记录算术逻辑运算结果的状态,如加法是否产生进位、有符号运算结果的符号等。
布尔处理器以PSW中的最高位CY为位累加器,可以进行1个二进制位的逻辑运算,包括“与”“或”“非”等操作。
2.控制器
控制器是CPU的核心,控制、协调整个单片机系统的工作,包括程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、地址寄存器(AR)、时钟振荡器和定时控制电路等。
程序计数器PC是16位的寄存器,PC中的数作为地址指向程序存储器,由其确定接下来CPU将从程序存储器中的哪一个字节单元读取指令代码。单片机读取一条指令,PC中地址将自动改变,以指向下一个读取指令的存储单元。因为PC所提供的地址是16位的,所以MCS-51单片机所支持的程序存储区最大容量为216个字节单元,即64KB,其地址范围为0000H~FFFFH。
地址寄存器AR将接收PC的值,该值将被送上地址总线,用于选中程序存储器的存储单元。之后,该存储单元中存放的指令代码,将通过数据总线传送给IR。
IR中的指令代码将被送入ID。ID翻译该指令代码后,CPU将产生控制信号,用于控制单片机完成指令代码所指定的操作。
可见,PC的值决定了CPU取指令的顺序,也决定了程序执行的顺序。
时钟振荡器和定时控制电路的作用是产生时钟信号,该时钟信号起到指挥的作用,用于协调单片机各部件相互配合、有序工作。
存储器和寄存器
单片机内部可以存放信息的硬件资源包括存储器和寄存器。存储器可以分为两类,分别是存储程序的程序存储器(ROM)和存储数据的数据存储器(RAM)。存储器按照其所处位置又可以被分为片内和片外两种。寄存器通常具有某些特殊的功能,被称为特殊功能寄存器(Special Function Register,SFR)。
1.片内数据存储器
MCS-51单片机片内RAM的地址范围如图2-4所示,其中52子系列单片机的高128B RAM又被称为附加RAM区。
图2-4 MCS-51单片机片内数据存储器(RAM)的地址范围
a)51子系列b)52子系列
2.特殊功能寄存器
MCS-51单片机内部有很多特殊功能寄存器。特殊功能寄存器不但有地址,而且还有专属的符号名称(如PCON、SCON和PSW等)。图2-4可以发现,特殊功能寄存器的地址范围为80H~FFH,与52子系列单片机片内RAM高128B单元的地址范围重叠。因此,在通过地址访问片内RAM高128B存储单元和特殊功能寄存器时,必须通过数据的寻址方式明确该地址对应的是片内RAM还是SFR。特殊功能寄存器的寻址方式是直接寻址,片内RAM高128B单元的寻址方式是寄存器间接寻址。
“寻址”是汇编源程序设计中的概念,本书将在第3章的3.3节中详细介绍与寻址有关的知识。
另外,某些特殊功能寄存器中的二进制位也有地址,即位地址。有位地址的位可以通过位寻址的方式单独访问。
需要特别注意的是,只有字节地址能够被8整除的特殊功能寄存器中的位才有位地址,才能按位寻址。
3.片内数据存储器的划分
片内数据存储器的不同区域有不同的寻址方式,其划分如图2-5所示。为了强调区分特殊功能寄存器区与52子系列附加通用RAM区的方法,图2-5中也给出了SFR区的寻址方式。
图2-5片内数据存储器的划分
(1)工作寄存器区
工作寄存器区共有32个字节,分成0区、1区、2区和3区,共4个子区,见表2-4。每个子区均有R0~R7共8个工作寄存器。单片机CPU每一时刻只能使用一个工作寄存器子区,所用寄存器子区由PSW寄存器的PSW.4位和PSW.3位决定,见表2-4。工作寄存器区中的所有寄存器均可以通过寄存器寻址、直接寻址和寄存器间接寻址的方式访问。
(2)位寻址区
位寻址区的每个字节都有字节地址,可以通过直接寻址和寄存器间接寻址的方式访问。另外,位寻址区中的每个位都有地址,即位地址,可以通过位寻址方式单独访问,见表2-5。
(3)通用RAM区
MCS-51单片机的低128B通用RAM区可以采用直接寻址和寄存器间接寻址的方式访问,
而52子系列的高128B通用RAM区仅能采用寄存器间接寻址的方式访问。
4.片外数据存储器和I/O接口
MCS-51单片机可以扩展64KB的片外数据存储器,其地址范围如图2-6所示。需要特别指出的是,单片机的片外扩展I/O空间与片外RAM的地址是统一编址的,即在0000H~0FFFFH共64K个地址中,一部分地址分配给片外RAM,一部分地址分配给片外扩展的I/O接口,也可以全部地址都分配给片外RAM或I/O接口。因为是统一编址的,所以在程序中访问片外RAM和片外扩展I/O接口的指令相同。
图2-6片外数据存储器(RAM)区或片外扩展I/O区的地址范围
另外,片外RAM区(或片外扩展I/O区)与片内RAM区是独立编址的,即图2-5中片内RAM区地址00H~FFH不会分配给片外RAM区(或片外扩展I/O区),同样,图2-6中片外RAM区(或I/O区)地址0000H~0FFFFH也不会分配给片内RAM区。因为是独立编址的,所以访问片内RAM区和访问片外RAM区(或片外扩展I/O区)时所用的指令不同。
5.程序存储器
程序存储器(ROM)用来存放代码,MCS-51单片机除片内ROM外,还可以扩展
64KB的片外程序存储器。图2-7给出了程序存储器的配置,图中的EA是单片机的引脚,
决定了单片机是否使用片外程序存储器。由图2-7可知,当EA=0时,单片机只能使用片外
程序存储器;当EA=1时,对于51子系列单片机,地址为0000H~0FFFH的存储单元来自于片内ROM,对于52子系列单片机,地址为0000H~1FFFH的存储单元来自于片内ROM,其他地址所对应的存储单元则均来自于片外ROM。
图2-7程序存储器的配置
a)EA=0
b)51子系列单片机且EA=1 c)52子系列单片机且EA=1
在单片机程序中,有一类被称为中断服务子程序的特殊子程序,专用于处理中断源所产生的中断事件。在程序存储器中,有一块区域专用于存放中断服务处理子程序的指令代码。
以51子系列单片机为例(见表2-1),该系列单片机有5个中断源,分别是INT0、T0、
INT1、T1和串口中断,它们的中断服务处理程序在ROM中的存放地址分别为0003H、000BH、0013H、001BH和0023H,这些地址被称为中断服务处理程序的入口地址,如图2-8所示。程序存储器的地址0000H对应于复位入口,即主程序的入口,单片机开始工作时将首先从程序存储器中地址为0000H的存储单元中取指令的。
图2-8中断服务处理子程序的入口
需要注意,比较中断服务处理程序的中断入口地址后,可以发现相邻入口地址之间的差很小,如:T0中断入口与INT0中断入口之差为000BH-0003H=8H。这意味着如果T0中断与INT0中断的中断服务处理程序都存在,则INT0中断服务处理程序的长度不能超过8B,否则将占用T0中断服务处理程序的存储空间。解决这一问题的方法是,将中断服务处理子程序存放在ROM的其他位置,而仅在中断入口存储单元存放一条能跳转至中断服务处理程序的跳转指令。