51單片機(jī) RAM 數(shù)據(jù)存儲(chǔ)區(qū)
2.片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)
本文引用地址:http://m.butianyuan.cn/article/201611/318600.htm(1) 工作寄存器區(qū)
工作寄存器區(qū)位于片內(nèi)數(shù)據(jù)存儲(chǔ)器中的00H~1FH單元,共32字節(jié)( 如此說來每個(gè)單元是一個(gè)字節(jié)了 ),分成四組。每組8個(gè)字節(jié),分別記為R0~R7.
編號(hào) | 起終地址 | 寄存器名 | 備注 |
1 | 其占據(jù)的物理地址為00H~07H | 對(duì)應(yīng)于指令中的R0~R7 | 0區(qū)工作寄存器組 |
2 | 其占據(jù)的物理地址為08H~0FH | 對(duì)應(yīng)于指令中的R0~R7 | 1區(qū)工作寄存器組 |
3 | 其占據(jù)的物理地址為10H~17H | 對(duì)應(yīng)于指令中的R0~R7 | 2區(qū)工作寄存器組 |
4 | 其占據(jù)的物理地址為18H~1FH | 對(duì)應(yīng)于指令中的R0~R7 | 3區(qū)工作寄存器組 |
程序默認(rèn)在0區(qū)工作寄存器組存放中間運(yùn)算數(shù)據(jù)。等待中斷來時(shí),中斷數(shù)據(jù)工作寄存器組由0區(qū)切換到其它區(qū)域。
選擇四組工作寄存器區(qū)的哪一組作為R0~R7由位于PSW寄存器的兩位RS1,RS0來確定.
RS1,RS0稱為區(qū)開關(guān)或組開關(guān),兩位就可決定四種狀態(tài).
RS1 | RS0 | 工作寄存器組 |
0 | 0 | 工作寄存器0組 |
0 | 1 | 工作寄存器1組 |
1 | 0 | 工作寄存器2組 |
1 | 1 | 工作寄存器3組 |
(2)位尋址區(qū)
用戶存儲(chǔ)區(qū)位于片內(nèi)數(shù)據(jù)存儲(chǔ)器中的020H~02FH單元,共16個(gè)字節(jié),共128位,每個(gè)字節(jié)單元的位都有一個(gè)單獨(dú)的地址,分別為00H-07H,如020H.1表示020H單元的bit[1]位。020H~02FH單元可作為位尋址區(qū)。這個(gè)范圍內(nèi)的存儲(chǔ)單元最大的用處就是能進(jìn)行位操作,在C語言中,只能用位操作運(yùn)算符(&、|、^、~、<<、>>)來對(duì)字節(jié)數(shù)據(jù)進(jìn)行位操作運(yùn)算。如果用匯編指令就可以直接對(duì)此片存儲(chǔ)單片進(jìn)行位操作。
如 SETB, 020H.1 就將020H的bit[1]置為了1.
除了RAM此片能進(jìn)行位尋址的用戶存儲(chǔ)區(qū)以外,還有一些特殊的功能寄存器( SFR )也能進(jìn)行位尋址。
(3)數(shù)據(jù)緩沖區(qū)
51系列數(shù)據(jù)緩沖區(qū)地址為30H-7FH,共80字節(jié)。只能字節(jié)尋址,不能位尋址。由于工作寄存器和位尋址區(qū),數(shù)據(jù)緩沖區(qū)是統(tǒng)一編址的,所以這三者都可以用作數(shù)據(jù)緩沖區(qū)。
(4)堆,棧
棧:由系統(tǒng)自動(dòng)分配釋放,存局部值。
堆:一般由程序員分配和釋放(在C中用malloc/free操作)。
棧指針SP:8位寄存器,棧最大可達(dá)128單元,只可在片內(nèi)RAM中進(jìn)行棧操作。
棧作用:用來保存地址、數(shù)據(jù)信息、具有先進(jìn)后出特性,也是一種能存放二進(jìn)制數(shù)據(jù)的空間。
MC51棧采用滿頂法向上生成的軟件堆棧。
軟件棧:借助SP進(jìn)行控制操作。
棧向上生長(zhǎng):新壓棧的數(shù)據(jù)成為棧頂。
棧向下生長(zhǎng):新壓入的數(shù)據(jù)遠(yuǎn)離棧頂。
地址大小還得看存儲(chǔ)方式。
(5)專用寄存器區(qū)
專用寄存器區(qū),也稱特殊功能寄存器區(qū) SFR
SPECIAL FUNCTIONREGISTER
尋址地址離散地分布在80H~FFH,共128字節(jié)的空間.而實(shí)際有用的只有21個(gè)字節(jié),即在這一空間里只有18個(gè)專用功能寄存器,其中有3個(gè)專用功能寄存器占用了兩個(gè)字節(jié).SFR主要用于片內(nèi)硬件的管理,通常只能以字節(jié)為單位借助于MOV指令直接尋址,但也有一些專用功能寄存器可以位尋址。
包含程序狀態(tài)字PSW、數(shù)據(jù)指針寄存器DPTR、端口地址P0-P0、其它專用寄存器(累加器A、B)
3.片外數(shù)據(jù)存儲(chǔ)區(qū)
片外RAM區(qū):可尋空間為共64K 0000H~FFFFH,
總是使用MOVX類指令尋址
借助于工作寄存器R0或R1間接尋址時(shí),可尋256字節(jié)
從片外RAM區(qū)取數(shù)據(jù):MOVX A,@Rii=0-1
向片外RAM區(qū)存數(shù)據(jù):MOVX @Ri,A
借助16位的數(shù)據(jù)指針DPTR間接尋址,可尋64K字節(jié):
從片外RAM區(qū)取數(shù)據(jù):MOVX A,@DPTR
向片外RAM區(qū)存數(shù)據(jù):MOVX @DPTR,A
<此段摘抄,防后會(huì)使用>
區(qū)分是訪問內(nèi)部存儲(chǔ)器還是外部存儲(chǔ)器地址靠指令來區(qū)分。
這里,片內(nèi)的存儲(chǔ)區(qū)即常念叨的“寄存器”,片外的ram存儲(chǔ)區(qū)即指“系統(tǒng)內(nèi)存”。
Note Over。
評(píng)論