您的位置: 网站首页 > 电子与嵌入式 > 单片机原理与应用 > 第2章 单片机的结构和原理 > 【2.3 存 储 器】

2.3 存 储 器

 

MCS-51系列单片机的存储器组织采用的是哈佛(Harvard)结构,即将程序存储器和数据存储器分开,程序存储器和数据存储器具有各自独立的寻址方式、寻址空间和控制信号。这种结构对于单片机“面向控制”的实际应用较为方便。MCS-51的存储器结构如图2-7所示(内部数据RAM的高128B仅为52子系列单片机拥有,51子系列无)。

MCS-51系列(8031和8032除外)有4个物理上相互独立的存储器空间,即内、外程序存储器和内、外数据存储器。逻辑上分为3个存储空间,即片内外统一编址的64KB的程序存储器地址空间、256B的片内数据存储器及64KB的片外数据存储器地址空间(可扩展数据RAM或I/O接口)。

(c)外部数据存储器空间

(b)内部数据存储器RAM

(a)程序存储器空间

图2-7  MCS-51单片机存储器结构(1)

2.3.1  程序存储器

MCS-51系列中,8031内部没有用于存储程序的ROM存储器,8051和8751有4KB的ROM存储器,地址范围为0000H~0FFFH。无论8031还是8051,都可以外接外部ROM,但片内和片外之和不能超过64KB。8051有64KB的ROM寻址区,其中0000H~0FFFH的4KB地址区可以为片内ROM和片外ROM公用,1000H~FFFFH的60KB地址区为片外ROM所专用。在0000H~0FFFH的4KB地址区,片内ROM可以占用,片外ROM也可以占用,但不能为两者同时占用。为了指示机器的这种占用,器件设计者为用户提供了一个专用的控制引脚EA。若EA接+5V高电平,则机器使用片内4KB ROM;若EA接低电平,则机器自动使用片外ROM,如图2-8(a)所示。由于8031片内无ROM,故它的EA应接地。

图2-8  MCS-51单片机存储器结构(2)

单片机复位后,程序计数器PC的值为0000H,单片机自动从0000H开始取指执行,但要注意0003H~0023H有5个中断入口地址,主程序一般放在0023H之后的存储器单元中。因此,一般都在0000H单元放一条绝对跳转指令,用户程序则从转移后的地址开始执行。以下是5个中断入口地址。

·    0003H:外部中断INT0入口。

·    000BH:定时器T0中断入口。

·    0013H:外部中断INTl入口。

·    001BH:定时器T1中断入口。

·    0023H:串行口中断入口。

2.3.2 内部数据存储器

RAM存储器主要用来存放数据,故它又称为数据存储器。MCS-51的RAM存储器有片内和片外之分:片内RAM共128个,地址范围为00H~7FH,片外RAM共有64KB,地址范围为0000H~FFFFH。因此,MCS-51的RAM的实际存储容量是超过64KB的,如图2-8(b)所示。为了指示机器到片内RAM寻址还是到片外RAM寻址,单片机器件设计者为用户提供了两类不同的传送指令:MOV指令用于片内00H~FFH范围内的寻址,MOVX指令用于片外0000H~FFFFH范围内的寻址。

片内数据存储器的8位地址一共可寻址256个字节单元,51子系列单片机将其分为两个区:00H~7FH的128个单元为片内RAM区,可以读、写任何数据;80H~FFH的高128个单元为专用寄存器区,即为特殊功能寄存器(Special Function Register,SFR)区。

在低128个字节的内部RAM中,前32个单元(地址为00H~1FH)为通用工作寄存器区,共分为4组(寄存器0组、1组、2组、3组),每组8个工作寄存器由R0~R7组成,共占32个单元。选用哪一组由程序状态字PSW中的RS1、RS0这两位的设置决定,见表2-1。这个特点使MCS-51具有快速现场保护功能,能够提高执行程序的效率和响应中断的速率。若程序并不需要4组工作寄存器,那么剩下的工作寄存器可作为一般的存储器来使用。CPU在复位时自动选中0组。

20H~2FH的16个单元为位寻址区,30H~7FH为通用用户RAM区,主要用于存放用户程序的中间数据。

2.3.3  位存储器

如表2-2所示,20H~2FH的16个单元为位寻址区,每个单元8位,共128位,其位地址范围为00H~7FH。位寻址区的每一位都可当作软件触发器,由程序直接进行位处理。程序中通常把各种程序状态标志、位控制变量设在位寻址区。同样,位寻址区的RAM单元也可作为一般的数据存储器按字节单元使用。具体位地址单元如表2-2所示。

表2-2  内部数据存储器中的位地址

字节地址

位  地  址

D7

D6

D5

D4

D3

D2

D1

D0

2FH

7FH

7EH

7DH

7CH

7BH

7AH

79H

78H

续上表

字节地址

位  地  址

D7

D6

D5

D4

D3

D2

D1

D0

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

08H

20H

07H

06H

05H

04H

03H

02H

01H

00H

 

2.3.4  特殊功能寄存器SFR

内部RAM的高128个字节(80H~FFH)为特殊功能寄存器SFR区,其中51子系列有21个,52子系列有26个,它们离散地分布在这个区中,分别用于CPU并行口、串行口、中断系统、定时器/计数器等功能单元控制和状态寄存器。这些专用寄存器的地址映像如表2-3所示,除这21个特殊功能寄存器地址之外的其他单元是空闲没用的,不能被访问,在使用时应加以注意。

表2-3  特殊功能寄存器地址及功能表

名  称

符  号

字节

地址

位功能标记/位地址

B寄存器

B

F0H

B.7/F 7

B.6/F6

B.5/F5

B.4/F4

B.3/F3

B.2/F2

B.1/F1

