2019年 12月 27日 星期五
您的位置: 威廉希尔主页 > 单片机技术 >

如何对51单片机RAM不同的区域进行划分

来源:未知     作者:威廉希尔     发布时间:2019-12-25 07:01         

  ,是用来保存数据的,比如我们定义的变量都是直接存在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 就是这样。以下是几个KeilC51 语言中的关键字,代表了RAM不同区域的划分,大家先记一下。

  大家可以看出来,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 来访问了。

  目前国内的最好的视频教程,通俗易懂,容易上手,非常适合初学者,被大量的培训机构采用。只要你认真看,认真听,让你学

  会刷新,但显示乱码,芯片stc89c52,LCD1602,DS1302,请问这是什么情况? 代码如下: #include DS1302.h ...

  当你写了一个处理数据的软件,它可能在小样本文件上运行地很好,但一旦加载大量真实数据后,这个软件就会崩....

  用C8051F340 12Mhz内部晶振,想让LED间隔闪烁2S,但实际用示波器测出来大概间隔为330ms,去掉初始化端口程序间...

  在单片机学习、考试,甚至在面试过程中,有各种问题等待着我们,当然,常见的问题其实也不少,今天就梳理了5个比较常见...

  51单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;....

  超声波测距的模块,51单片机接上12864液晶,HC-SR04超声波模块,就可以了,具体程序没怎么看....

  12月10日消息,有传言称索尼Xperia 3即将在2020年推出,现在该机疑似已经现身Geekbe....

  一般人挑手机更关注机身内存,尤其是爱拍照的女孩子,而关于手机的运行内存却知之甚少。那么到底手机运行内....

  先看看芯片内部RAM情况。目前使用的芯片是STM32F746NG,查看其数据手册可知其内部系统RAM....

  51控制两个或者多个DS18B20时,用一个IO口怎么控制,之前有查过要匹配ROM,可是搞了好久都没成...

  基于51单片机的简易计算器。 电图 源程序 #include//52单片机头文件#include//要用到数学计算公式,所以调用#i...

  iPhone 在长时间使用中,打开过多应用就会占用较多内存,很多用户都反馈自己的 iPhone 曾出....

  时钟程序显示时间,有三个按钮K0.K1.K2,可以调时间,按一下K0开始调分,按两下K0开始调时位,按三下退出调时间。...

  想做一个简单的数据传输模块,实现串口与网口通道间的数据连接,硬件我这边之前买了个学习板有51以及32的单片机同...

  21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80....

  本文所说的模拟串口, 就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电平,....

  关于手机内存该选6GB还是8GB,在网上一直有很大的争论。但是笔者看完之后总感觉并没有说到点子上,最....

  实现的功能有:走 时、校时、闹钟、温度、遥控这几个功能。要想实现这几个功能,其中走时所需要的就是时 ....

      威廉希尔