您的位置 首页 资料

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

由于单片机的内存比较小,在以前的型号如AT89c51内存只有128byte,按照目前的电子市场飞速的发展,这么点点的内存只够做一个简单的电子系统…

因为单片机内存比较小,在曾经的类型如AT89c51内存只需128byte,依照现在的电子市场飞速的开展,这么点点的内存只够做一个简略的电子体系,若是大一点的就远远不够用了,这样要么就要外扩一个静态RAM,要么就要挑选一个内存比较大一点的单片机,比方:AT89S52 [256byte]\ SST89E564 [1K]等等。这样在运用KEIL软件的时分是怎么适用超越128byte字节的RAM呢?很多人都有这样的疑问【最初我搞的也不是很理解】。

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

① 超越变量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的人用……看过的人期望您能留下名贵的定见或留言,谢谢!!!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/275533.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部