历史上的今天
今天是:2025年03月18日(星期二)
2019年03月18日 | STC89C52单片机RAM模式
2019-03-18 来源:eefocus
STC89C52 单片机内变量、函数参数等数据在RAM中的储存模式: small、compact、large

前边介绍单片机资源的时候,我们提到过 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 的访问在汇编语言中用的是直接寻址,执行速度是最快的。如果你定义成 idata,不仅仅可以访问 data 区域,还可以访问 0x80H~0xFF 的范围,但加了 idata 关键字后,访问的时候 51 单片机用的是通用寄存器间接寻址,速度较 data会慢一些,而且我们平时大多数情况下不太希望访问到 0x80H~0xFF,因为这块通常用于中断与函数调用的堆栈,所以在绝大多数情况下,我们使用内部 RAM 的时候,只用 data 就可以了。
对于外部 RAM 来说,使用 pdata 定义的变量存到了外部 RAM 的 0x00~0xFF 的地址范围内,这块地址的访问和 idata 类似,都是用通用寄存器间接寻址,而如果你定义成 xdata,可以访问的范围更广泛,从 0 到 64K 的地址都可以访问到,但是它需要使用 2 个字节寄存器DPTRH 和 DPTRL 来进行间接寻址,速度是最慢的。
我们的 STC89C52 共有 512 字节的 RAM,分为 256 字节的片内 RAM 和 256 字节的片外RAM。一般情况下,我们是使用 data 区域,data 不够用了,我们就用 xdata,如果希望程序执行效率尽量高一点,就使用 pdata 关键字来定义。其它型号有更大的 RAM 的 51 系列单片机,如果要使用更大的 RAM,就必须得用 xdata 来访问了。
上一篇:51单片机按键检测和信号函数仿真
下一篇:51单片机bit数据类型
史海拾趣
|
对于NVR将全面普及甚至取代DVR,各厂家并没有太多异议,而备受关注的是这个过程会有多久,现在来谈NVR的普及还为时尚早,那么,具体来说从现在的推广、试用到最终的普及、取代,NVR需要多久? … 查看全部问答> |
|
有个问题~我的AT89c52怎么下载程序啊?本人学生,没那么多钱买编程器啊,毕竟因为上次第一次买芯片,没问清楚就买了 ~~~o(︶︿︶)o 唉 网上搜了一大通,但是没找到具体的符合我目前要求的,想要串口下载,9针的~~可惜没找到啊… 查看全部问答> |
|
设计了以MS P 4 3 0 单片机为主控制器的脉搏波检测系统。光电传感器产生的信号通过放大、 滤波后送入单片机的 A / D通道, 单片机控制蓝牙模块将处理后得到信号送到手机中, 手机对脉搏信号实时显示、 分析、 存储。系统通过蓝牙技术把脉搏检测仪 ...… 查看全部问答> |
|
我用了Altera的EP1C6Q240C8的一块学习板,自己用VHDL编了个小程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt is port (clk,rst:in std_logic; coun ...… 查看全部问答> |
|
求教,28027,28035 一个ePWM周期,触发单个端口,多次转换! 大家好,我碰到一个问题是ePWM触发ADC转换的,TI的例子有一个EPWM周期确发两个不同端口ADC转换,而我现在需要触发10个以上单端口转换,而且转换是周期性的取样,需要在下个ePWM触发时,转换完成 请问一下寄存器要如何设置,能提供个思路吗? 谢谢… 查看全部问答> |
|
单片机及应用系统设计原理与实践 本书立足于51单片机的经典结构,以广泛应用的AT89S52单片机为应用对象,深入浅出地讲述单片机及应用系统设计原理与实践。书中51单片机基础内容采用汇编与C51并行的撰写方式,便于对比学习,应用则以C51为蓝本, ...… 查看全部问答> |




