原创 单片机RAM这样用

2009-2-11 18:34 9976 10 19 分类: MCU/ 嵌入式

单片机RAM这样<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


   任何一本单片机的数据都不会不提存储器的问题,但是没有基本能说的让人一下就领悟过来。菜鸟时候的特权也是一知半解的过来的,我想如果读51的存储器(主要是RAM)做一下归纳,列一张表,我想一定会让初学者少走很多弯路,希望这张表还有下面的一些个人的经验只谈能给你一些启迪。也许有些地方说的不是很专业,或者说是表达不太合适,很欢迎各路高手拍砖指正。EDN这个大家庭就是让我们互相学习共同进步的乐土!


 


51单片机存储区分配如下:



存储区


地址范围


功能说明


 


 


 


 


内部RAM


256Byte


00H-1FH


内部使用DATA区,四个工作寄存器组(4*8=32Byte),用于内部参数传递


20H-2FH1


 


BDATA区,DATA 区的16 个字节的可位寻址区


30H-7FH2


用户可用非位寻址DATA区,可在一个周期内直接寻址


80H-FFH


IDATA区,用户可用的内部RAM 区的高128 个字节,必须采用间接寻址


80H-FFH3


可以进行位寻址的特殊功能寄存器(SFR


 


外部扩展RAM


(最大64KByte


00H-FFH


PDATA区,外部存储区的256 个字节通过P0 口的地址对其寻址需要两个指令周期


00H-FFFFH4


XDATA区(外部存储区),使用DPTR 寻址


ROM


(最大64KByte)


00H-FFFFH


CODE区(程序存储区),使用DPTR 寻址


 


   对上表的一些说明:


1编程定义为: uchar bdata test;


   所谓的可位寻址,如果你这么用:if(test^0)else…;我的经验告诉我编译出来的程序会出错的。


我们一般可以这么用:


先做一个位定义:sbit test0 = test^0;


然后再程序中使用:if(test0)else…;表示判断test的第0bit位的值,然后执行相应程序。其它位的用法类似。


2编程定义为: uchar data test;


   因为data区时直接存取存储,也就是说它在编程的时候最快的RAM区,所以我们往往把使用最频繁或者说对实时性要求高的数据都定义在data区(keil C中是可以设置优先存放RAM区的)。


   Data区包括了4个工作寄存器组(32Byte)、位寻址区(16Byte)、用户data区(80Byte)。其实位寻址区也应该归类到用户可用data区中,所以一般用户可以使用的直接寻址的RAM96Byte。而实际上,一种比较极端的情况,因为单片机工作时只使用4组工作寄存器组中的一组,我们可编程的data区可以有120Byte(我在keilC下编译测试的结果是,只有在不使用bdata的情况下才可以定义120Bytedata区数据)。


3编程定义为: uchar idata test;


如果你没有完全弄懂一个MPUSFR,那么只能说你没有弄懂这个MPU了。所以这里不细说单片机的SFR,只提一点,它的地址是和IDATA区重叠的,单片机内部时通过区分所访问的存储区来解决地址重叠问题的,因为IDATA 区只能通过间接寻址来访问。在我们的实时性要求不那么高,或者DATA区不够用的情况下我们就应该启用IDATA区。


4编程定义为:uchar   xdata    LD    _at_   0x7f;


也可以这么使用:(需包含头文件absacc.h)


A = XBYTE[0x8100]; //从地址8100H读一个字节


B = *((char xdata *) 0x0000); // 从地址0000H读一个字节


XBYTE[0x7500] = 0xf0; // 写一个字节到7500H


   P2P0口为16bit的地址总线接口,P0口为数据总线口,数据和地址时分时传输的。


51单片机的最后一个存储空间为64K, 和CODE 区一样采用16 位寻址,属于外部数据存储区,即XDATA区。这个区通常包括一些RAM器件(如SRAM)或是一些需要通过总线接口的外围器件(特权在以前的BLOG里多次谈过这个扩展RAM的问题,这里也不多涉及了)。对XDATA的读写操作需要至少两个处理周期来装入地址,而读写又需要两个处理周期。


 

PARTNER CONTENT

文章评论9条评论)

登录后参与讨论

用户219536 2011-9-18 21:30

niu

用户1621629 2011-8-17 21:06

挺好的,这个东西很多书上都没有涉及,上次好不容易搜到一篇关于这些的文章。

用户363685 2011-6-24 19:23

特权哥哥 QVGA啊。。。。。喜欢

用户1708715 2011-5-31 23:00

支持国产

用户339159 2011-5-13 10:07

还不错哦

用户360691 2011-3-29 21:06

很有帮助

用户210225 2011-3-16 21:19

特权同学,你这个事两层板还是四层板?

用户314715 2011-3-15 22:37

好东西

用户314715 2011-3-15 22:31

不错有学了许多东西歇息

用户310488 2011-3-8 15:52

公司名字叫京微雅格 公司网址:http://www.agatelogic.com/
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
EE直播间
更多
我要评论
9
10
关闭 站长推荐上一条 /3 下一条