关于STC单片机RAM的问题
如果问你STCC52RC单片机的RAM有多大?很多人可能直接回答256字节,错了! STCC52RC单片机的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中STC为了增强单片机的性能,STCC**RC单片机扩展了256字节的RAM,总共达到512字节。STCC**RD+单片机扩展了1024字节的RAM,总共达到1280字节.
这些额外扩展的RAM怎么用呢?很简单,只要用xdata关键词就可以了。 STCC**RC单片机最大可以定义:
1 / 2
char xdata d[256];
STCC**RD+单片机最大可以定义: char xdata d[1024] ;
我又一次写程序,将DS18B20的温度绘制成曲线,用128动态显示出来,真的就用了差不多1K的RAM的,当然也因为我是新手,用的算法太低级,所以可能浪费了一些RAM内存.
除了data idata xdata之外,还有一个bdata,这个bdata是什么呢?单片机低128字节的RAM里,还有一块特殊的区域,地址是0×20–0x2F;这16个字节是可以位寻址的,如果你需要定义的变量可以按位寻址,使用bdata关键词:
char bdata e=0xf7 ;变量e被分配在0×20–0x2F位寻址区域内。
2 / 2