80c51的存储器分哪几个空间_80c51单片机的ram分为几部分

(2) 2024-06-25 20:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
80c51的存储器分哪几个空间_80c51单片机的ram分为几部分,希望能够帮助你!!!。

80C51存储结构

    • 80C51存储结构
      • 总体分类
      • 片内片外的存储空间结构图
      • 程序存储器ROM
        • ROM作用
        • 不同型号单片机的ROM设计
        • 通过EA引脚的电平选择片内ROM还是片外ROM
        • 片内ROM低地址内存空间的特殊功能
      • 数据存储器RAM
        • RAM作用
        • RAM分区说明
        • RAM空间分布图(80C51低128位和高128位问题)
          • 80C51:
          • 工作寄存器区:
          • 位寻址区:
          • 用户RAM区:
          • 高128单元:
          • 80C52:
    • 总结
      • 网友对80C51高128位疑惑的解答:
    • 指针有关的特殊功能寄存器
      • 数据指针(DPTR)
      • 堆栈指针
      • 程序计数器(指向下一条指令的地址)

总体分类

1.80C51的存储器的物理结构为哈佛结构,它将程序存储器ROM数据存储器RAM分开

普林斯顿结构是指程序存储器地址空间与数据存储器地址空间合并的单片机结构

从物理地址空间上看,80C51单片机有4个存储器地址空间,即片内数据存储器(片内RAM)、片内程序存储器(片内ROM)、片外数据存储器(片外RAM)和片外程序存储器(片外ROM)

片内片外的存储空间结构图

因为RAM和ROM是分开的,所以它们的起始地址和终止地址没有必然关系

80c51的存储器分哪几个空间_80c51单片机的ram分为几部分_https://bianchenghao6.com/blog__第1张

片内RAM:00H ~ 7FH:0000 0000 ~ 0111 1111(二进制) =》 0 ~ 127(十进制) =》 共128B(B是字节)(快速计算方法: 27 = 128)

片内ROM:0000H ~ 0FFFH:0000 0000 0000 0000 ~ 0000 1111 1111 1111(二进制) =》 0 ~ 4095(十进制) =》 共4096B(B是字节) =》 写成4KB**(快速计算方法: 212 = 4096)**

片外RAM:0000H ~ FFFFH:0000 0000 0000 0000 ~ 1111 1111 1111 1111(二进制) =》 0 ~ 65535(十进制)=》 共65536B(B是字节) =》 写成64KB**(快速计算方法: 216 = 65536)**

片外ROM:1000H ~ FFFFH:0001 0000 0000 0000 ~ 1111 1111 1111 1111(二进制) =》 4096 ~ 65535(十进制)=》 共61439B(B是字节) =》 写成60KB

程序存储器ROM

ROM作用

80C51单片机的程序存储器ROM主要用来存放程序、常数、数组或表格等,80C51内有4KB的掩膜ROM

不同型号单片机的ROM设计

不同型号的51内核单片机的ROM设计有可能不相同,这都是厂家自己设置的,既然型号都不同了,那么ROM的种类或大小也会不同,如

87C51内部有4KB的EPROM,AT89S51内部有4KB的Flash EEROM,并具有ISP功能,而80C31内部没有程序存储器ROM

通过EA引脚的电平选择片内ROM还是片外ROM

EA引脚的功能是:选择片内ROM还是片外ROM

如果EA 接高电平时,程序计数器(PC)是在0000H ~ 0FFFH的地址范围内移动,也就是先执行片内ROM里的程序,当超过片内ROM的最大地址0FFFH时,PC会自动跳到片外ROM去执行片外的程序,地址范围是1000H ~ FFFFH;因为0FFFH加1后地址就是1000H

如果EA 接低电平时,只能去片外ROM里执行程序,此时的片外地址可以从0000H开始编址,就是说不与片内ROM一起编址的化,片外ROM的地址就从0000H开始,到FFFFH结束

片内ROM低地址内存空间的特殊功能

在片内ROM地址里,低地址中有6块内存空间是具有特殊功能的,每一块可以是3个内存单元,也可以是8个内存单元

  1. 0000H ~ 0002H:单片机复位后的程序入口地址(3个单元)

  2. 0003H ~ 000AH:外部中断0(INT0)的中断服务程序入口地址(8个单元)

  3. 000BH ~ 0012H:定时器0(T0)的中断服务程序入口地址(8个单元)

  4. 0013H ~001AH:外部中断1(INT1)的中断服务程序入口地址(8个单元)

  5. 001BH ~ 0022H:定时器1(T1)的中断服务程序入口地址(8个单元)

  6. 0023H ~002AH:串行口的中断服务程序入口地址(8个单元)

