51微控制器 RAM 資料儲存區

2021-06-21 11:31:45 字數 3047 閱讀 2307

ram

程式執行中存放隨機變數的資料空間。在

keil

中編寫程式,如果當前模式為small模式,如果總的變數大小未超過128b

,則未初始化的變數的初值預設為

0.如果所有的變數超過微控制器small模式下的128b

大小,則必須對變數進行初始化,否則超過

ram大小變數的值是不確定的,在small模式下超過128b

大小的變數也必須在編譯器中重新設定儲存器的儲存模式。 在

keil

中,可選擇

small

,compact

,large

三種方式儲存資料變數:

模式 描述 small 

所有預設變數均裝入內部

128b 

(0xfh

)ram

中。訪問速度快,但空間有限,堆疊空間分配少。

compact 

將所有預設變數均存入微控制器內部

256b (0x

1fh ) ram

中,空間不得超過

256b

,若微控制器

ram為

128b

的,若存資料超過

128b

則會出錯,訪問速度介於

small

和large

之間。跟使用關鍵字

pdata

定義變數相同。

large 

所有預設變數可放在多大

64kb( 0x

ffffh )

的ram

區,包含內、外

ram。更使用關鍵字

xdata

定義變數效果相同。儲存空間大,訪問速度慢。

在keil

中可以用「

target options

」來配置這一項:

圖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組 

使用者儲存區位於片內資料儲存器中的020h~02fh單元,共16個位元組,共128位,每個位元組單元的位都有乙個單獨的位址,分別為00h-07h,如020h.1表示020h單元的bit[1]位。020h~02fh單元可作為位定址區。這個範圍內的儲存單元最大的用處就是能進行位操作,在c語言中,只能用位操作運算子(&、|、^、~、<>)來對位元組資料進行位操作運算。如果用彙編指令就可以直接對此片儲存單片進行位操作。

如 setb, 020h.1 就將020h的bit[1]置為了1.

除了ram此片能進行位定址的使用者儲存區以外,還有一些特殊的功能暫存器( sfr )也能進行位定址。

51系列資料緩衝區位址為30h-7fh,共80位元組。只能位元組定址,不能位定址。由於工作暫存器和位定址區,資料緩衝區是統一編址的,所以這三者都可以用作資料緩衝區。

棧:由系統自動分配釋放,存區域性值。

堆:一般由程式設計師分配和釋放(在c中用malloc/free操作)。

棧指標sp:8位暫存器,棧最大可達128單元,只可在片內ram中進行棧操作。

棧作用:用來儲存位址、資料資訊、具有先進後出特性,也是一種能存放二進位制資料的空間。

mc51棧採用滿頂法向上生成的軟體堆疊。

軟體棧:借助sp進行控制操作。

棧向上生長:新壓棧的資料成為棧頂。

棧向下生長:新壓入的資料遠離棧頂。

位址大小還得看儲存方式。

專用暫存器區,也稱特殊功能暫存器區 sfr

special functionregister 

定址位址離散地分布在80h~ffh,共128位元組的空間.而實際有用的只有21個位元組,即在這一空間裡只有18個專用功能暫存器,其中有3個專用功能暫存器占用了兩個位元組.sfr主要用於片內硬體的管理,通常只能以位元組為單位借助於mov指令直接定址,但也有一些專用功能暫存器可以位定址。

包含程式狀態字psw、資料指標暫存器dptr、埠位址p0-p0、其它專用暫存器(累加器a、b)

片外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儲存區即指「系統記憶體」。

51之51微控制器RAM資料儲存區學習筆記

51之51微控制器ram資料儲存區學習筆記 keilc語言程式設計 ram是程式執行中存放隨機變數的資料空間。在keil中編寫程式,如果當前模式為small模式,如果總的變數大小未超過128b,則未初始化的變數的初值預設為0.如果所有的變數超過微控制器small模式下的128b大小,則必須對變數進行...

51微控制器資料區詳解

從資料儲存型別來說,8051系列有片內 片外程式儲存器,片內程式儲存器還分直接定址區和間接定址型別,以及根據51系列特點而設定的pdata型別。使用不同的儲存器,將使程式的執行效率不同,在編寫c51程式時,最好指定變數的儲存型別,這樣將有利於提高程式執行效率。與ansi c稍有不同,它只分samll...

51微控制器 儲存

8051是傳統的8位微控制器,一般為256b 資料儲存器ram,4k程式儲存器rom 8052有384bytes的ram,8k的rom 在51系列中可定義的資料型別有data,idata,xdata,pdata,bdata data 指晶元核心中位址0x00 0x7f的128個位元組ram區域和4個...