Ⅰ 8051單片機堆棧設置在什麼地方,如何實現
8051單片機在復位後,堆棧的底部就在07H,壓棧時,將向08H方向增長。
如果需要改變默認值,可以在初始化階段使用如下指令:
MOV SP, #6FH即可將堆棧的底部設置在6FH。
(1)單片機中的堆棧擴展閱讀:
基本結構:
51 單片機最初是由Intel 公司開發設計的,但後來Intel 公司把51 核的設計方案賣給了幾家大的電子設計生產商,譬如 SST、Philip、Atmel 等大公司。
如是市面上出現了各式各樣的但均以51 為內核的單片機,倒是Intel 公司自己的單片機卻顯得遜色了。這些各大電子生產商推出的單片機都兼容51 指令、並在51 的基礎上擴展一些功能而內部結構是與51 一致的。
一個完整的計算機應該由運算器、控制器、存儲器(ROM 及RAM)、數據匯流排和I/O 介面組成。一般微處理器(如8086)就只包括運算器和控制器兩部分。
和一般微處理器相比,8051 增加了四個8 位I/O 口、一個串列口、4KB ROM、128BRAM、很多工作寄存器及特殊功能寄存器(SFR),所以單片機具有比微處理器更強大的控制功能,單片機是專為進行控制設計的,而常見的微處理器是用於運算功能的。
Ⅱ 單片機中堆棧指令是什麼定址方式
寄存器間接定址范圍總結:
1、外部RAM 64KB。對外部RAM64KB的間接定址,應使用@DPTR作間址定址寄存器,其形式為:@DPTR。
例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的單元的內容送入累加器A中。
外部RAM的低256單元是一個特殊的定址區,除可以用DPTR作間址寄存器定址外,還可以用R0或R1作間址寄存器定址。
例如MOVX A,@R0;這條指令的意思是,把R0指定的外部RAM單元的內容送入累加器A。
2、堆棧操作指令(PUSH和POP)也應算作是寄存器間接定址,即以堆棧指針SP作間址寄存器的間接定址方式。
3、內部RAM低128單元。對內部RAM低128單元的間接定址,應使用R0或R1作間址寄存器,其通用形式為@Ri(i=0或1)。
4、內部RAM的高128單元也可以訪問。但是注意不能用間接定址的方式去訪問特殊功能寄存器,雖然SFR與內部高128位元組RAM地址相同,但是當一個指令訪問高於7HF的內部位置時,CPU是根據定址方式來區分是訪問高128位元組的內部RAM數據還是訪問SFR.
Ⅲ 單片機的堆棧是怎樣工作的
單片機中的堆棧是1個連續的存儲區,採取後入先出的方式存取數據。1般PUSH操作是向堆棧中存入數據,POP操作從堆棧取得數據。PUSH的操作順序和POP的操作順序正好相反,例如有A.B.C.D4個變數的值,依照PUSH
A,PUSH
B,PUSH
C和PUSH
D存入堆棧,則需要用POP
D,
POP
C,
POP
B,POP
A的順序提取。如果ABCD的類型字長1致,則堆棧還可用來交換變數的值,例如PUSH
A,PUSH
B,然後用POP
A,
POP
B來實現A和B兩個變數值的互換。但這樣的操作不是所有單片機都支持。
Ⅳ 單片機中那部分是堆棧結構
答:
堆棧是在單片機片內的數據存儲器里開辟的一段存儲空間,要明白哪部分是堆棧結構,就要搞清楚單片機的數據存儲器。
51單片機片內有256位元組的數據存儲器空間。00H-20H是工作寄存器空間,20H-30H是位定址區,30H-80H是數據存儲區,這段空間可以設置堆棧,80H-FFH是特殊功能存儲器空間。所以屬於堆棧的空間為30H-80H。但在實際中這段空間還要存放數據,所以,要合理安排。
堆棧使用是要先設置初始地址,用SP
設置,PUSH指令用來把數據推入堆棧,POP從堆棧取出數據。採用「後進先出」原則,每壓進一個數據,SP指針加一。
Ⅳ 單片機編程裡面,堆棧怎麼理解
堆棧是一個區域,是用來存放數據的,這個區域本身沒有任何特殊之處,就是內部RAM的一部份,特殊的是它存放和取用數據的方式,即所謂的『先進後出,後進先出』,並且堆棧有特殊的數據傳輸指令,即『PUSH』和『POP』,有一個特殊的專為其服務的單元,即堆棧指針SP,每當執一次PUSH指令時,SP就(在原來值的基礎上)自動加1,每當執行一次POP指令,SP就(在原來值的基礎上)自動減1。由於SP中的值可以用指令加以改變,所以只要在程序開始階段更改了SP的值,就可以把堆棧設置在規定的內存單元中,如在程序開始時,用一條MOV SP,#5FH指令,就時把堆棧設置在從內存單元60H開始的單元中。一般程序的開頭總有這么一條設置堆棧指針的指令,因為開機時,SP的初始值為07H,這樣就使堆棧從08H單元開始往後,而08H到1FH這個區域正是8031的第二、三、四工作寄存器區,經常要被使用,這會造成數據的混亂。不同作者編寫程序時,初始化堆棧指令也不完全相同,這是作者的習慣問題。當設置好堆棧區後,並不意味著該區域成為一種專用內存,它還是可以象普通內存區域一樣使用,只是一般情況下編程者不會把它當成普通內存用了。
參考資料來源:吳鑒鷹吧
貢獻文檔:網路文庫《吳鑒鷹單片機項目實戰精講》
單片機開發板學習參考:吳鑒鷹單片機開發板(視頻教程詳細,資源豐富,適合學習)
Ⅵ 單片機中堆棧有什麼用
1、堆棧空間分配
棧(操作系統):由操作系統自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。
堆(操作系統): 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似於鏈表。
2、堆棧緩存方式
棧使用的是一級緩存, 他們通常都是被調用時處於存儲空間中,調用完畢立即釋放。
堆則是存放在二級緩存中,生命周期由虛擬機的垃圾回收侍燃演算法來決定(並不是一旦成為孤兒對象就能被回收)。所以調用這些對象的速度要相對來得低一些。
3、效率比較
棧由系統自動分配,速度較快。但程序員是無法控制的。
堆是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便。
4、存儲內容
棧: 在函數調用時,在大多數的C編譯器中,參數是由右往左入棧的,然後是函數中的局部變數。注意靜態變數是不入棧的。
當本次函數調用結束後,局部變數先出棧,然後是參數,最後棧頂指針指向函數的返回地址,也就是主函數中的下一條指令的地址,程序由該點繼續運行。
堆:一般是在堆的頭部用一個老凱虛位元組存放堆的大小。堆中的具體內容由程序員安排。
(6)單片機中的堆棧擴展閱讀:
簡介
單片機應用中,堆棧是個特殊存儲區,堆棧屬於RAM空間的一部分,堆棧用於函數調用、中斷切換時保存和恢復現場數據。
堆棧中的物體具有一個特性:第一個放入堆棧中的物體總是被最後拿出來, 這個特性通常稱為先進後出 (FILO—First-In/Last-Out)。 堆棧中定義了一些操作, 兩個最重要的是PUSH和POP。 PUSH(入棧)操作:堆棧指針(SP)加1,然後在堆棧的頂部加入一 個元素。
POP(出棧)操作相反,出棧則先將SP所指示的內部ram單元中內容送入直接地址定址的單元中(目的位置),然後再孫春將堆棧指針(SP)減1.。這兩種操作實現了數據項的插入和刪除。
Ⅶ 單片機裡面堆棧的功能是什麼
堆棧是存儲器中的特殊群體。在內RAM中專門辟出一個連續存儲區,用來碧戚暫時存放子程序斷口地址、中檔圓斷斷口地址和其他需要保存的數據。
堆棧操作無論是存入或取出數據,均只能依次存人或依次取出,行慧塌不能越位,必須遵循「先進後出"、「後進先出」的原則。
堆棧指針SP指出棧頂存儲單元的地址。
Ⅷ 在單片機中什麼是堆棧它的作用是什麼
在單片機應用中,堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。在計算機領域,堆棧是一個不容忽視的概念,堆棧是一種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂(top))對數據項進行插入和刪除。
堆棧是一個特定的存儲區或寄存器,它的一端是固定的,另一端是浮動的。對這個存儲區存入的數據,是一種特殊的數據結構。所有的數據存入或取出,只能在浮動的一端(稱棧頂)進行,嚴格按照「先進後出」的原則存取,位於其中間的元素,必須在其棧上部(後進棧者)諸元素逐個移出後才能取出。在內存儲器(隨機存儲器)中開辟一個區域作為堆棧,叫軟體堆棧;用寄存器構成的堆棧,叫硬體堆棧。
(8)單片機中的堆棧擴展閱讀:
棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據在多個線程或者多個棧之間是不可以共享的,但是在棧內部多個值相等的變數是可以指向一個地址的,詳見第3點。堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。