找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11754|回复: 3
收起左侧

51单片机内部RAM的问题、STC单片机内部扩展RAM的应用

[复制链接]
ID:71259 发表于 2014-12-29 23:14 | 显示全部楼层 |阅读模式


STC89C52RC单片机的RAM有512字节,然而这512字节怎么用呢?很多人可能都不知道,这可是极大的资源浪费啊。RAM本来就宝贵,给
了这么多资源怎能不用呢?
  我们都知道8051单片机有128字节RAM,后来8052单片机扩充到256字节RAM,然而在使用上是有区别的。
  在keil c默认情况下编译,
char a=0×00; a 会被存储在低128字节的RAM里,这部分RAM称为data
上述语句等效为:char data a=0×00;
那么如何使用高128字节的RAM呢,只要用 idata 关键词就可以了:
char idata b=0×01; b 会被存放在全部256字节RAM的位置。
有人定义一个char a[120]数组时,编译会出错,明明单片机有256字节RAM,为什么定义一个120元素的数组还不够用呢?因为char c[120]等
同于char data c[120] ;数据都挤在低128字节的RAM里当然不够用。
char idata c[120] ;就不会有问题,数组会被分配在全部256字节的RAM中 SCT为了增强单片机的性能,STC89C**RC单片机扩展了256字节的RAM,总共达到512字节。STC89C58RD+单片机扩展了1024字节的RAM,总共达到1280字节. 这些额外扩展的RAM怎么用呢?很简单,只要用 xdata 关键词就可以了。
STC89C**RC 单片机最大可以定义:char xdata d[256];
STC89C**RD+ 单片机最大可以定义:char xdata d[1024] ;
除了 data idata xdata 之外,还有一个 bdata ,这个bdata 是什么呢?单片机低128字节的RAM里,还有一块特殊的区域,地址是0×20–0x2F;
这16个字节是可以位寻址的,如果你需要定义的变量可以按位寻址,使用bdata 关键词:
char bdata e=0xf7 ;变量e被分配在0×20–0x2F位寻址区域内。

回复

使用道具 举报

ID:71359 发表于 2014-12-30 12:30 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:135780 发表于 2016-12-25 00:34 | 显示全部楼层
如果是不需要修改的数组还可以用code定义到ROM中去
回复

使用道具 举报

ID:78835 发表于 2020-1-17 15:48 | 显示全部楼层
使用结构体的话,能用xdata吗?我试了,不会报错,但是运行不正常
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表