这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何对51单片机RAM不同的区域进行划分

共6条 1/1 1 跳转至

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

工程师
2019-12-19 22:11:47     打赏

前边介绍单片机资源的时候,我们提到过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不同区域的划分,大家先记一下。

如何对51单片机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 来访问了。




工程师
2019-12-22 22:34:59     打赏
2楼

STC89C52 有些古老了,现在新的51,内存RAM更大了!


工程师
2019-12-22 22:41:48     打赏
3楼

STC89C52 是宏晶还是国芯出品的吧?! 以前还有ATMEL的89C52,不过目前好像用的人很少了。。。


工程师
2019-12-22 22:51:21     打赏
4楼

该MCU虽然 只有少少的512 字节的 RAM,但能运用的得合理(好),也是一门“手艺或技术”!


高工
2019-12-26 22:44:28     打赏
5楼

好经典的芯片


助工
2019-12-29 22:12:52     打赏
6楼

对对对 差不多就是这样子划分他的区域的 其实也不太难


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]