51单片机存储器结构介绍 - 畅学网
博学强知,畅腾思维

51单片机存储器结构介绍

发布:Andre tian2014-8-6 13:39分类: 单片机技术 标签: 存储结构

 

MCS-51单片机在物理结构上有四个存储空间:

1、片内程序存储器
      2、片外程序存储器
      3、片内数据存储器
      4、片外数据存储器

但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:

1、片内外统一编址的64K的程序存储器地址空间(MOVC
      2256B的片内数据存储器的地址空间(MOV
       3、以及64K片外数据存储器的地址空间(MOVX
在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。

 

程序内存ROM

寻址范围:0000H ~ FFFFH 容量64KB
       EA = 1
,寻址内部ROM

 EA = 0,寻址外部ROM
       地址长度:16
       作用: 存放程序及程序运行时所需的常数。
       七个具有特殊含义的单元是:
        0000H —— 系统复位,PC指向此处;
        0003H —— 外部中断0入口
        000BH —— T0溢出中断入口
        0013H —— 外中断1入口
        001BH —— T1溢出中断入口
        0023H —— 串口中断入口
        002BH —— T2溢出中断入口

 

内部数据存储器RAM
     
物理上分为两大区:00H ~ 7FH128BRAM SFR区。
     作用:作数据缓冲器用。

下图是8051单片机存储器的空间结构图

51存储1.jpg


程序存储器

    一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
       MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
       #EA=1时,程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间。
       #EA=0时,程序从外部存储器开始执行,例如前面提到的片内无ROM8031单片机,在实际应用中就要把8031的引脚接为低电平。
       8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:
        其中一组特殊是0000H—0002H单元,系统复位后,PC0000H,单片机从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的地址分配图:

51存储2.jpg


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

文章摘自http://blog.sina.com.cn/s/blog_719b29170100o1us.html


数据存储器

    数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM128256个字节的用户数据存储(不同的型号有分别),片外最多可扩展64KBRAM,构成两个地址空间,访问片内RAM“MOV”指令,访问片外RAM“MOVX”指令。它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
   MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:
数据存储器空间(低128单元);
特殊功能寄存器空间(高128单元);
这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:

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

                                                     51存储3.gif

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

                   51存储4.gif

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

51存储5.jpg

 

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

          51存储6.jpg

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

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

文章摘自http://blog.sina.com.cn/s/blog_719b29170100o1us.html


128单元:(80H-FFH

 

21个特殊功能寄存器不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作.

51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0P1P2P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下:

 

符号

地址

功能介绍

B

F0H

B寄存器

ACC

E0H

累加器

PSW

D0H

程序状态字

IP

B8H

中断优先级控制寄存器

P3

B0H

P3口锁存器

IE

A8H

中断允许控制寄存器

P2

A0H

P2口锁存器

SBUF

99H

串行口锁存器

SCON

98H

串行口控制寄存器

P1

90H

P1口锁存器

TH1

8DH

定时器/计数器1(高8位)

TH0

8CH

定时器/计数器1(低8位)

TL1

8BH

定时器/计数器0(高8位)

TL0

8AH

定时器/计数器0(低8位)

TMOD

89H

定时器/计数器方式控制寄存器

TCON

88H

定时器/计数器控制寄存器

DPH

83H

数据地址指针(高8位)

DPL

82H

数据地址指针(低8位)

SP

81H

堆栈指针

P0

80H

P0口锁存器

PCON

87H

电源控制寄存器

 

 

分别说明如下:

1ACC---是累加器,通常用A表示。
这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A0Z1;若A≠0z0。该标志常用作程序分枝转移的判断条件。

2B--一个寄存器。
在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。

3PSW-----程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表:

 

 

D7

D6

D5

D4

D3

D2

D1

D0

CY

AC

F0

RS1

RS0

OV

 

P

 

 

下面我们逐一介绍各位的用途
CY:进位标志。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY1;无进、借位,CY0
例:78H+97H01111000+10010111

AC:辅助进、借位(高半字节与低半字节间的进、借位)
例:57H+3AH01010111+00111010

F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。
RS1RS0:工作寄存器组选择位。这个我们已知了。
0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV0。什么是溢出我们后面的章节会讲到。
P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。运算结果有奇数个1P1;运算结果有偶数个1P0
例:某运算结果是78H01111000),显然1的个数为偶数,所以P=0

4DPTRDPHDPL--------数据指针,可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。分成DPL(8)DPH(8)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作。

5P0P1P2P3------这个我们已经知道,是四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。

 

 

文章摘自http://blog.sina.com.cn/s/blog_719b29170100o1us.html


6IE-----中断充许寄存器

按位寻址,地址:A8H

B7

B6

B5

B4

B3

B2

B1

B0

EA

-

ET2

ES

ET1

EX1

ET0

EX0

 

 

EA IE.7):EA=0时,所有中断禁止(即不产生中断)
EA=1时,各中断的产生由个别的允许位决定
- IE.6):保留
ET2IE.5):定时2溢出中断充许(8052用)
ES IE.4):串行口中断充许(ES=1充许,ES=0禁止)
ET1IE.3):定时1中断充许
EX1IE.2):外中断INT1中断充许
ET0IE.1):定时器0中断充许
EX0IE.0):外部中断INT0的中断允许

7IP-----中断优先级控制寄存器
按位寻址,地址位B8H

 

 

B7

B6

B5

B4

B3

B2

B1

B0

-

-

PT2

PS

PT1

PX1

PT0

PX0

 

 

- IP.7):保留
- IP.6):保留
PT2IP.5):定时2中断优先(8052用)
PS IP.4):串行口中断优先
PT1IP.3):定时1中断优先
PX1IP.2):外中断INT1中断优先
PT0IP.1):定时器0中断优先
PX0IP.0):外部中断INT0的中断优先

8TMOD-----定时器控制寄存器
不按位寻址,地址89H

 

 

B7

B6

B5

B4

B3

B2

B1

B0

GATE

C/T

M1

M0

GATE

C/T

M1

M

 

 

GATE :定时操作开关控制位,当GATE=1时,INT0INT1引脚为高电平,同时TCON中的TR0TR1控制位为1时,计时/计数器01才开始工作。若GATE=0,则只要将TR0TR1控制位设为1,计时/计数器01就开始工作。
C/T :定时器或计数器功能的选择位。C/T=1为计数器,通过外部引脚T0T1输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。
M1 :模式选择位高位
M0 :模式选择位低位

 

 

M1

M0

工作模式

0

0

13位计数/计时器

0

1

16位计数/计时器

1

0

8位自动加载计数/计时器

1

1

定时器1停止工作,定时器0分为两个独立的8位定时器TH0TL0

 

 

9TCON-----定时器控制寄存器

 

 

按位寻址,地址
88H B7

B6

B5

B4

B3

B2

B1

B0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

 

 

803l单片机共有21个字节的特殊功能寄存器(SFR),起着专用寄存器的作用,用来设置片内电路的运行方式,记录电路的运行状态,并表明有关标志等。此外,特殊功能寄存器中,还有把并行和串行IO端口映射过来的寄存器,对这些寄存器的读写,可实现从相应IO端口的输入、输出操作。

21个特殊功能寄存器不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作。

 

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

已有 0/3794 人参与

发表评论:

欢迎使用手机扫描访问本站,还可以关注微信哦~