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个地址单元
七个具有特殊含义的单元是:
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位,即专用寄存器区。
上一篇:AT89S51的由来及与C51的区别
下一篇:简易C51下载器
推荐阅读最新更新时间:2024-03-16 15:11
设计资源 培训 开发板 精华推荐
- STM32中assert_param的分析(转)
- Omdia:面板价明年Q1跌到谷底 世界杯影响Q2供需反转
- STM32 stdint.h简略翻译
- 莱宝高科:公司是华为MateBook E笔记本电脑用触摸屏供应商
- STM32f10x.h中出现“#ifdef __cplusplus extern "C" { #endif”的定义
- 51单片机+74HC138驱动16*96点阵显示汉字的Proteus仿真+源代码
- 雷诺改装ZOE Cab原型车 公开测试自动驾驶按需出行服务
- 车企盯上了5G,热浪背后的原因是什么?
- 技术文章—模拟电路正确的时序
- Commvault 任命Mercer Rowe 担任全球渠道与联盟合作伙伴负责人