㈠ 單片機堆棧是怎麼運算
51單片機堆棧是在片內RAM區實現的能先進後出的一個存儲區域,由SP寄存器實現數據的入棧和出棧,當有數據入棧時,比如PUSH
ACC,此時SP先加一,然後把ACC中的內容存到SP所指向的內存單元中。出棧時,比如POP
ACC,此時先把SP所指向的內存單元(棧頂單元)內容送到ACC中,然後SP減一
㈡ 51單片機堆棧是什麼意思可以對哪些單元堆棧
堆棧的功能就是先進後出,這樣可以非常簡單的解決子程序調用和中斷(其實是特殊的子程序調用)問題,主要是嵌套的返回,用堆棧能准確的找到返回點。51單片機的堆棧是向上生長的,其實可以利用片內RAM中沒用到的一切空間(當然得是連續的),復位後堆棧指針指向07H,一般從30H開始使用,就是復位後將堆棧指針指向30H,一定要弄清楚中斷還有子程序調用時單片機是怎麼壓棧,返回時是怎麼出棧的,利用堆棧可以讓中斷返回時返回到指定的地方,這招很絕。
㈢ 單片機堆棧問題
堆棧的壓棧動作地址是遞減的;出棧動作地址是增加的。sp是棧頂指針,經過壓棧動作後的值要比70H小。具體的數值得看單片機的位數——32 bit/16 bit/8 bit
㈣ 單片機的堆棧是怎樣工作的
單片機中的堆棧是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單片機堆棧進棧和出棧操作規則
1.堆棧用於響應中斷或調用子程序時保護斷點地址,也可通過棧操作指令(push
和pop保護和恢復現場)其中入棧時先SP+1再將內容壓入當前SP所指示的堆棧單元
中,出棧則先將SP所指示的內部ram單元中內容送入直接地址定址的單元中,再將
SP減1.
2.中斷允許寄存器的功能是控制CPU對中斷的開放和屏蔽以及每個中斷源是否允許
中斷結構包括EA(CPU中斷總允許位),ES(串列口中斷允許位)ET1(定時器1中
斷允許位)EX1(外部中斷1中斷允許位)ET0(定時器0中斷允許位)EX0(外部中
斷0中斷允許位)
3.T機=12/fosc=12/(6*E6)=2us
X=2*E13-T/T機=8192-200/2=8092=1F9CH=1111
1100
1110
0B
因為TL1的高3位未用,
修正後X=1111
1100
0001
1100B=FC1CH
4.LJMP為長轉移指令,可轉向64KB程序存儲器的任一單元;SJMP為相對轉移指令
,偏移范圍-128~+127共259位元組;AJMP為絕對轉移指令,轉移目的在指令後一個
存儲單位所在2K區間內。
5.按鍵抖動:在觸點抖動期間檢測按鍵的通與斷狀態,可能導致判斷出錯,即按
鍵一次按下或釋放被錯誤認為是多次操作。
6.汽車的溫控系統,測控系統,防盜報警等多項系統中應用單片機。汽車電子中
涉及A/D和D/A轉換的模塊基本都會有單片機的存在。以下以汽車倒車雷達為例,
雷達控制部分由89C51單片機構成,前端數據採集由超聲波測距,系統由發射和接
收裝置來獲取數據,根據所測得的距離來判斷是否調用聲音報警程序,距離小於
預置點時,調用報警模塊。
㈥ 單片機中那部分是堆棧結構
答:
堆棧是在單片機片內的數據存儲器里開辟的一段存儲空間,要明白哪部分是堆棧結構,就要搞清楚單片機的數據存儲器。
51單片機片內有256位元組的數據存儲器空間。00H-20H是工作寄存器空間,20H-30H是位定址區,30H-80H是數據存儲區,這段空間可以設置堆棧,80H-FFH是特殊功能存儲器空間。所以屬於堆棧的空間為30H-80H。但在實際中這段空間還要存放數據,所以,要合理安排。
堆棧使用是要先設置初始地址,用SP
設置,PUSH指令用來把數據推入堆棧,POP從堆棧取出數據。採用「後進先出」原則,每壓進一個數據,SP指針加一。
㈦ 單片機數據堆棧的特點是什麼
單片機數據堆棧的特點是先入後出,後入先出。可以理解為一個餅干筒,先存入的數據在下層,後存入的數據在上層,要取數據,得從上層開始先取。
堆棧指針在寄存器SP中,默認情況下為SP=07H,可以通過MOV指令改變堆棧指針的地址。
㈧ 在單片機中什麼是堆棧它的作用是什麼
在單片機應用中,堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。在計算機領域,堆棧是一個不容忽視的概念,堆棧是一種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂(top))對數據項進行插入和刪除。
堆棧是一個特定的存儲區或寄存器,它的一端是固定的,另一端是浮動的。對這個存儲區存入的數據,是一種特殊的數據結構。所有的數據存入或取出,只能在浮動的一端(稱棧頂)進行,嚴格按照「先進後出」的原則存取,位於其中間的元素,必須在其棧上部(後進棧者)諸元素逐個移出後才能取出。在內存儲器(隨機存儲器)中開辟一個區域作為堆棧,叫軟體堆棧;用寄存器構成的堆棧,叫硬體堆棧。
(8)單片機堆棧擴展閱讀:
棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據在多個線程或者多個棧之間是不可以共享的,但是在棧內部多個值相等的變數是可以指向一個地址的,詳見第3點。堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。
㈨ 單片機編程裡面,堆棧怎麼理解
堆棧是一個區域,是用來存放數據的,這個區域本身沒有任何特殊之處,就是內部RAM的一部份,特殊的是它存放和取用數據的方式,即所謂的『先進後出,後進先出』,並且堆棧有特殊的數據傳輸指令,即『PUSH』和『POP』,有一個特殊的專為其服務的單元,即堆棧指針SP,每當執一次PUSH指令時,SP就(在原來值的基礎上)自動加1,每當執行一次POP指令,SP就(在原來值的基礎上)自動減1。由於SP中的值可以用指令加以改變,所以只要在程序開始階段更改了SP的值,就可以把堆棧設置在規定的內存單元中,如在程序開始時,用一條MOV SP,#5FH指令,就時把堆棧設置在從內存單元60H開始的單元中。一般程序的開頭總有這么一條設置堆棧指針的指令,因為開機時,SP的初始值為07H,這樣就使堆棧從08H單元開始往後,而08H到1FH這個區域正是8031的第二、三、四工作寄存器區,經常要被使用,這會造成數據的混亂。不同作者編寫程序時,初始化堆棧指令也不完全相同,這是作者的習慣問題。當設置好堆棧區後,並不意味著該區域成為一種專用內存,它還是可以象普通內存區域一樣使用,只是一般情況下編程者不會把它當成普通內存用了。
參考資料來源:吳鑒鷹吧
貢獻文檔:網路文庫《吳鑒鷹單片機項目實戰精講》
單片機開發板學習參考:吳鑒鷹單片機開發板(視頻教程詳細,資源豐富,適合學習)
㈩ 8051單片機堆棧設置在什麼地方,如何實現
8051單片機在復位後,堆棧的底部就在07H,壓棧時,將向08H方向增長。
如果需要改變默認值,可以在初始化階段使用如下指令:
MOV
SP,
#6FH
即可將堆棧的底部設置在6FH。