MCS51存储器访问相关
51的程序存储空间寻址地址长度有16位,可寻址64KB大小的OTP ROM或FLASH空间,其中这16位的地址线,有8位的地址线可用于内部ROM的扩展,所以内部ROM最大的寻址空间为4KB。或者16位的地址空间全部用于片外扩展,这取决于EA脚置1或置0,当EA脚置1是程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间,当EA脚置0时程序直接从外部存储器开始执行,例如前面提到的片内无ROM的8031单片机,在实际应用中就要把8031的引脚接为低电平。其中该程序地址空间有七个地址单元用于中断向量:如下:每个向量包含8个地址单元
本文引用地址://m.amcfsurvey.com/article/201611/315543.htm七个具有特殊含义的单元是:
0000H —— 系统复位,PC指向此处;
0003H —— 外部中断0入口
000BH —— T0溢出中断入口
0013H —— 外中断1入口
001BH —— T1溢出中断入口
0023H —— 串口中断入口
002BH —— T2溢出中断入口
数据存储空间:
数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),片外最多可扩展64KB的RAM,构成两个地址空间,访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令。它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:
数据存储器空间(低128单元);
特殊功能寄存器SFR空间(高128单元), 而与SFR重合的DATA空间因为只能做成间接寻址(indirect),所以叫iDATA空间;
这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:
低128单元:
片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。
< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />
从上图中我们可以看到,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组工作寄存器。
组< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
|
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位,即专用寄存器区。
评论