zoukankan      html  css  js  c++  java
  • 51单片机存储器结构

    第十二课:51单片机存储器结构

    MCS-51单片机在物理结构上有四个存储空间
    1、片内程序存储器
    2、片外程序存储器
    3、片内数据存储器
    4、片外数据存储器
    但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:
    1、片内外统一编址的64K的程序存储器地址空间
    2、256B的片内数据存储器的地址空间
    3、以及64K片外数据存储器的地址空间
    在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。
    下图是8051单片机存储器的空间结构图

     

     程序存储器
        一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
        MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
        当=1时,程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间。
        当=0时,程序从外部存储器开始执行,例如前面提到的片内无ROM的8031单片机,在实际应用中就要把8031的引脚接为低电平。
        8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:
        其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
        另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:
         0003H—000AH  外部中断0中断地址区。
         000BH—0012H  定时/计数器0中断地址区。
         0013H—001AH  外部中断1中断地址区。
         001BH—0022H  定时/计数器1中断地址区。
         0023H—002AH  串行中断地址区。
        可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。从上面可以看出,每个中断服务程序只有8个字节单元,用8个字节来存放一个中断服务程序显然是不可能的。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,我们是在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令,便转向其他地方去继续执行中断服务程序。

    下图是ROM的地址分配图:

     

    从上图中大家可以看到,0000H-0002H,只有三个存储单元,3个存储单元在我们的程序存放时是存放不了实际意义的程序的,通常我们在实际编写程序时是在这里安排一条ORG指令,通过ORG指令跳转到从0033H开始的用户ROM区域,再来安排我们的程序语言。从0033开始的用户ROM区域用户可以通过ORG指令任意安排,但在应用中应注意,不要超过了实际的存储空间,不然程序就会找不到。

     数据存储器
        数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),片外最多可扩展64KB的RAM,构成两个地址空间,访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令。它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
        MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:
    数据存储器空间(低128单元);
    特殊功能寄存器空间(高128单元);

    这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:

    低128单元:
        片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。

     

    从上图中我们可以看到,8051单片机片内RAM共有256个单元(00H-FFH),这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。

    1、通用寄存器区(00H-1FH)
        在00H—1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0—R7来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的D3和D4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如下表所示。惹程序中并不需要用4组,那么其余的可用做一般的数据缓冲器,CPU在复位后,选中第0组工作寄存器。

    RS1  RS0

    R0

    R1

    R2

    R3

    R4

    R5

    R6

    R7

    0

    1

    2

    3

    0     0

    0     1

    1     0

    1     1

    00H

    08H

    10H

    18H

    01H

    09H

    11H

    19H

    02H

    0AH

    12H

    1AH

    03H

    0BH

    13H

    1BH

    04H

    0CH

    14H

    1CH

    05H

    0DH

    15H

    1DH

    06H

    0EH

    16H

    1EH

    07H

    0FH

    17H

    1FH

    2、位寻址区(20H-2FH)
    片内RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如下表所示:

     RAM位寻址区地址表

    单元地址

    MSB        位地址        LSB

     

    2FH

    7FH

    7EH

    7DH

    7CH

    7BH

    7AH

    79H

    78H

     

    2EH

    77H

    76H

    75H

    74H

    73H

    72H

    71H

    70H

     

    2DH

    6FH

    6EH

    6DH

    6CH

    6BH

    6AH

    69H

    68H

     

    2CH

    67H

    66H

    65H

    64H

    63H

    62H

    61H

    60H

     

    2BH

    5FH

    5EH

    5DH

    5CH

    5BH

    5AH

    59H

    58H

     

    2AH

    57H

    56H

    55H

    54H

    53H

    52H

    51H

    50H

     

    29H

    4FH

    4EH

    4DH

    4CH

    4BH

    4AH

    49H

    48H

     

    28H

    47H

    46H

    45H

    44H

    43H

    42H

    41H

    40H

     

    27H

    3FH

    3EH

    3DH

    3CH

    3BH

    3AH

    39H

    38H

     

    26H

    37H

    36H

    35H

    34H

    33H

    32H

    31H

    30H

     

    25H

    2FH

    2EH

    2DH

    2CH

    2BH

    2AH

    29H

    28H

     

    24H

    27H

    26H

    25H

    24H

    23H

    22H

    21H

    20H

     

    23H

    1FH

    1EH

    1DH

    1CH

    1BH

    1AH

    19H

    18H

     

    22H

    17H

    16H

    15H

    14H

    13H

    12H

    11H

    10H

     

    21H

    0FH

    0EH

    0DH

    0CH

    0BH

    0AH

    09H

    08

    H

     

    20H

    07H

    06H

    05H

    04H

    03H

    02H

    01H

    00H

     

    CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。

    3、用户RAM区(30H-7FH)
    在片内RAM低128单元中,通用寄存器占去32个单元,位寻址区占去16个单元,剩下的80个单元就是供用户使用的一般RAM区了,地址单元为30H-7FH。对这部份区域的使用不作任何规定和限制,但应说明的是,堆栈一般开辟在这个区域。

    高128单元:(80H-FFH)
    前面提到,在片内的RAM中,高128位是专用寄存器区,因这节比较重要,所以我们单独的安排一节课跟大家介绍。下节课我们就重点介绍51单片机片内RAM的高128位,即专用寄存器区。

    片外数据存储器在这里我们就先在介绍,在后面关于数据存储器扩展的章节中我们再详细介绍。

  • 相关阅读:
    第二次冲刺 站立会议7
    第二次冲刺 站立会议6
    第二次冲刺 站立会议5
    第二次冲刺 站立会议4
    第二次冲刺 站立会议3
    第二次冲刺 站立会议2
    第二次冲刺 站立会议1
    第一次冲刺 站立会议9
    第一次冲刺 站立会议8
    第一次冲刺 站立会议7
  • 原文地址:https://www.cnblogs.com/shirishiqi/p/5614458.html
Copyright © 2011-2022 走看看