51单片机——存储器(二)

发布时间:2022-12-14  

3.RAM(数据存储器

RAM(数据存储器)存放数据(常量或变量)或运算的结果,相当于计算机的内存;


3.1 片内外RAM(数据存储器)

8051单片机内部有256字节的数据存储器,如果内部数据存储器不够用,可以外接数据存储器。8051单片机最大可以外接容量为64KB的数据存储器(RAM),它与片内256字节数据存储器分开编址,如下图所示。

当8051单片机连接片外RAM时,片内RAM的00H~FFH存储单元地址与片外RAM的0000H~00FFH存储单元地址相同,为了区分两者,在用汇编语言编程时,读写片外RAM时要用“MOVX”指令(读写片内RAM时要用“MOV”指令),在用C语言编程时,读写RAM时须先声明数据类型(内部数据或外部数据),若读写的数据存放在片内RAM中,要声明数据类型为内部数据类型(如用“data”声明)。

若读写的数据存放在片外RAM中,应声明数据类型为外部数据类型(如用“xdata”声明),单片机会根据声明的数据类型自动选择读写片内或片外RAM。


3.2 RAM(数据存储器)的分区

8051单片机内部有128字节的数据存储器(地址为00H~7FH)和128字节的特殊功能寄存器区(地址为80H~FFH),如下图所示。根据功能不同,8051单片机的数据存储器可分为工作寄存器区(0~3组)(32 Bytes)、位寻址区(16 Bytes)、用户RAM区(80 Bytes)、特殊功能寄存器区(128 bytes)。

3.2.1 工作寄存器区

单片机在工作时需要处理很多数据,有些数据要用来运算,有些要反复调用,有些要用来比较校验等,在处理这些数据时需要有地方能暂时存放这些数据,单片机提供暂存数据的地方就是工作寄存器。

8051单片机的工作寄存器区总存储空间为32字节,由0~3组工作寄存器组成,每组有8个工作寄存器(R0~R7),共32个工作寄存器(存储单元),地址编号为00H~1FH,每个工作寄存器可存储一个字节数据(8位),四组工作寄存器的各个寄存器地址编号如下:

单片机上电复位后,默认使用第0组工作寄存器,可以通过编程设置PSW(程序状态字寄存器)的RS1、RS0位的值来换成其他组工作寄存器。

当PSW的RS1位=0、RS0位=0时,使用第0组工作寄存器,RS1位=0、RS0位=1时使用第1组工作寄存器,RS1位=1、RS0位=0时使用第2组工作寄存器,RS1位=1、RS0位=1时使用第3组工作寄存器,如下图所示。不使用的工作寄存器可当作一般的数据存储器使用。

3.2.2 位寻址区

位寻址区位于工作寄存器区之后,总存储空间为16字节,有16个字节存储单元,字节地址为20H~2FH,每个字节存储单元有8个存储位,一共有16×8=128个存储位,每个位都有地址,称为位地址,利用位地址可以直接对位进行读写。

位寻址区的16个字节单元与128个位的地址编号如下图所示,从图中可以看出,字节单元和存储位有部分相同的地址编号,单片机是以指令类型来区分访问地址为字节单元还是位单元,比如用字节指令访问地址20H时,访问的为20H字节单元,可以同时操作该字节单元的8位数,用位指令访问地址20H时,访问的为24H字节单元的D0位,只能操作该位的数据。

3.2.3 用户RAM区

用户RAM区又称为数据缓存区,8051单片机的用户RAM区有80个存储单元(字节),地址编号为30H~7FH,用户RAM区一般用来存储随机数据和运算中间结果等。


3.2.4 特殊功能寄存区

特殊功能寄存器简称SFR(Special Function Register),主要用于管理单片机内部各功能部件(如定时器/计数器、I/O 端口、中断控制器和串行通信口等),通过编程设定一些特殊功能寄存器的值,可以让相对应的功能部件进入设定的工作状态。


1.特殊功能寄存器的符号、字节地址、位地址和复位值


8051单片机有21个特殊功能寄存器(SFR),见下表1,每个特殊功能寄存器都是一个字节单元(有8位),它们的地址离散分布在80H~FFH 范围内,51单片机规定特殊寄存器只能用直接寻址(直接写出 SFR 的地址或符号)方式访问。


21个特殊功能寄存器都能以字节为单位进行访问,其中有一些特殊功能寄存器还可以进行位访问,能访问的位都有符号和位地址,位地址为特殊功能寄存器的字节地址加位号。以特殊功能寄存器P0为例,其字节地址为80H(字节地址值可以被8整除),其P0.0~P0.7位的位地址为80H~87H,访问字节地址80H时可读写8位(P0.0~P0.7位),访问位地址82H时仅可读写P0.2位。


有位地址的特殊寄存器既可以用字节地址访问整个寄存器(8位),也可以用位地址(或位符号)访问寄存器的某个位,无位地址的特殊寄存器只能用字节地址访问整个寄存器。当位地址和字节地址相同时,单片机会根据指令类型来确定该地址的类型。单片机上电复位后,各特殊功能寄存器都有个复位初始值,具体见表1,x表示数值不定(或1或0)。

表1 8051单片机的21个特殊功能寄存器(SFR)

2.部分特殊功能寄存器介绍

单片机的特殊功能寄存器很多,可以分为特定功能型和通用型。对于特定功能型特殊功能寄存器,当往某些位写入不同的值,可以将其控制的功能部件设为不同工作方式,读取某些位的值,可以了解相应功能部件的工作状态;通用型特殊功能寄存器主要用于运算、寻址和反映运算结果状态。


下面介绍一些通用型特殊功能寄存器。

(1)累加器(ACC)

累加器又称ACC,简称A,是一个8位寄存器,其字节地址为E0H。累加器是单片机中使用最频繁的寄存器,在进行算术或逻辑运算时,数据大多数先进入ACC,运算完成后,结果大多数也送入ACC。


(2)寄存器B

寄存器B主要用于乘、除运算,其字节地址是F0H。在乘法运算时,一个数存放在A(累加器)中,另一个数存放在B中,运算结果得到的积(16位)的高字节存放在B中,低字节存放在A中;在除法运算时,被除数存取自A,除数取自B,运算结果得到商(8位)和余数(8位),商存放在A中,余数存放在B中。


(3)数据指针寄存器(DPTR)

数据指针寄存器(DPTR)简称数据指针,是一个16位寄存器,由DPH和DPL两个8位寄存器组成,地址分别为83H、82H。DPTR主要在单片机访问片外RAM时使用,用于存放片外RAM的16位地址,DPH保存高8位地址,DPL保存低8位地址。


(4)堆栈指针寄存器(SP)

人们在洗碗碟时,通常是将洗完的碗碟一只一只由下往上堆起来,使用时则是将碗碟从上往下一只一只取走。这个过程有两个要点:一是这些碗碟的堆放是连续的;二是先堆放的后取走,后堆放的先取走。

单片机的堆栈与上述情况类似。堆栈是指在单片机数据存储器中划分出的一个连续的存储空间,这个存储空间存取数据时具有“先进后出,后进先出”的特点。

在存储器存取数据时,首先根据地址选中某个单元,再将数据存入或取出。如果有一批数据要连续存入存储器,比如将5个数据(每个数据为8位)依次存入地址为30H~34H的5个存储单元中,按一般的操作方法是:先选中地址为30H的存储单元,再将第1个数据存入该单元,然后选中地址为31H的存储单元,再将第2个数据存入该单元……显然这样存取数据比较麻烦,采用堆栈可以很好地解决这个问题。

在数据存储器中划分堆栈的方法是:通过编程的方法设置堆栈指针寄存器(SP)的值,如让SP=2FH,SP就将存储器地址为2FH的存储单元设为堆栈的栈顶地址,2FH单元后面的连续存储单元就构成了堆栈,如下图所示。堆栈设置好后,就可以将数据按顺序依次存入堆栈或从堆栈中取出,在堆栈中存取数据按照“先进后出,后进先出”的规则进行。

需要注意的是,堆栈指针寄存器(SP)中的值并不是堆栈的第一个存储单元的地址,而是前一个单元的地址,例如SP=2FH,那么堆栈的第一个存储单元的地址是30H,第1个数据存入30H单元。单片机通电复位后,SP的初始值为07H,这样堆栈第一个存储单元的地址就为08H,由于08H~1FH地址已划分给1~3组工作寄存器,在需要用到堆栈时,通常在编程时设SP=2FH,这样就将堆栈设置在数据存储器的用户RAM区(30H~7FH)。


(5)程序状态字寄存器(PSW)

程序状态字寄存器(PSW)的地址是 D0H,它是一个状态指示寄存器(又称标志寄存器),用来指示系统的工作状态。PSW是一个8位寄存器,可以存储8位数,各位代表不同的功能。程序状态字寄存器(PSW)的字节地址、各位地址和各位功能如下图所示。

D7位(C):进位标志位。当单片机进行加、减运算时,若运算结果最高位有进位或借位时,C位置1,无进位或借位时,C位置0。在进行位操作时,C用作位操作累加器。


D6位(AC):半进位标志位。单片机进行加、减运算时,当低半字节的D3位向高半字节的D4位有进位或借位时,AC位置1,否则AC位置0。


D5位(F0):用户标志位0。用户可设定的标志位,可置1或置0。


D4位(RS1)、D3位(RS0):工作寄存器组选择位。这两位有4种组合状态,用来控制工作寄存器区(00H~1FH)4组中的某一组寄存器进入工作状态。


D2位(OV):溢出标志位。在进行有符号数运算时,若运算结果超出−128~+127范围,OV=1,否则OV=0;当进行无符号数乘法运算时,若运算结果超出255,OV=1,否则OV=0;当进行无符号数除法运算时,若除数为0,OV=1,否则OV=0。


D1位(F1):用户标志位1。同F0位,用户可设定的标志位,可置1或置0。


D0位(P):奇偶校验位。该位用于对累加器A中的数据进行奇偶校验,当累加器A中“1”的个数为奇数值时,P=1,若累加器A中的“1”的个数为偶数值时,P=0。51系列单片机总是保持累加器A与P中“1”的总个数为偶数值,比如累加器A中有3个“1”,即“1”的个数为奇数值,那么 P 应为“1”,这样才能让两者“1”的总个数为偶数值,这种校验方式称作偶校验。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    的访问速度。在标准C中,不加特别定义的变量是放在存储器中的,使用register可以强制变量存储在寄存器中,对于使用特别频繁且数量不多的变量可以选用这种存储模式,以获得更高的工作效率。 相比之下,51内核单片机的存储......
    MCS-51单片机的基本知识;8051是MCS-51系列单片机的典型产品,其特性与我们实验的STC89C52RC完全相同,这里以8051为例简介一下单片机的基本知识。 8051单片机包含......
    单片机的结构和原理说明;8051是MCS-51系列单片机的非常典型的产品,我们用这一个代表性的型号进行系统的单片机原理讲解。 8051单片机包含中央处理器、数据存储器(RAM)、定时/计数器、程序存储器......
    程序和表格常数。 数据存储器:存放程序运行所需要的参数和运行结果。 从物理存储介质来看,MCS-51系列单片机共有4种存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。 从逻辑地址空间来看,MCS......
    关于MCS-51单片机的经典14问;一、MCS-51单片机内部包含哪些主要功能部件?它们的作用是什么? 二、MCS-51单片机的 EA、ALE和PSEN 端的功能是什么? 答:ALE——ALE......
    51单片机原理与设计方案;一、单片机简介 单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口电路,从而构成了单芯片微型计算机,即单片机(single chip......
    单片机的存储器;虽然断断续续写了几个程序,但是对单片机的很多基础知识了解还不是很透彻,所以今天彻底对存储器百度了一下,有了很多新的发现。 单片机的存储空间有两种基本结构。一种......
    进制数或代码。CPU是单片机的主要核心部件,在CPU里面包含了运算器、控制器以及若干寄存器等部件给成。   内部数据存储器(RAM):   MCS-51单片机芯片共有256个RAM单元,其中后128单元......
    51单片机存储器的结构和原理解析;一、存储器结构 51单片机存储器采用的是哈佛结构,即是程序存储器空间和数据存储器空间分开,程序存储器和数据存储器各自有自己的寻址方式、寻址空间和控制系统。 51......
    51单片机的启动代码究竟里面写了什么;在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示: keil创建新项目时,提示是否添加启动文件 一般情况下,需要选择“是”。当然,也可......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>