B.0/F0

累加器

A

E0H

ACC.7

/E7

ACC.6

/E6

ACC.5

/E5

ACC.4

/E4

ACC.3

/E3

ACC.2

/E2

ACC.1

/E1

ACC.0

/EO

程序状态

字寄存器

PSW

D0H

CY

/D7

AC

/D6

F0

/D5

RSl

/D4

RS0

/D3

OV

/D2

X

/D1

P

/D0

中断优先

级寄存器

IP

B8H

—

—

—

PS

/BC

PTl

/BB

PXl

/BA

PT0

/B9

PX0

/B8

P3端口

寄存器

P3

B0H

P3.7

/B7

P3.6

/B6

P3.5

/B5

P3.4

/B4

P3.3

/B3

P3.2

/B2

P3.1

/B1

P3.0

/B0

续上表

名  称

符  号

字节

地址

位功能标记/位地址

中断允许

寄存器

IE

A8H

EA

/AF

—

—

ES

/AC

ETl

/AB

EXl

/AA

ET0

/A9

EX0

/A8

P2端口

寄存器

P2

A0H

P2.7

/A7

P2.6

/A6

P2.5

/A5

P2.4

/A4

P2.3

/A3

P2.2

/A2

P2.1

/A1

P2.0

/A0

串行口控

制寄存器

SCON

98H

SM0

/9F

SM1

/9E

SM2

/9D

REN

/9C

TB8

/9B

RB8

/9A

TI

/99

RI

/98

P1端口

寄存器

P1

90H

P1.7

/97

P1.6

/96

P1.5

/95

P1.4

/94

P1.3

/93

P1.2

/92

P1.1

/91

P1.0

/90

定时控制

寄存器

TCON

88H

TFl

/8F

TRl

/8E

TF0

/8D

TR0

/8C

IEl

/8B

ITl

/8A

IE0

/89

IT0

/88

P0端口

寄存器

P0

80H

P0.7

/87

P0.6

/86

P0.5

/85

P0.4

/84

P0.3

/83

P0.2

/82

P0.1

/81

P0.0

/80

串行数据

寄存器

SBUF

99H

—

—

—

—

—

—

—

—

定时器1

的高8位

THl

8DH

—

—

—

—

—

—

—

—

定时器0

的高8位

TH0

8CH

—

—

—

—

—

—

—

—

定时器1

的低8位

TLl

8BH

—

—

—

—

—

—

—

—

定时器0

的低8位

TL0

8AH

—

—

—

—

—

—

—

—

定时器方

式选择

TMOD

89H

—

—

—

—

—

—

—

—

电源及波

特率选择

PCON

87H

—

—

—

—

—

—

—

—

数据高8

位指针

DPH

83H

—

—

—

—

—

—

—

—

数据低8

位指针

DPL

82H

—

—

—

—

—

—

—

—

堆栈指针

SP

81H

—

—

—

—

—

—

—

—

注:-表示该位地址无效。

由表2-3可见,在特殊功能寄存器中也有字节地址和位地址这套地址。它们在地址空间上都是80H~FFH,但对字节地址而言只有21个有效,对位地址只有83个是有效的(凡字节地址可被8整除的SFR可位寻址)。

SFR分别属于以下各个功能单元。

·    CPU:ACC、B、PSW、SP、DPTR(由DPH和DPL组成)、PCON。

·    并行口:P0、P1、P2、P3。

·    中断系统:IE、IP。

·    定时器/计数器:TMOD、TCON、T0(由TH0和TL0组成)、T1(由THl和TLl组成)。

·    串行口:SCON、SBUF。

在这21个特殊功能寄存器中,与CPU相关的7个SFR已在上一节作了介绍,这里不再赘述。其他的特殊功能寄存器由于其功能的特殊性,将在有关章节中进行详细介绍。

下面只简单地让读者有一个初步的了解。

(1)I/O端口P0~P3。

特殊功能寄存器组中的P0、P1、P2、P3分别为I/O端口的锁存器,用于I/O端口的读/写操作。

(2)串行口数据缓冲器SBUF。

串行数据缓冲器SBUF用于存放欲发送或已接收的数据,实际上在SBUF中有两个独立的寄存器,一个是发送缓冲器,另一个是接收缓冲器。当数据写入SBUF时,就被送到发送缓冲器中准备发送,而从SBUF读出数据时,则数据一定取自接收缓冲器。

(3)定时器寄存器。

芯片中两个16位定时器/计数器T0和T1,各自由两个独立的8位寄存器组成,分别是:TH0、TL0、TH1、TL1。

(4)控制寄存器。

特殊功能寄存器组中还包含有多个控制寄存器IP、IE、TMOD、TCON、SCON和PCON,它们分别用于中断系统、定时器/计数器、串行通信的控制及工作方式控制。

2.3.5  外部RAM

外部数据存储器又称外部RAM,当片内RAM不能满足数量上的要求时,可通过总线端口和其他I/O口扩展外部数据RAM,其最大容量可达64KB,其结构如图2-8(c)所示。外部数据存储器和内部数据存储器的功能基本相同,但前者不能用于堆栈操作。

必须注意,由于数据存储器与程序存储器地址重叠,且数据存储器的片内外的低字节地址重叠,所以对片内、片外数据存储器的操作使用了不同的指令。对片内RAM读/写数据时,无读/写信号(和)产生;对片外RAM读/写数据时,有读/写信号产生。同样,对程序存储器和数据存储器的操作也是靠不同的控制信号、或来区分的。

另外,在片外数据存储器中,数据区和扩展的I/O口是统一编址的,使用的指令也完全相同,因此用户在应用系统设计时,必须合理地进行外部RAM和I/O端口的地址分配,并保证译码的唯一性。