新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 讨论有关单片机内存的问题

讨论有关单片机内存的问题

作者:时间:2016-11-10来源:网络收藏

由于单片机内存比较小,在以前的型号如AT89c51内存只有128byte,按照目前的电子市场飞速的发展,这么点点的内存只够做一个简单的电子系统,若是大一点的就远远不够用了,这样要么就要外扩一个静态RAM,要么就要选择一个内存比较大一点的单片机,比如:AT89S52 [256byte] SST89E564 [1K]等等。这样在使用KEIL软件的时候是如何适用超过128byte字节的RAM呢?很多人都有这样的疑问【当初我搞的也不是很明白】。

本文引用地址://m.amcfsurvey.com/article/201611/317163.htm

在网上也看到了很多人都有这样的想法:

① 超过变量128后必须使用compact模式编译

实际的情况是只要内存占用量不超过256.0【前提是:单片机的内存必须要大于128byte,对于at89c51来说想达到256也达不到啊,本身就不够用】 就可以用 small 模式编译。要是单片机提供的内存更大的话,那也可以在small模式编译的。
② 128以上的某些地址为特殊寄存器使用,不能给程序用

这样的想法也是不对的,单片机与 PC 机不同,51 单片机不使用线性编址,特殊寄存器与 RAM 使用重复的地址。但访问时采用不同的指令,所以并不会占用 RAM 空间。

下面我用汇编和C语言进行解释一下上面红色字的意思:【很多人都能说出这样的道理,但是很少有人举出实际的例子供大家参考和分析,下面我会在汇编和C语言做出实际的语句,来和大家一起分析一下】

首先先给P0口赋值0x55;

P0DATA080H

MOV A , #55H;

MOVP0 ,A; ;因为p0口特殊功能寄存器的地址是0x80

若是往0x80地址存储数据0xAA。则需要执行以下语句

MOV RO ,#80H

MOV @R0 , #0AAH

参照上面的语句就能知道同样都是0x80地址却有着不一样的效果.

下面在写一下C语言的语句

sfr P0 = 0x80;

unsigned char idatai_at_0x80;

voidmain(void)

{

//P0口赋值0x55;

P0 = 0x55;

//0x80地址存储数据0xAA

i = 0xAA;

}

根据上面总结出来的,看完所有的代码我想对大家应该有所帮助吧?仔细看看我上面的代码或我的说明,我想这个时候你应该对单片机的内存有个进一步的了解了。对你以后开发单片机应该会有所帮助的。如果你对此有所疑问,或者我的说法有错误,请您给我留言,我们共同交流,由于时间的关系,以前整理的资料好多都丢了,今天在此作了一个简单的整理并发上来,希望对看我的blog的人用……看过的人希望您能留下宝贵的意见或留言,谢谢!!!



关键词: 单片机内

评论


技术专区

关闭