单片机必学系列
单片机学习——中断系统
单片机学习——存储器详解(程序存储器、片内RAM、拓展RAM、EEPROM)
单片机学习——定时器/计数器
单片机学习——A/D转换
更新ing
单片机学习——存储器详解(程序存储器、片内RAM、拓展RAM、EEPROM)
单片机必学系列前言一、程序存储器二、片内基本RAM1.低128字节RAM2.高128字节RAM 与 特殊功能寄存器三、拓展RAM四、EEPROM前言
本文对STC8H8K64U单片机存储器进行了总结(它的内存构造和其他单片机并无太大差别),并发表了本人的一些看法,存储器是单片机、微机的关键,理解这一部分内容,受益终生。
一、程序存储器
程序存储器(又称为数据Flash),顾名思义,是用来存放用户的程序,让单片机按照所写代码顺序执行,并完成指定任务。
所以程序存储器也就是我们听说过很多次的ROM(Read-Only Memory)只读存储器。
里面存放的是代码,一般还有常数、表格、圆周率值、数码管字形、单片机ID号、内部参考信号源、掉电唤醒定时器频率、IRC参数等等数据
注意:单片机每次都是烧录程序,烧录就是为了把代码放到程序存储器中,而我们用的电脑则是把硬盘的数据和程序放到RAM,再用CPU去读取RAM里面的数据和程序
一般在C51中,我们可以加个code,把数据存在程序Flash中。
unsigned char code date[2] = {0x01,0x20};
二、片内基本RAM
片内基本RAM,听名字是不是感觉就是只个RAM(Random Access Memory)随机存储器,以STC8H8K64U单片机256字节的RAM为例,其实这部分包括有:
片内低128字节,高128字节以及特殊功能寄存器。
为什么要把低128字节和高128字节分开说呢,因为功能不同
1.低128字节RAM
低128字节RAM是单片机基本的数据存储区,是最接近CPU的数据存储区,也是功能最丰富的存储区。
它有哪些功能呢,见下图:
可以看到,此型号单片机低128字节RAM包含了4个工作寄存器组,一个组内有8个寄存器,可位寻址区,堆栈区。
对于堆栈区,我有些许心得,平时我们执行的函数,进入函数便要使用栈,进行压栈,退出函数的时候就出栈,可以说,栈的作用就是记忆,记录下进入函数之前的位置,执行完函数,原路返回,我们定义的主函数也是函数,其中的临时变量等也在栈区,但是全局变量不在堆栈区。
此处我并没有讲堆栈的区别,此文重心不在这个上面,主要是对内存有整体的认识。
2.高128字节RAM 与 特殊功能寄存器
高128字节的地址和特殊功能寄存器地址是一样的,你会很奇怪,这不是冲突了吗?
没错,确实冲突了!
但是我们可以通过不同的操作方式来访问他们,高128字节RAM只能采用间接寻址的方式来访问,特殊功能寄存器则可以使用直接寻址的方式来访问。(如果不清楚寻址方式的话,可以去看一下另一篇文章《指令系统与寻址方式》以及系列文章)
在C51中,要在高128字节存放数据可以使用:
unsigned char idata date[2] = {0x01,0x20};
特殊功能寄存器可以用其名字即可进行存取操作
三、拓展RAM
拓展RAM又分为片内拓展RAM和片外拓展RAM
扩展RAM类似于传统的片外数据存储器,采用访问片外数据存储器的访问指令(汇编助记符为 MOVX )访问扩展RAM区域。
可以通过AUXR寄存器中的EXTERAM位来选择片内拓展RAM或片外拓展RAM。
有这东西完全是因为片内基本RAM实在太少了。
四、EEPROM
EEPRROM,你可以从它的名字上看出ROM这三个字母,没错,它属于ROM,它又被称为数据Flash,在IAP功能下,程序存储器用剩下的空间会被用作数据Flash(EEPROM),用来存放一些应用时需要经常修改,掉电后又能保持不变的参数。
最后放一张图,让大家感受一下整体结构。
各位可以收藏这个系列,关键时刻忘了,当电子书查询。 感谢您的观看!我会坚持写下去的,请您关注我的改变。