⑴ 單片機的堆棧是真么回事
在調用程序或發生中斷時,必須把中斷之前的一些狀態信息,和程序指針等數據暫時存放在一個地方,等中斷程序執行完後,再恢復之前的狀態.而存放這些狀態的寄存器空間,就叫堆棧
這有點像你的書桌一樣,當你要上WC的時候,你會把你手上的書和筆放在書桌上,回來後,再從書桌上拿起這些.....
比如很不恰當,^_^
⑵ 單片機堆棧出棧問題
你的理解是正確的,以51為例:需要保存的參數累加器A和狀態字PSW,在程序產生中斷的時候,堆棧的做法是:
MOV SP,#60H
PUSH ACC
PUSH PSW
.......
...
POP PSW
POP ACC
這種做法很方便
最好還是不要用工作寄存器做,原因:R0~R7在程序中有他自己的用處,重復使用會丟失數據,如果說51有4組工作寄存器可用,那麼就要面臨選體的問題,這樣就會很麻煩。
事實上,堆棧的設計是單片機硬體設計的一個理念,那就是盡可能的把數據按類別分開處理,就是讓堆棧里的數據區別於RAM里的數據,說到底,工作寄存器也是存儲數據的,本質上是一樣的,但在設計單片機的時候盡可能地分開,這樣可以使得單片機的功能更加強大,執行效率更高
51單片機的工作寄存器是在人啊摹RAM中統一編址的,那麼還有的單片機的工作寄存器是獨立出來的,也就是為了達到這個目的!
總之,既然有了 堆棧操作這匹「好馬」,就沒必要用別的 「破鞍」了!!
⑶ 在單片機中進出棧SP中的內容發生變化,PC中內容變化嗎
單片機是不停地在執行指令,而執行指令就需要從ROM中取出指令,PC就是用來控製取指令的地址的,因此,PC中的地址即內容是不停地變化的。再說進出棧操作,SP中的內容變化,可不管是怎麼進出棧操作,如ACALL,LCALL,RET,RETI,POP,PUSH等操作,都是在執行指令,而且執行指令後還要轉移到指定的地址處,因此,PC中的內容肯定是變化的。
⑷ 單片機進出棧問題
這個題重點不在60H是什麼數,因為60H是隨機數。而且它也不是我們關心的數,
這個題主要考入棧出棧的順序,出棧後A=02H,B=01H,實現了一個數據交換。
⑸ 簡述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單片機構成,前端數據採集由超聲波測距,系統由發射和接
收裝置來獲取數據,根據所測得的距離來判斷是否調用聲音報警程序,距離小於
預置點時,調用報警模塊。
⑹ 80C51 單片機堆棧區的進棧和出棧遵循的原則是
80C51 單片機堆棧區的進棧和出棧遵循的原則是後進先出。
⑺ 單片機出棧 入棧的對象只能是什麼
單片機出棧 入棧的對象只能可直接定址的內部存儲器和除了R寄存器以外的寄存器。
POP 30H
POP B
POP 80H;實際是彈出到P0
以上都是正確的。
POP R1
這就是錯誤的。
⑻ 51單片機兩次進棧再兩次出棧會實現什麼功能
摘要 2.堆棧的方式
⑼ 單片機程序中什麼情況需要關中斷壓棧和出棧就不要說了!
在處理重要的數據和程序時,不能被打斷的時候 會把中斷關了,比如系統初始化的時候會把所以可屏蔽中斷都關掉,但是一般都把很重要的程序放在優先順序高的中斷中處理。
⑽ 51單片機進棧和出棧地址修改的方向
修改SP寄存器的值,就可以修改進棧出棧的地址。