2020年 01月 22日 星期三
您的位置: 威廉希尔主页 > 单片机技术 >

单片机RAM的用法

来源:未知     作者:威廉希尔     发布时间:2020-01-22 08:09         

  的数据都不会不提存储器的问题,但是没有基本能说的让人一下就过来。菜鸟时候的也是一知半解的过来的,我想如果读51的存储器(主要是

  )做一下归纳,列一张表,我想一定会让初学者少走很多弯,希望这张表还有下面的一些个人的经验只谈能给你一些启迪。也许有些地方说的不是很专业,或者说是表达不太合适,很欢迎各高手拍砖。EDN这个大家庭就是让我们互相学习共同进步的乐土!

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

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

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

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

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

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

      威廉希尔