【单片机】51单片机存储使用总结

前期教程

前言

  在写了两篇关于51单片机的博客后,我自以为对51单片机已经非常了解了,但没想到最近在看一个代码的时候还是遇到了问题。于是再补上一个关于存储的知识点。【这一部分知识点建议查看官方手册,多看几个系列的

RAM

  从上面两篇链接我们知道,51单片机内部有256B的RAM,从0x00到0xFF,其中,低128B为通用RAM,高128B与特殊功能寄存器(SFR)地址重合,注意哦!只是地址重合,但在物理上仍然是两块区域。毕竟,特殊功能寄存器是寄存器,访问速度要高于RAM很多。其结构如下图所示。
在这里插入图片描述

  那这高128B的RAM怎么区分呢?答案是通过访问方式区分,据说二者的汇编代码是不一样的,但是对于C语言编程来说,最主要的区别大概就是特殊功能寄存器一般用sfr声明,而RAM则是根据定义的变量由编译器自动分配,不会特别声明使用

  但是51单片机中使用最广泛的STC单片机却没这么简单,它除了含有256B的内部RAM外,还含有 1024B的内部扩展RAM,这一部分在官方手册中有详细说明:
在这里插入图片描述
所以如果编程的时候遇到RAM大小不够用的时候,就可以考虑使用内部扩展RAM,只需要在声明变量时加上前缀xdata(因为默认是idata)。
  同时这部分手册似乎也说明了这个内部扩展RAM的来历:本来传统的51单片机就有考虑到数据存储器不够用的问题,于是想到了使用外部扩展RAM,利用其16位地址线,可以扩展64KB的外部RAM。但是访问外部RAM就会导致芯片引脚电平发生变化,于是STC的单片机就将外部的RAM“移到”内部了,这样就解决了这个问题。但是这个内部扩展RAM只有1K(根据型号不同有所差别),所以STC的单片机部分引脚数多的型号除内部扩展RAM,还可以访问外部扩展RAM,直到访问上限达到64KB。
在这里插入图片描述
通过控制内部寄存器的位可以决定是只访问外部扩展RAM还是内部加外部扩展RAM。

  此外,在使用内部扩展RAM时,下载的时候记得勾选相关选项,这个在官方手册中也有说明:
在这里插入图片描述

  另外,值得一提的是,对于某些STC单片机型号,部分扩展的特殊功能寄存器的地址和内部扩展RAM地址重合,就像是高128B的内部RAM一样,只是重合,物理上是两个区域。但是,这部分寄存器访问时需要注意将 P_SW2(BAH)寄存器的最高位(EAXFR)置 1

ROM

  说完了RAM,再来说说ROM。通过前面两篇博客,我们知道传统的51单片机,其内部ROM是4K,但是支持外部扩展,最大扩展64K,和上面提到的外部扩展RAM一样。因此,51单片机的ROM最大为内部ROM+64KB外部ROM。
  那怎么区分这几块存储区域呢?答案是利用EA引脚来确定是访问片内程序存储器还是访问片外程序存储器。当EA引脚接高电平时,STC单片机首先访问片内程序存储器,当PC的内容超过片内程序存储器的地址范围时,系统会自动转到片外程序存储器。
  但是STC的单片机根据型号不同,它的内部ROM大小也存在差别,举两个例子:
在这里插入图片描述

在这里插入图片描述

可见最大的ROM可以达到61KB,可以说基本满足大部分需求了,也不再需要外扩。

EEPROM

  EEPROM算是51单片机的一个特殊之处了,这个是传统51单片机没有的。这里的EEPROM和FLASH不是一个区域,不算在FLASH SIZE里面,这个可以通过官方的选型表看出。
在这里插入图片描述
二者是单列的,而且官方手册里面也给出了读写内部EEPROM的方法,这块区域主要用于存储一些不需要修改且数量较多的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录无知岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值