存储器是单片机的又一个重要组成部分,存储容量为256个单元的
存储器结构中每个
存储单元对应一个地址,256个单元共有256个地址,用两位16进制数表示,即
存储器的地址(00H~FFH)。
存储器中每个
存储单元可存放一个八位二进制信息,通常用两位16进制数来表示,这就是存储器的内容。存储器的存储
单元地址和存储单元的内容是不同的两个概念,不能混淆。
程序存储器
程序存储器概念
程序
存储器是用于存放程序代码的,是控制计算机动作的一系列命令,单片机只认识由“0”和“1”代码构成的
机器指令。如前述用
助记符编写的命令MOV A,#20H,换成机器认识的代码74H、20H:(写成二进制就是01110100B和00100000B)。在单片机处理问题之前必须事先将编好的程序、
表格、常数汇编成机器代码后存入单片机的
存储器中,该存储器称为程序
存储器。
介绍
程序
存储器可以放在片内或片外,亦可片内片外同时设置。由于PC
程序计数器为16位,使得程序
存储器可用16位二进制地址,因此,内外
存储器的地址最大可从0000H到FFFFH。8051内部有4k字节的ROM,就占用了由0000H~0FFFH的最低4k个字节,这时片外扩充的程序
存储器地址编号应由1000H开始,如果将8051当做8031使用,不想利用片内4kROM,全用片
外存储器,则地址编号仍可由0000H开始。不过,这时应使8051的第{31}脚(即EA脚)保持低电平。当EA为高电平时,用户在0000H至0FFFH范围内使用内部ROM,大于0FFFH后,单片机CPU自动访问外部程序存储器。
数据存储器
组成
介绍
其最大容量可扩展到64k,用于存储实时输入的数据。8051内部有256个单元的内部数据
存储器,其中00H~7FH为内部随机存储器RAM,80H~FFH为专用
寄存器区。实际使用时应首先充分利用内部
存储器,从使用角度讲,搞清内部数据存储器的结构和地址分配是十分重要的。因为将来在学习
指令系统和程序设计时会经常用到它们。8051内部数据
存储器地址由00H至FFH共有256个字节的
地址空间,该空间被分为两部分,其中内部数据RAM的地址为00H~7FH(即0~127)。而用做
特殊功能寄存器的地址为80H~FFH。在此256个字节中,还开辟有一个所谓“位地址”区,该区域内不但可按字节寻址,还可按“位(bit)”寻址。对于那些需要进行
位操作的数据,可以存放到这个区域。从00H到1FH安排了四组工作寄存器,每组占用8个RAM字节,记为R0~R7。究竟选用那一组
寄存器,由前述
标志寄存器中的RS1和RS0来选用。在这两位上放入不同的二进制数,即可选用不同的
寄存器组,
特殊功能寄存器
介绍
特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除
程序计数器PC和四个工作寄存器区外,其余21个
特殊功能寄存器都在这SFR块中。其中5个是双字节
寄存器,它们共占用了26个字节。各
特殊功能寄存器的符号和地址见附表。其中带*号的
可位寻址。
特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。用于CPU PSW便是典型一例。
分类
这些
特殊功能寄存器大体上分为两类,一类与芯片的
引脚有关,另一类作片内功能的控制用。与芯片
引脚有关的
特殊功能寄存器是P0~P3,它们实际上是4个八位
锁存器(每个I/O口一个),每个锁存器附加有相应的输出
驱动器和输入缓冲器就构成了一个
并行口。MCS-51共有P0~P3四个这样的
并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片控制的
寄存器中,
累加器A、
标志寄存器PSW、数据
指针DPTR等的功能前已提及,而另一些寄存器的功能在后面有关部分再作进一步介绍。
MCS-51单片机存储器结构详解
MCS-51单片机存储器采用哈佛结构(har-vard),在物理结构上分为程序存储器空间和数据存储器空间,细分为:片内、片外程序存储器和片内、片外数据存储器从图中可看出,这4个存储空间存在地址冲突问题:数据存储器与程序存储器的64KB地址空间重叠;程序存储器中片内与片外的低4KB地址重叠;数据存储器中片内与片外最低的256B(8031仅有低128B)地址重叠。在程序存储器中,片内地址0000日一OOZA日的存储空间,留给系统使用。片内数据存储器共256B地址空间,分为低128B和高128B。低128B又分为工作寄存器区、位寻址区和用户RAM区;高128B又叫特殊功能寄存器,这些寄存器的功能具有专门的规定,用户不能修改其结构。存储器中共有11个可位寻址的位地址。其中,片内数据存储器中有128个;特殊功能寄存器中有83个。
MCS-51程序存储器
MCS-51中,程序存储器通过16位程序计数器(PC)寻址,具有64KB寻址能力,也即可以在64KB的地址空间任意寻址。其中,具有4KB片内程序存储器空间,地址为000H-0FFFH(注:8031无片内程序存储器);片外程序存储器空间最大可扩展到64KB,地址为0000H-FFFFH,片内、外统一编址。
1、程序存储器片内与片外地址
由于片内、外统一编址,所以片内4KB存储空间地址000H-0FFFH与片外存储器地址000H-0FFFH发生冲突。但是,CPU是访问片内存储器还是访问片外存储器,可由引脚上所接的电平来确定。
1)当EA引脚接高电平时,若程序计数器(PC)值超出片内存储空间,则自动转向片外程序存储器空间执行程序;
2)当EA引脚接低电平时,单片机只能执行片外程序存储器的程序。
另外,因为8031没有片内程序存储器,所以就将EA引脚固定接低电平,通过外部扩展程序存储器来存放程序;而对其它MCS-51,若没有片外程序存储器,那应将引脚固定接高电平。通过EA引脚所接电平不同,解决了程序存储器中片内、片外地址冲突问题。
2、程序存储器中的特殊单元
MCS-51程序存储器中,有6个存储单元具有特殊用途。
0000H单元为系统启动地址。MCS-51单片机启动复位后,程序计数器(PC)的内容为0000H,所以系统将从0000H单元取指令,并开始执行程序。程序设计时一般在该地址存放一条绝对跳转指令,转入主程序的入口地址。
另外0003H一002AH日被均匀地分成5段,用于5个中断服务程序的入口。
其中0003H、000BH、0013H、O01BH、0023H为5个中断源的中断服务程序的入口地址。
中断源的中断服务程序的入口地址,即当中断产生相应的中断服务程序的起始地址被装入程序计数器(PC),系统将从该地址取指令,并执行程序。
MCS-51数据存储器
8051有256个单元的内片数据存储器,其中00H-7FH为片内随机存储器RAM,也叫低128B;80H-FFH为特殊功能寄存器,也叫高128B。低128B又分为工作寄存器区、位寻址区、用户RAM区。
1.工作寄存器区(00H-1FH)
在00H-1FH共32个单元,被均匀地分为四组工作寄存器堆:RB0、RB1、RB2、RB3,每组寄存器堆包含8个工作寄存器,均以R0-R7来命名,这些寄存器被称为通用寄存器。工作寄存器用于临时存放8位信息。在使用时,由程序状态字寄存器中的RS0、RS1来选择工作寄存器堆。
2.位寻址区(20H-2FH)
片内数据存储器的20H-2FH存储区为位寻址区,既可作为一般单元按字节寻址,也可按位进行寻址。位寻址区有16个字节,位地址为00H-7FH。
3.用户RAM区(30H-7FH)
用户RAM区主要用作数据缓冲区和堆栈。这个存储区只能按字节寻址,用作存放数据及作为堆栈区。通常堆栈区被设置在这块存储区,由堆栈寄存器SP指定,CPU复位时SP=07H,使得堆栈实际上是从08H开始的,但08H-1FH属于工作寄存器区。
附表