×
单片机 > 单片机程序设计 > 详情

51单片机 RAM 数据存储区

发布时间:2020-08-25 发布时间:
|
1.RAM keil C语言编程

2.片内数据存储区

(1) 工作寄存器区

工作寄存器区位于片内数据存储器中的00H~1FH单元,共32字节( 如此说来每个单元是一个字节了 ),分成四组。每组8个字节,分别记为R0~R7.              

编号  起终地址  寄存器名   备注 
其占据的物理地址为00H~07H    对应于指令中的R0~R7  0区工作寄存器组 
其占据的物理地址为08H~0FH   对应于指令中的R0~R7   1区工作寄存器组 
其占据的物理地址为10H~17H   对应于指令中的R0~R7  2区工作寄存器组 
其占据的物理地址为18H~1FH    对应于指令中的R0~R7   3区工作寄存器组 

 

程序默认在0区工作寄存器组存放中间运算数据。等待中断来时,中断数据工作寄存器组由0区切换到其它区域。

 

选择四组工作寄存器区的哪一组作为R0~R7由位于PSW寄存器的两位RS1,RS0来确定.

RS1,RS0称为区开关或组开关,两位就可决定四种状态.          

RS1   RS0  工作寄存器组 
0   工作寄存器0组 
0   1    工作寄存器1组 
1  

0

工作寄存器2组 
1    1  工作寄存器3组 

 

 

(2)位寻址区

用户存储区位于片内数据存储器中的020H~02FH单元,共16个字节,共128位,每个字节单元的位都有一个单独的地址,分别为00H-07H,如020H.1表示020H单元的bit[1]位。020H~02FH单元可作为位寻址区。这个范围内的存储单元最大的用处就是能进行位操作,在C语言中,只能用位操作运算符(&、|、^、~、<>)来对字节数据进行位操作运算。如果用汇编指令就可以直接对此片存储单片进行位操作。

如 SETB, 020H.1 就将020H的bit[1]置为了1.

 

除了RAM此片能进行位寻址的用户存储区以外,还有一些特殊的功能寄存器( SFR )也能进行位寻址。

 

(3)数据缓冲区

51系列数据缓冲区地址为30H-7FH,共80字节。只能字节寻址,不能位寻址。由于工作寄存器和位寻址区,数据缓冲区是统一编址的,所以这三者都可以用作数据缓冲区。

 

(4)堆,栈

栈:由系统自动分配释放,存局部值。

堆:一般由程序员分配和释放(在C中用malloc/free操作)。

栈指针SP:8位寄存器,栈最大可达128单元,只可在片内RAM中进行栈操作。

栈作用:用来保存地址、数据信息、具有先进后出特性,也是一种能存放二进制数据的空间。

 

MC51栈采用满顶法向上生成的软件堆栈。

软件栈:借助SP进行控制操作。

栈向上生长:新压栈的数据成为栈顶。

栈向下生长:新压入的数据远离栈顶。

地址大小还得看存储方式。

 

(5)专用寄存器区

专用寄存器区,也称特殊功能寄存器区 SFR

                    SPECIAL FUNCTIONREGISTER 

寻址地址离散地分布在80H~FFH,共128字节的空间.而实际有用的只有21个字节,即在这一空间里只有18个专用功能寄存器,其中有3个专用功能寄存器占用了两个字节.SFR主要用于片内硬件的管理,通常只能以字节为单位借助于MOV指令直接寻址,但也有一些专用功能寄存器可以位寻址。

包含程序状态字PSW、数据指针寄存器DPTR、端口地址P0-P0、其它专用寄存器(累加器A、B)

 

3.片外数据存储区

片外RAM区:可寻空间为共64K   0000H~FFFFH,

总是使用MOVX类指令寻址

借助于工作寄存器R0或R1间接寻址时,可寻256字节

从片外RAM区取数据:  MOVX  A,@Ri   i=0-1

向片外RAM区存数据:  MOVX  @Ri,A

 

借助16位的数据指针DPTR间接寻址,可寻64K字节:

从片外RAM区取数据:  MOVX  A,@DPTR

向片外RAM区存数据:  MOVX  @DPTR,A

 

区分是访问内部存储器还是外部存储器地址靠指令来区分。

这里,片内的存储区即常念叨的“寄存器”,片外的ram存储区即指“系统内存”。

 

Note Over。

关键字:51单片机  RAM  数据存储区 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法