中断服务程序不就是平时写程序时的中断处理函数嘛,如定时器计数溢出时,会跑到中断处理函数去执行,形式一般为:void Timer0_Rountine() interrupt 1{ }

特殊功能图如下,每个地址都是从一个格子的左下角开始

80c51的存储器分哪几个空间_80c51单片机的ram分为几部分_https://bianchenghao6.com/blog__第2张

第一组特珠单元是0000H ~ 0002H,3个单元不可能安排长程序,因此,系统复位后,(PC) = 0000H.80C51单片机从0000H单元开始取指令执行程序。如果程序不从0000H单元开始,应在这3个单元中存放一条无条件转移指令(LJMP),以便直接转去执行指定的程序。

第二组特殊单元是0003H ~ 002AH,共40个单元。这40个单元被均匀地分为5段,作为5个中断源的中断地址区。中断响应后,按中断种类,自 动转到各中断区的首地址去执行程序,因此,在中断地址区中应存放中断服务程序。但通常情况下,8个单元难以存下一个完整的中断服务程序,因此通常也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址。

数据存储器RAM

RAM作用

80C51数据存储器RAM主要用来存放运算的中间结果数据等。

RAM分区说明

80C51(51子系列):片内数据存储器RAM只有128B,地址范围为00H ~ 7FH;

80C52(52子系列):片内数据存储器RAM有256B,地址范围为00H ~ FFH;这256B地址又分两个部分,低128B(00H ~7FH)RAM区,与80C51的RAM区相同,高128B(80H ~ FFH)RAM区,需要注意的是高12B RAM区的地址与**特殊功能寄存器(SFR)**区重叠

如何区分要访问的是RAM区还是SFR寄存器区

访问RAM:寄存器间接寻址

访问特殊功能寄存器SFR:直接寻址方式

两者都可扩展片外RAM,最多可扩至64KB存储单元,地址范围为0000H ~ FFFFH

RAM空间分布图(80C51低128位和高128位问题)
80C51:

80c51的存储器分哪几个空间_80c51单片机的ram分为几部分_https://bianchenghao6.com/blog__第3张

注意:

这里会有个疑惑:80C51的片内RAM只有128B,为什么有些教材上会有80C51低128B和高128B的说法呢?

答:低128位的空间才是80C51真正的RAM,上图中工作寄存器区+位寻址区+用户RAM区才是80C51的片内RAM区,00H ~ 7FH,共128B;

而位于该256B总空间里高128位的特殊功能寄存器(SFR)区,编址范围是80H ~ FFH,这与真正的片内RAM区编址连续但不重叠,不是80C51的RAM区,换种说法就是,SFR只是刚好被放在了80H ~FFH的地址范围内,与片内RAM在物理上是相互独立的,两者互不相干,RAM区完成RAM区的工作,SFR区完成SFR区的工作,只因SFR的地址范围是80H ~FFH,在叫法上,称其是在高128B;很多教材都没说明白,看书时就越看越懵。

工作寄存器区:

80C51 单片机内部 RAM 的00H~1FH地址单元,共32B,分成4组工作寄存器,每组8个工作寄存单元。

寄存器0组:地址00H ~ 07H(R0~R7)。

寄存器1组:地址08H ~ 0FH(R0~R7)。

寄存器2组:地址10H ~ 17H(R0~R7)。

寄存器3组:地址18H ~ 1FH(R0~ R7)。

各组都以R0 ~ R7作为工作寄存单元编号。由于它们的功能及使用不作预先规定,因此称之为通用寄存器。4组通用寄存器在任一时刻,CPU 只能使用其中的一组工作寄存器,并且把正在使用的那组寄存器称为当前寄存器组。到底是哪一组,由程序状态字(PSW)寄存器中RS1、RSO位的状态组合来决定。

位寻址区:

内部RAM的20H ~ 2FH地址单元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中的每一位进行位操作,因此把该区称为位寻址区。位寻址区共有16个RAM单元,计128位,而每一位都赋予了一个位地址,位地址范围为00H~7FH。程序设计时,常将程序状态标志、位控制变量设在位寻址区内。这种位寻址能力是80C51的一个重要特点。

用户RAM区:

地址为30H ~7FH,共80B,这就是供用户使用的一般RAM区。这个区域的操作指令非常丰富,数据处理方便、灵活。对用户RAM区的使用没有任何规定或限制,但一般应用中常把堆栈设置在此区中。

