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

2.3 存 储 器

 

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

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

c)外部数据存储器空间

b)内部数据存储器RAM

a)程序存储器空间

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

2.3.1  程序存储器

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

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

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

·    0003H外部中断INT0入口。

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

·    0013H外部中断INTl入口。

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

·    0023H串行口中断入口。

2.3.2 内部数据存储器

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

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

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

20H2FH16个单元为位寻址区,30H7FH为通用用户RAM区,主要用于存放用户程序的中间数据。

2.3.3  位存储器

如表2-2所示,20H2FH16个单元为位寻址区,每个单元8位,共128位,其位地址范围为00H7FH。位寻址区的每一位都可当作软件触发器,由程序直接进行位处理。程序中通常把各种程序状态标志、位控制变量设在位寻址区。同样,位寻址区的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个字节(80HFFH)为特殊功能寄存器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可见,在特殊功能寄存器中也有字节地址和位地址这套地址。它们在地址空间上都是80HFFH,但对字节地址而言只有21个有效,对位地址只有83个是有效的(凡字节地址可被8整除的SFR可位寻址)。

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

·    CPUACCBPSWSPDPTR(由DPHDPL组成)、PCON

·    并行口:P0P1P2P3

·    中断系统:IEIP

·    定时器/计数器:TMODTCONT0(由TH0TL0组成)、T1(由THlTLl组成)。

·    串行口:SCONSBUF

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

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

1I/O端口P0P3

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

2)串行口数据缓冲器SBUF

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

3)定时器寄存器。

芯片中两个16位定时器/计数器T0T1,各自由两个独立的8位寄存器组成,分别是:TH0TL0TH1TL1

4)控制寄存器。

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

2.3.5  外部RAM

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

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

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