电工之家_电工基础知识学习网站
当前位置:电工之家 > 电工知识 > 单片机 > 正文

51单片机ram区域划分

时间:2017-08-30 20:17 来源:电工之家

51单片机ram区域划分
51单片机的RAM分为片内和片外,标准的51内核是0x00~0x7F一共128B,而现在的大多数半导体厂商开发的51系列单片机都带了扩展片内RAM,即片内RAM区域一般是从0x00到0xFF一共256B。随着功能需求越来越多,程序量越来越大,那片内这256B也不够用了,因此又扩展了片外RAM,片外RAM的预留比较大,最大可以从0x0000到0xFFFF一共64KB,当然了,每个具体型号有多大不一定,具体看通过芯片的手册来了解。

而现在的51单片机的片外RAM, “片外”只是一个名词而已,实际上很多也是直接做到了单片机内部,但是访问地址,还是以外部的起始地址的方式。就是说,片内RAM的地址从0x00到0xFF,而片外是从0x0000到0xFFFF;其中最开始的256B是重复的地址,这部分通常情况下只要RAM够用就可以不理会,软件编译器会自动给我们处理好。当选默认small模式,优先使用内部的前128B,而选Large模式,优先使用的是片外的64K。因此上面那个同学的问题就在这里了,因为他用的是AT89S51单片机,而这个单片机是没有片外RAM的,如果选择了Large模式,那优先使用的是片外,因此编译完成,下载到单片机里,程序运行时用了这个单片机所没有的区域,那肯定就不行了。

通常KEIL C51语言中的以下几个关键字,代表了RAM不同区域的划分:

data:片内RAM从0x00~0x7F

idata:片内RAM从0x00~0xFF

pdata:片外RAM从0x00~0xFF

xdata:片外RAM从0x0000~0xFFFF

其中,data是idata的一部分,pdata是xdata的一部分。这个问题我们可以不关心,只和汇编编程有关。

那如果选择了small模式,我们定义一个变量a:unsigned char a = 0;他是默认保存在data区域,这个时候data是可以省略,但是我们想定义到xdata区域,就必须前边加xdata关键字:unsigned char xdata a = 0;

如果选择large模式,unsigned char a = 0;是定义在片外xdata区域,如果要定义在片内就必须加data关键字。

但是在RAM够用的情况下,我们优先使用data的,其次使用idata关键字,再次使用pdata关键字,最后使用xdata。这个和底层访问指令有关系,用前边的读写速度要快一些,比如pdata访问是单字节地址,而xdata是双字节地址,访问速度就慢了。

看过《51单片机ram区域划分》的人还看了以下文章
c语言模电数电没学可以直接学stm32单片机吗 c语言模电数电没学可以直接学stm32单片机吗
个人觉得还是要掌握一点基础知识才能开始学。从硬件和软件两个方面来说,首先硬件方面,学单片机要懂基本的电子方面的知识,数电和模电是最基础的,一般搞嵌入式的都要能看得懂原理图,需要知道自己的输入、输入分别是什么,这就牵涉到一些比如GPIO、UART、I...
怎么做基于STM32的指纹密码锁 怎么做基于STM32的指纹密码锁
STM32单片机直接买现成的最小开发板,也就30多块钱,比如这个,省得你自己做板子了。 程序还是得你自己写,会用串口就行,然后再买个继电器模块,网上多的是,比如这种的供个电,直接用单片机IO就能驱动了,用这个去控制电子锁的开或者关。 电子锁都替你想好...
单片机一般用什么系统 单片机一般用什么系统
首先是老牌开源的操作系统比较稳定成熟,我们不应该再去写操作系统。 其次现在单片机的频率越来越高,速度越来越快,操作系统的几大模块,内存管理,任务调度,锁,可以提高cpu的利用率。简单应用不说,应对同时含有多路不同接口的通讯,控制等复杂功能,光...
单片机开漏输出的应用和优点 单片机开漏输出的应用和优点
单片机的开漏输出特点大家都清楚我就不再啰嗦了,主要说应用和优点。 1、增强驱动能力,驱动大电流设备:其实这个功能很少能用到,io一般还是驱动小电流为主,真是大电流就会增加驱动芯片或增加MOS管了,也不会用单片机驱动,因为单片机电源管脚比较细,载流...
STM32单片机好学吗 STM32单片机好学吗
目前市面上热门的32位单片机,非STM32莫属了,网上各种论坛以及开源的资料非常多,如此一来,能为我们的学习提供更多的帮助,超子提供一个学习路径供您参考。 1.C语言基本语法 STM32需要使用C语言开发,所以首先要掌握C语言的基本语法,前期可以不必投入太多...