高128单元:

高128单元是供给专用寄存器使用的,它们分布在其单元地址为80H~FFH的空间。因这些寄存器的功能已作专门规定,故称之为专用寄存器(SpecialFunction Register) ,也可称为特殊功能寄存器(SFR)。访问SFR,只允许使用直接寻址方式

80C52:

80c51的存储器分哪几个空间_80c51单片机的ram分为几部分_https://bianchenghao6.com/blog__第4张

80C52的片内RAM总共256B,低128位与51的一样,不同的是80C52的高128位也是片内RAM区,与下面的低128位RAM属性一样,但功能不同

注意:

特殊功能寄存器SFR的编址范围还是 80H ~FFH,与52的片内RAM高128位地址重叠了,意思是在80H ~ FFH这片地址范围内,既可以把其看作是片内RAM ,也可以看作是SFR,那在使用时如何区分寻址是使用的RAM还是特殊功能寄存器呢?

答:通过不同的寻址方式来区别片内RAM和SFR,若访问的是RAM区,则用寄存器间接寻址;若访问的是SFR区,则用直接寻址方式

总结

80C51单片机片内的地址分配:
0 ~127:RAM --可以直接寻址,也可以间接寻址
128 ~ 255:有21个特殊功能寄存器SFR --只可以直接寻址,不属于RAM

80C52单片机片内的地址分配:
0~127:RAM; --可以直接寻址,也可以间接寻址
128~255:RAM; --只可以间接寻址
128~255:有21个特殊功能寄存器SFR。 --只可以直接寻址

片外数据存储器RAM与程序存储器ROM的地址空间是重叠的,但不会发生冲突。因为它们是两个独立的地址空间,使用不同的指令访问,控制信号也不同。访问程序存储器时,用PSEN信号选通,而访向片外数据存储器时,由RD (读)和WR (写)选通信号。

网友对80C51高128位疑惑的解答:

1.简单来说,就是片内RAM和特殊功能寄存器在物理上是相互独立的。就像51子系列内部RAM没有高128B,但它任然有特殊功能寄存器,因为特殊功能寄存器并不是高128B的存储单元,只是因为其地址编码在80H~0FFH,所以说它在高128B,52子系列拥有高128B,并不是说高128B的片内RAM的部分单元用于充当特殊功能寄存器,RAM就是RAM,特殊功能寄存器有独立的存储空间

2.51单片机内部RAM是256字节,高128字节被SFR占用,为什么一般认为内部RAM为128字节呢,是为了区分SFR和低128字节空间,两者寻址方式不一样。至于为什么不一样取决于要分辨51单片机和52单片机,52单片机高位128不是作为SFR,属于内部RAM,但是规定只能使用间接寻址(区分51内部RAM高128位)

指针有关的特殊功能寄存器

数据指针(DPTR)

数据指针为16位寄存器,用来存放16位地址。DPTR既可以按16位寄存器使用,也可以按两个8位寄存器分开使用,即:

DPH——DPTR 高8位字节。

DPL——DPTR 低8位字节。

DPTR通常在访问片外RAMROM存储器作地址指针使用,用间接寻址或变址寻址可对片外的64KB范围的RAM或ROM数据进行操作。

堆栈指针

堆栈指针(Stack Pointer,SP)是一个8位寄存器,它总是指向栈顶。80C51单片机在编程序时常将堆栈设在内部RAM30H ~ 7FH中。堆栈是一个特殊的存储区,用来暂存数据和地址,它是按“先进后出”的原则存取数据的。堆栈共有两种操作:进栈和出栈。80C51单片机系统复位后,SP的内容为07H,从而复位后堆栈实际上是从08H单元开始的。但08H ~ 1FH单元分别属于工作寄存器1 ~ 3组,如程序要用到这些区,最好把SP值改为1FH或更大的值。一般在内部RAM的30H~ 7FH单元中开辟堆栈。SP的内容一经确定,堆栈的位置也就跟着确定下来,由于SP可设置为不同值,因此堆栈位置是浮动的

程序计数器(指向下一条指令的地址)

程序计数器(ProgramCounter,PC)是一个16位的计数器,其作用是控制程序的执行顺序;其内容为将要执行指令的地址,寻址范围达64KB。PC有自动加1功能,从而实现程序的顺序执行。PC没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。因地址不在SFR(专用寄存器)之内,一般不计作专用寄存器。

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复