51單片機 RAM 數據存儲區
2.片內數據存儲區
本文引用地址:http://www.104case.com/article/201611/318600.htm(1) 工作寄存器區
工作寄存器區位于片內數據存儲器中的00H~1FH單元,共32字節( 如此說來每個單元是一個字節了 ),分成四組。每組8個字節,分別記為R0~R7.
編號 | 起終地址 | 寄存器名 | 備注 |
1 | 其占據的物理地址為00H~07H | 對應于指令中的R0~R7 | 0區工作寄存器組 |
2 | 其占據的物理地址為08H~0FH | 對應于指令中的R0~R7 | 1區工作寄存器組 |
3 | 其占據的物理地址為10H~17H | 對應于指令中的R0~R7 | 2區工作寄存器組 |
4 | 其占據的物理地址為18H~1FH | 對應于指令中的R0~R7 | 3區工作寄存器組 |
程序默認在0區工作寄存器組存放中間運算數據。等待中斷來時,中斷數據工作寄存器組由0區切換到其它區域。
選擇四組工作寄存器區的哪一組作為R0~R7由位于PSW寄存器的兩位RS1,RS0來確定.
RS1,RS0稱為區開關或組開關,兩位就可決定四種狀態.
RS1 | RS0 | 工作寄存器組 |
0 | 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,@Rii=0-1
向片外RAM區存數據:MOVX @Ri,A
借助16位的數據指針DPTR間接尋址,可尋64K字節:
從片外RAM區取數據:MOVX A,@DPTR
向片外RAM區存數據:MOVX @DPTR,A
<此段摘抄,防后會使用>
區分是訪問內部存儲器還是外部存儲器地址靠指令來區分。
這里,片內的存儲區即常念叨的“寄存器”,片外的ram存儲區即指“系統內存”。
Note Over。
評論