如何正确的划分51单片机中的RAM
51单片机的RAM区域划分以及常遇到的问题
51单片机的RAM区域划分以及常遇到的问题前几天群里有一位同学使用AT89S51这个单片机编程,遇到了一个情况:keil软件的options for Target的Target选项中,其中的Memory Model选项,同样的程序,如果选择Small模式进行编译,把程序下载到单片机内,程序就工作正常;如果选择Large模式进行编译,下载到单片机内程序就工作不正常,这个就是新手偶尔遇到,但是很难分析出原因的内存使用溢出问题。
51单片机的问题,是历史问题,比较复杂,那现在一般一些新型单片机这种问题就简单一些,但是也得注意关于RAM的溢出问题。
RAM是用来保存临时数据的,一旦我们的使用量超过了RAM的大小或者区域,那就可能造成一些不可预知的错误问题。
51单片机的RAM分为片内和片外,标准的51内核是0x00~0x7F 一共128B,而现在的大多数半导体厂商开发的51系列单片机都带了扩展片内RAM,即片内RAM区域一般是从0x00到0xFF一共256B。
随着功能需求越来越多,程序量越来越大,那片内这256B也不够用了,因此又扩展了片外RAM,片外RAM的预留比较大,最大可以从0x0000到0xFFFF一共64KB,当然了,每个具体型号有多大不一定,具体看通过芯片的手册来了解。
而现在的51单片机的片外RAM,“片外”只是一个名词而已,实际上很多也是直接做到了单片机内部,但是访问地址,还是以外部的起始地址的方式。
就是说,片内RAM的地址从0x00到0xFF,而片外是从0x0000到0xFFFF;其中最开始的256B是重复的地址,这部分通常情况下只要RAM够用就可以不理会,软件编译器会自动给我们处理好。
当选默认small模式,优先使用内部的前128B,而选Large 模式,优先使用的是片外的64K。
因此上面那个同学的问题就在这里了,因为他用的是AT89S51单片机,而这个单片机是没有片外RAM 的,如果选择了Large模式,那优先使用的是片外,因此编译完成,下载到单片机里,程序运行时用了这个单片机所没有的区域,那肯定就不行了。
51单片机存储器组织
51单片机存储器组织在单片机的世界里,存储器就像是一个存放数据和程序的大仓库,而 51 单片机的存储器组织则有着独特的结构和特点。
要理解 51 单片机是如何工作的,就必须深入了解其存储器的组织方式。
51 单片机的存储器从物理上可以分为片内存储器和片外存储器。
片内存储器集成在单片机芯片内部,而片外存储器则需要通过外部引脚连接扩展。
先来说说片内存储器。
它又被细分为程序存储器、数据存储器以及特殊功能寄存器(SFR)。
程序存储器用于存放用户编写的程序代码。
在 51 单片机中,程序存储器的地址空间可以达到64KB。
对于没有片内ROM 的51 单片机,比如 8031,程序需要存放在外部的 EPROM 中。
而对于有片内 ROM的 51 单片机,比如 8051,其片内 ROM 地址从 0000H 开始。
如果程序的长度小于片内 ROM 的容量,那么程序会默认从片内 ROM 开始执行;如果程序长度超过了片内 ROM 的容量,就需要扩展外部程序存储器。
数据存储器用于存储运行过程中的临时数据。
它被分为片内数据存储器和片外数据存储器。
片内数据存储器又分为低 128 字节和高 128字节。
低 128 字节可以直接通过地址进行访问,地址范围是 00H 到7FH。
这 128 个字节又被分为工作寄存器区、位寻址区和用户 RAM 区。
工作寄存器区有 4 组,每组 8 个寄存器,通过 RS1 和 RS0 这两个位来选择当前使用的工作组。
位寻址区既可以按字节寻址,也可以按位寻址,这在控制一些只有两种状态的设备时非常有用。
用户 RAM 区则可以用于存放用户的临时数据。
高 128 字节的片内数据存储器,也被称为特殊功能寄存器(SFR)区,地址范围是 80H 到 FFH。
这些特殊功能寄存器用于控制和管理 51 单片机的各种功能,比如定时器/计数器、串口、中断系统等。
再说说片外数据存储器。
当片内数据存储器不够用时,就需要扩展片外数据存储器。
片外数据存储器的地址空间也可以达到 64KB,通过MOVX 指令进行读写操作。
MCS-51单片机存储空间的介绍以及划分
MCS-51单片机存储空间的介绍以及划分
1.前言
MCS-51的存储器有片内RAM、片外RAM 和ROM 三个空间。
MCS-51单片机在物理结构上有四个存储空间
1、片内程序存储器(片内ROM)
2、片外程序存储器(片外ROM)
3、片内数据存储器(片内RAM)
4、片外数据存储器(片外RAM)
在逻辑上(即从用户的角度上)MCS-51单片机有三个存储空间
1、片内外统一编址的64K的程序存储器(ROM)地址空间(MOVC)
2、256B的片内数据存储器(片内RAM)的地址空间(MOV)
3、以及64K片外数据存储器(片外RAM)的地址空间(MOVX)
注:在访问三个不同的逻辑空间时,应采用不同形式的指令以产生不同的存储器空间的选通信号。
2.存储空间划分
2.1 片内RAM
图:片内AM地址空间划分
地址范围是00H到7FH (52系列延伸到FFH),为8位地址,所以最大可寻址的范围为256个单元地址
•00H到1FH
共32字节,分成四个工作寄存器区,每区有寄存器R0~R7。
对此区域,可以使用R0~R7 来操作,代码短捷,但是,只有一个当前工作区是可以这样读写的。
对此区域,也可以使用字节地址,来读写。
•20H-2FH
共16字节,是位寻址区,共有128个“位”,位地址:00~7FH。
此区域,也可按照字节。
C51存储器类型MCS-51单片机物理存储器区域
C51存储器类型MCS-51单⽚机物理存储器区域1、 data区空间⼩,所以只有频繁⽤到或对运算速度要求很⾼的变量才放到data区内,⽐如for循环中的计数值。
2、 data区内最好放局部变量。
因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提⾼内存利⽤率。
当然静态局部变量除外,其内存使⽤⽅式与全局变量相同;3、确保你的程序中没有未调⽤的函数。
在Keil C⾥遇到未调⽤函数,编译器就将其认为可能是中断函数。
函数⾥⽤的局部变量的空间是不释放,也就是同全局变量⼀样处理。
这⼀点Keil C做得很愚蠢,但也没办法。
4、程序中遇到的逻辑标志变量可以定义到bdata中,可以⼤⼤降低内存占⽤空间。
在51系列芯⽚中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。
定义⽅法是: bdata bit LedState;但位类型不能⽤在数组和结构体中。
5、其他不频繁⽤到和对运算速度要求不⾼的变量都放到xdata区。
6、如果想节省data空间就必须⽤large模式,将未定义内存位置的变量全放到xdata区。
当然最好对所有变量都要指定内存类型。
7、当使⽤到指针时,要指定指针指向的内存类型。
在C51中未定义指向内存类型的通⽤指针占⽤3个字节;⽽指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。
如指针p是指向data区,则应定义为: char data *p;。
还可指定指针本⾝的存放内存类型,如:char data * xdata p;。
其含义是指针p指向data区变量,⽽其本⾝存放在xdata区。
bit是在内部数据存储空间中 20H .. 2FH 区域中⼀个位的地址,或者 8051 位可寻址 SFR 的⼀个位地址。
code是在 0000H .. 0FFFFH 之间的⼀个代码地址。
data是在 0 到 127 之间的⼀个数据存储器地址,或者在 128 .. 255 范围内的⼀个特殊功能寄存器(SFR)地址。
51单片机存储器、堆栈、SFR
与中断相关的(2个) IP (Interrupt Priority Register) IE (Interrupt Enable Register)
29
特殊功能寄存器(PC)
程序计数器PC(Program Counter)
电源控制及波特率选择寄存器
串行口控制寄存器
串行数据缓冲寄存器
定时控制寄存器
27
定时器方式选择寄存器
定时器0低8位
定时器0高8位
定时器1低8位
定时器1高8位
与端口相关的(7个)
P0、P1、P2、P3:
四个并行输入/输出口的寄存器。它里面的内容对应着管
脚的输出。
SCON (Serial Control Register)
2.1.2 哈佛结构
◆ 8051单片机与一般微机的存储器配置方 式很不相同。
◆ 51单片机的存储器在物理结构上分为程 5 序存储空间和数据存储空间,共有四个: 片内和片外程序存储空间以及片内和片外 数据存储空间,这种在物理结构上把程序 存储器和数据存储器分开的结构形式称为
哈佛结构。
6
89C51单片机存储器配置
存储器配置(片内RAM)
片内RAM 128字节(00H—7FH)
89C51 128字节
FFH
52子系列才有 的RAM区
80H 7FH
普通RAM区
30H
2FH 20H
位寻址区
1FH 00H
工作寄存器区
FFH SFR分布在 80H-FFH
其中92个位
可位寻址
80H
10
所有的RAM区(包括位 寻址区、工作寄存器 区)都可以用于存放 数据,故也称为数据 缓存寄存器
51单片机存储器结构介绍
MCS-51单片机存储器结构从用户的角度上,8051单片机有三个存储空间:1、片内外统一编址的64K的程序存储器地址空间(MOVC)2、256B的片内数据存储器的地址空间(MOV)3、以及64K片外数据存储器的地址空间(MOVX)在访问三个不同的逻辑空间时,应采用不同形式的指令,以产生不同的存储器空间的选通信号。
【程序内存ROM】寻址范围:0000H ~ FFFFH 容量64KBEA = 1,寻址内部ROM;EA = 0,寻址外部ROM地址长度:16位作用:存放程序及程序运行时所需的常数。
七个具有特殊含义的单元是:0000H ——系统复位,PC指向此处;0003H ——外部中断0入口000BH —— T0溢出中断入口0013H ——外中断1入口001BH —— T1溢出中断入口0023H ——串口中断入口002BH —— T2溢出中断入口【内部数据存储器RAM】物理上分为两大区:00H ~ 7FH(低128单元用户RAM 和高128单元SFR区)作用:作数据缓冲器用。
一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。
那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。
程序相当于给微处理器处理问题的一系列命令。
其实程序和数据一样,都是由机器码组成的代码串。
只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。
(对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的EA端必须接地。
强制CPU从外部程序存储器读取程序。
)对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC 值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
51单片机存储器结构介绍
51单片机存储器结构介绍单片机是一种微型电脑芯片,他能够实现数字信号的处理和控制。
而存储器是单片机的核心组成部分之一,用于存储程序指令和数据。
本文将介绍51单片机的存储器结构。
一、内部存储器1. 代码存储器(ROM)代码存储器是用来存放程序指令的地方,它通常具有只读的特点,因此称之为只读存储器(Read-Only Memory)。
在51单片机中,常见的ROM有EPROM、EEPROM和Flash。
其中,EPROM需要使用紫外线擦除后才能进行写入操作,而EEPROM和Flash则支持电子擦除和写入操作。
2. 数据存储器(RAM)数据存储器用于存储程序中的数据,可以进行读取和写入操作。
51单片机中的RAM分为内部RAM和外部RAM两种类型。
内部RAM 是静态随机存储器(SRAM),容量通常较小,但读取速度快。
而外部RAM则可以通过外部接口来扩展存储容量。
二、外部存储器除了内部存储器之外,51单片机还支持外部存储器的连接,以扩展存储容量。
1. 并行存储器并行存储器是指通过并行接口与单片机进行数据交换的存储器,常见的有静态随机存储器(SRAM)、动态随机存储器(DRAM)和闪存等。
并行存储器的访问速度较快,但通信线路和引脚较多,连接复杂。
2. 串行存储器串行存储器是通过串行接口与单片机进行数据交换的存储器,常见的有串行EEPROM和串行闪存等。
串行存储器相对于并行存储器来说,引脚和通信线路较少,连接较为简单,但访问速度相对较慢。
三、存储器扩展技术1. 存储器芯片选择在实际应用中,我们需要根据需求选择合适的存储器芯片。
不同的存储器芯片具有不同的特性,比如容量大小、访问速度、耗能情况等,需要根据具体需求进行选择。
2. 存储器接口设计单片机与存储器之间的通信需要通过特定的接口进行连接。
在设计存储器接口时,需要考虑接口的引脚数目、速度要求、稳定性等因素,并且保证接口与存储器芯片的电气特性匹配。
3. 存储器管理技术存储器管理是针对大容量存储器的一种管理方法,用于提高存储效率和数据存取速度。
MCS-51单片机内部RAM可分为几个区?以及作用?
MCS-51 单片机内部RAM 可分为几个区?以及作
用?
00H-1FH 为工作寄存器区,里面就是通用寄存器组R0-R7,每八个分一
组,如第一组为R0-R7,地址位00-07H;假设第一组叫1(R0-R7),那幺08-
0FH 为第二组,就叫2(R0-R7),依次类推共有4 组。
这个区域是最常用的数
据区,数据的操作大部分在这里进行。
通用寄存器分组的好处是:当程序切换(特别是被中断或抢占的时候)只需要切换一组寄存器就可以获得一组新的寄存器,而不必担心和别的程序冲突,也可以尽量少的进行入栈和出栈操作,提高运行效率。
作用?当然是放数据,只不过这个地方最好用。
20H-2FH 为可位寻址区,这里和通用寄存器组一样可以进行位寻址,也就
是说可以比较方便的进行位操作,个人认为它和通用寄存器组的区别是,没有逐个的命名和分组。
使用频率较高的数据,或需要位操作的数据会放在这里。
30H-7FH 是字节寻址区,很普通的数据缓存区,用来建立堆栈,还有放一
些不太常用的数据。
以下需要注意,有两个80-FFH 的数据区。
其一:80-FFH,特殊功能寄存器组区,支持直接寻址,各种各样的特殊功
能寄存器都在这里。
51单片机片内存储器详解
51单片机内部存储器分布关系
单片机运行期间,128X8 bit 的片内数据存储区并不是完全开放的,只有20H~7FH共96字节(开放区+位寻址区)开放给用户使用。
○1注:一个比特就是一个二进制数的最小单元。
即一个比特只能拥有一个值,不是0就是1,所以如果我给你一个值0,你可以说它就是一个比特,如果我给你两个(00),你就可以说它们是两个比特。
1Byte=8bit
当单片机上电复位时,工作寄存器R0~R7映射片内数据存储器的00H~07H,即工作寄存器组的第0组。
工作寄存器R0~R7除了映射片内数据存储器的地址00H~07H 外,还可以映射其余的地址08H~1FH。
当R0~R7映射到其他地址时,工作寄存器用不同组别来称呼。
AT89551单片机默认工作组寄存器是第
0组,通过改变程序状态字PSW的第3位(RS0)和第4位(RS1),其关系如下表:。
单片机的RAM
四川工程职业技术学院单片机应用技术课程电子教案Copyright © 第讲48051及P89V51RD2单片机数据存储器本讲主要内容4-1. 51单片机内部RAM结构4-2. 51单片机的数据存储器管理4-3. 增强型51单片机P89V51RD2的内部RAM 4-4. 51单片机的RAM扩展4-1. 51系列单片机的RAM 结构51系列单片机RAM 结构图片外扩展RAM低128字节RAM内部扩展RAM高128字节RAM特殊功能寄存器区00H7FH80H FFH片内片外在上图中,单片机内部低128字节RAM 和特殊功能寄存器区是每种51单片机都具备的,高128字节RAM 和内部扩展RAM 只是部分增强型单片机才具有。
大多数单片机应用系统都需要片外扩展RAM ,但不绝对。
51系列单片机的数据存储器管理✧51系列单片机对数据存储器RAM的管理是通过16bit的特殊功能寄存器DPTR(Data Pointer)来实现,每个RAM单元(byte)也对应一个特定的地址编码(Address),因此,51系列单片机的地址的编码范围(通常称为寻址范围):0000 0000 0000 0000B ~1111 1111 1111 1111B(二进制)0 0 0 0 H ~ F F F F H(十六进制)0 ~65535 (十进制)因此51系列单片机的RAM寻址范围也是64K✧51系列单片机ROM和RAM 的地址编码范围都是0000H~FFFFH,但由于在寻址时硬件电路上有区别,所以不会混淆。
✧51系列单片机中,单片机外接的接口芯片如A/D、D/A等都有互不相同的地址,这些地址都是占用单片机外部RAM 的地址编号。
51系列单片机的数据存储器管理✧目前的51系列单片机视型号不同内部有128-1024byte不等的RAM空间。
用户最好选择合适的单片机型号,避免外扩RAM存储器。
标准51系列单片机的内部RAM✧所有51单片机内部都含有低128B 字节RAM 和特殊功能寄存器区。
MCS-51单片机存储器结构
MCS-51单片机存储器结构MCS-51的存储器可分为四类:【1】外部程序存储器ROM 【2】外部数据存储器RAM【3】内部程序存储器ROM一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。
那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。
程序相当于给微处理器处理问题的一系列命令。
其实程序和数据一样,都是由机器码组成的代码串。
只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。
【对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。
强制CPU从外部程序存储器读取程序。
】【对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
】8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。
但在程序存储中有些特殊的单元,这在使用中应加以注意:其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:0003H—000AH 外部中断0中断地址区。
000BH—0012H 定时/计数器0中断地址区。
0013H—001AH 外部中断1中断地址区。
001BH—0022H 定时/计数器1中断地址区。
0023H—002AH 串行中断地址区。
51单片机的程序存储器和数据存储器
一、51单片机的程序存储器结构1.内部结构单片机内部的程序存储器用于存储单片机工作时候的程序,单片机内部专门设置一个16位的程序计数器(PC),用于知识下一时刻单片机要执行的程序在ROM 空间中的地址位置,即可以存储64Kb空间大小。
程序存储器物理上可以分为片内程序存储器和片外存储器,不同单片机型号有不同的片内程序存储器空间大小。
例如8051单片机片内有4Kb的ROM,那当控制线取0时,PC访问的前4kb空间是片内的ROM;当控制线为0时候,PC访问的是片外的ROM。
2.程序存储器的7个特殊地址51单片机复位后,PC的内容是0000H,即为系统程序的启动地址。
51单片机内部有6个中断源,6个中断源介绍及地址如下所示:中断源之间只间隔8个存储单元,这是不足以存放中断程序的,所以这是中断入口地址,后续有中断服务函数。
二、51单片机的数据存储器数据存储器(RAM)存储单片机运行期间所需要的数据和临时生成的数据。
从物理上分为片内RAM和片外RAM(片外RAM是通过16位的地址总线访问,所以片外RAM也是64kb)。
1.片内数据存储器厂家根据不同的任务要求和需求定义不同的任务块,如下所示:工作寄存器组:一共有32个字节,也被称为通用寄存器,用于临时寄存8个信息,工作寄存器组分为4个组别,每组有R0-R7一共8个数据信息。
位寻址区:一共有16个字节,128位,该区域每一位可按照位于方式使用,这128位会重新分配工作地址。
一般RAM区域:用户编程可以使用的RAM,当然,前两个单元未使用的空间,用户也可以使用。
堆栈区和堆栈指针:先进后出、后入先出的原则进行管理的一段存储区域函数的调用就是一个堆栈操作,如下图所示:为实现堆栈“先入后出,后入先出”数据处理,51单片机内部设置了一个堆栈指针SP。
特殊功能寄存器:专用于控制、管理片内算术逻辑部件等功能模块工作,用户编程时可以直接给特殊功能寄存器设定值。
51单片机内部有包括PC在内19个特殊功能寄存器,如下所示:CPU专用寄存器:累加器A(E0H),寄存器B(F0H),程序状态寄存器PSW(D0H),堆栈寄存器SP(81H),数据指针DPTR(82H、83H)2.片外数据存储器51单片机内部RAM空间不够时候,就通过总线来扩展片外ram,最多可以扩展64KB.。
内部的ROM及外部RAM的空间分配
部的ROM与外部RAM的空间分配8051单片机的存储器在物理构造上分为程序存储器空间和数据存储器空间,共有4个存储空间:片程序存储器、片外程序存储器以及片数据存储器、片外数据存储器空间。
这种程序存储和数据存储分开的构造形式被称为哈佛构造。
MCS-51使用哈弗构造,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。
所以即使地址一样,但因为分开编址,所以依然要说哪一个空间的*地址。
而ARM〔甚至是*86〕这种诺依曼构造的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU 存放器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。
图1MCS-51单片机存储器的配置特点①部集成了4K的程序存储器ROM;②部具有256B的数据存储器RAM〔用户空间+SFR空间〕;③可以外接64K的程序存储器ROM和数据存储器RAM。
从物理构造的角度讲,51单片机的存储系统可以分为四个存储空间:既片ROM,RAM和片外ROM、RAM。
从逻辑构造上看〔既编程的角度〕,可以分为三个不同的空间:〔1〕片、片外统一编址的64KB的程序存储器地址空间:0000H~FFFFH(用16位地址);,其中0000H~0FFFH为片4KB的ROM地址空间,1000H~FFFFH为外部ROM地址空间;〔2〕256B的部数据存储器地址空间〔用8位地址〕,00H~FFH,分为两大局部,其中00H~7FH〔共128B单元〕为部静态RAM的地址空间,80H~FFH为特殊功能存放器的地址空间,21个特殊功能存放器离散地分布在这个区域;〔3〕64KB的外部数据存储器地址空间(用16位地址):0000H~FFFFH,包括扩展I/O地址空间。
上述4个存储空间地址是重叠的,如图1所示。
8051的指令系统设计了不同的数据传送指令以区别这4个不同的逻辑空间:CPU片、片外ROM指令用MOVC,片外RAM 指令用MOV*,片RAM指令用MOV。
内部的ROM与外部RAM的空间分配
内部的ROM与外部RAM的空间分配8051单片机的存储器在物理结构上分为程序存储器空间和数据存储器空间,共有4个存储空间:片内程序存储器、片外程序存储器以及片内数据存储器、片外数据存储器空间。
这种程序存储和数据存储分开的结构形式被称为哈佛结构。
MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。
所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。
而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。
图1MCS-51单片机存储器的配置特点①内部集成了4K的程序存储器ROM;②内部具有256B的数据存储器RAM(用户空间+SFR空间);③可以外接64K的程序存储器ROM和数据存储器RAM。
从物理结构的角度讲,51单片机的存储系统可以分为四个存储空间:既片内ROM,RAM和片外ROM、RAM。
从逻辑结构上看(既编程的角度),可以分为三个不同的空间:(1)片内、片外统一编址的64KB的程序存储器地址空间:0000H~FFFFH(用16位地址);,其中0000H~0FFFH为片内4KB的ROM地址空间,1000H~FFFFH为外部ROM地址空间;(2) 256B的内部数据存储器地址空间(用8位地址),00H~FFH,分为两大部分,其中00H~7FH(共128B单元)为内部静态RAM的地址空间,80H~FFH为特殊功能寄存器的地址空间,21个特殊功能寄存器离散地分布在这个区域;(3) 64KB的外部数据存储器地址空间(用16位地址):0000H~FFFFH,包括扩展I/O地址空间。
上述4个存储空间地址是重叠的,如图1所示。
8051的指令系统设计了不同的数据传送指令以区别这4个不同的逻辑空间:CPU访问片内、片外ROM指令用MOVC,访问片外RAM指令用MOVX,访问片内RAM指令用MOV。
51单片机存储器的结构
MCS-51单片机在物理结构上有四个存储空间:1、片内程序存储器2、片外程序存储器3、片内数据存储器4、片外数据存储器但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:1、片内外统一编址的64K的程序存储器地址空间〔MOVC〕2、256B的片内数据存储器的地址空间〔MOV〕3、以及64K片外数据存储器的地址空间〔MOVX〕在访问三个不同的逻辑空间时,应采用不同形式的指令〔具体我们在后面的指令系统学习时将会讲解〕,以产生不同的存储器空间的选通信号。
程序内存ROM寻址范围:0000H ~ FFFFH 容量64KBEA = 1,寻址内部ROM;EA = 0,寻址外部ROM地址长度:16位作用:存放程序及程序运行时所需的常数。
七个具有特殊含义的单元是:0000H ——系统复位,PC指向此处;0003H ——外部中断0入口000BH ——T0溢出中断入口0013H ——外中断1入口001BH ——T1溢出中断入口0023H ——串口中断入口002BH ——T2溢出中断入口内部数据存储器RAM物理上分为两大区:00H ~ 7FH即128B内RAM 和SFR区。
作用:作数据缓冲器用。
下列图是8051单片机存储器的空间结构图程序存储器一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。
那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器〔ROM〕。
程序相当于给微处理器处理问题的一系列命令。
其实程序和数据一样,都是由机器码组成的代码串。
只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。
对于内部无RO M的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。
强制CPU从外部程序存储器读取程序。
对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
51单片机RAM区域的划分
我们的 STC89C52 共有 512 字节的 RAM,分为 256 字节的片内 RAM 和 256 字节的片外RAM。一般情况下,我们是使用 data 区域,data 不够用了,我们就用 xdata,如果希望程序执行效率尽量高一点,就使用 pdata 关键字来定义。其它型号有更大的 RAM 的 51 系列单片机,如果要使用更大的 RAM,就必须得用 xdata 来访问了。
51 单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准 51 的片内 RAM 地址从 0x00H~0x7F 共 128 个字节,而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。片外 RAM 最大可以扩展到 0x0000~0xFFFF 共 64K 字节。这里有一点大家要明白,片内 RAM 和片外 RAM 的地址不是连起来的,片内是从 0x00 开始,片外也是从 0x0000 开始的。还有一点,片内和片外这两个名词来自于早期的 51 单片机,分别指在芯片内部和芯片外部,但现在几乎所有的 51 单片机芯片内部都是集成了片外 RAM 的,而真正的芯片外扩展则很少用到了,虽然芯片内部的,我们的 STC89C52 就是这样。以下是几个 Keil C51 语言中的关键字,代表了 RAM 不同区域的划分,大家先记一下。
前边介绍单片机资源的时候,我们提到过 STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。
对于外部 RAM 来说,使用 pdata 定义的变量存到了外部 RAM 的 0x00~0xFF 的地址范围内,这块地址的访问和 idata 类似,都是用通用寄存器间接寻址,而如果你定义成 xdata,可以访问的范围更广泛,从 0 到 64K 的地址都可以访问到,但是它需要使用 2 个字节寄存器DPTRH 和 DPTRL 来进行间接寻址,速度是最慢的。
80c51内部RAM空间分配
80c51内部RAM空间分配keil编译的时候,在开始时候会清零所有内存.在main之前,所以,只要复位, 内存肯定是0MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:数据存储器空间(低128单元),用户可用的;特殊功能寄存器空间(高128单元);这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。
下面我们就来详细的与大家讲解一下:低128单元:片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。
也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。
1、通用寄存器区(00H-1FH)在00H1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0R7来命名,我们常称这些寄存器为通用寄存器。
这四块中的寄存器都称为R0R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的D3和D4位(RS0和RS1),即可选中这四组通用寄存器。
程序中并不需要用4组,那么其余的可用做一般的数据缓冲器,CPU在复位后,选中第0组工作寄存器。
2、位寻址区(20H-2FH)片内RAM的20H2FH单元为位寻址区,既可作单元用字节寻址,也可对它们的位进行寻址。
位寻址区共有16 个字节,128个位,位地址为00H7FH。
CPU能直接寻址这些位,执行例如置1、清0、求反、转移,传送和逻辑等操作。
我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。
3、用户RAM区(30H-。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何正确的划分51单片机中的RAM
前边介绍单片机资源的时候,我们提到过STC89C52 共有512 字节的RAM,是用来保存数据的,比如我们定义的变量都是直接存在RAM 里边的。
但是单片机的这512 字节的RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。
51 单片机的RAM 分为两个部分,一块是片内RAM,一块是片外RAM。
标准51 的片内RAM 地址从0x00H~0x7F 共128 个字节,而现在我们用的51 系列的单片机都是带扩展片内RAM 的,即RAM 是从0x00~0xFF 共256 个字节。
片外RAM 最大可以扩展到0x0000~0xFFFF 共64K 字节。
这里有一点大家要明白,片内RAM 和片外RAM 的地址不是连起来的,片内是从0x00 开始,片外也是从0x0000 开始的。
还有一点,片内和片外这两个名词来自于早期的51 单片机,分别指在芯片内部和芯片外部,但现在几乎所有的51 单片机芯片内部都是集成了片外RAM 的,而真正的芯片外扩展则很少用到了,虽然它还叫片外RAM,但实际上它现在也是在单片机芯片内部的,我们的STC89C52 就是这样。
以下是几个Keil C51 语言中的关键字,代表了RAM 不同区域的划分,大家先记一下。
data:片内RAM 从0x00~0x7F
idata:片内RAM 从0x00~0xFF
pdata:片外RAM 从0x00~0xFF
xdata:片外RAM 从0x0000~0xFFFF
大家可以看出来,data 是idata 的一部分,pdata 是xdata 的一部分。
为什么还这样去区分呢?因为RAM 分块的访问方式主要和汇编指令有关,因此这块内容大家了解一下即可,只需要记住如何访问速度更快就行了。
我们定义一个变量a,可以这样:unsigned char data a=0,而我们前边定义变量时都没有加data 这个关键字,是因为在Keil 默认设置下,data 是可以省略的,即什么都不加的时候变量就是定义到data 区域中的。
data 区域RAM 的访问在汇编语言中用的是直接寻址,。