❶ 為什麼mcs51單片機復位後,sp的初值是07H而不是81H
sp這個寄存器裡面存的是07H。
RAM初始化前七個被用作為R1-R7
堆棧指針只能在07H上。
07H也是地址。
你說的81H是特殊寄存器sp的地址。
也就是說地址81H裡面的值是07H。
特別要注意的是片內RAM高128位元組區和特殊寄存器SFR的
地址是相同的。間接定址存取片內ram數據。直接定址存取SFR。
概括就是,這兩塊地址獨立的,你說的兩個數都是不同塊的地址。
❷ 單片機的堆棧指針SP有什麼作用
在51單片機中,SP棧指針是一個專用的8位寄存器,系統復位後,SP初始化為07H,使得堆棧指針實際上是由08H單元開始。
在響應中斷或子程序調用時,發生入棧操作,入棧的是16位PC值;51中有PUSH壓入和POP彈出棧操作指令,如有必要,在中斷或調用子程序時可用POSU指令把PSW或其它需要保護的寄存器的內容壓入堆棧加以保護;返回前再使用POP指令把它們恢復。
❸ MCS-51單片機匯編語言的SP指令有什麼作用
MCS-51單片機匯編語言中,沒有SP這條指令,只有針對SP操作的指令。51單片機中SP是堆棧指針寄存器,存放著當前堆棧地址。堆棧用於存儲子程序調用、中斷程序調用時程序返回的地址,或者用來臨時保存某一寄存器的值。
除了初始化堆棧時直接給SP賦值,SP顯式存在,其它的對SP有影響的指令,對SP的操作都是隱式的,就是說SP並不出現在指令操作數當中。
例如:
MOV SP,#80H ;初始堆棧指針,(SP)=80H
LCALL XXXX;調用XXXX處的子程序,下一條指令PC值壓棧,(SP)=(SP)+2
NOP;子程序返回時,RET指令從堆棧中彈出PC值,所以會返回到這里,(SP)=(SP)-2
PUSH ACC;累加器A的內容壓棧保存,(SP)=(SP)+1
POP B;堆棧內保存的累加器A的內容彈出到B寄存器中,(SP)=(SP)-1
使用PUSH、POP指令使用堆棧,要注意進出棧的匹配,否則將引起不可預期的後果。
❹ 什麼是堆棧,51單片機堆棧指針SP的使用舉例
MCS-51單片機匯編語言中,沒有SP這條指令,只有針對SP操作的指令。51單片機中SP是堆棧指針寄存器,存放著當前堆棧地址。堆棧用於存儲子程序調用、中斷程序調用時程序返回的地址,或者用來臨時保存某一寄存器的值。
除了初始化堆棧時直接給SP賦值,SP顯式存在,其它的對SP有影響的指令,對SP的操作都是隱式的,就是說SP並不出現在指令操作數當中。
例如:
MOV SP,#80H ;初始堆棧指針,(SP)=80H
LCALL XXXX;調用XXXX處的子程序,下一條指令PC值壓棧,(SP)=(SP)+2
NOP;子程序返回時,RET指令從堆棧中彈出PC值,所以會返回到這里,(SP)=(SP)-2
PUSH ACC;累加器A的內容壓棧保存,(SP)=(SP)+1
POP B;堆棧內保存的累加器A的內容彈出到B寄存器中,(SP)=(SP)-1
使用PUSH、POP指令使用堆棧,要注意進出棧的匹配,否則將引起不可預期的後果。
另外
如果把30H賦給了SP,稱為設置棧底。以後:
PUSH ACC ,就把ACC的內容存放到31H單元;
PUSH PSW ,就把PSW的內容存放到32H單元;
PUSH B ,就把B的內容存放到33H單元。
……
彈出時,要用POP指令。
利用堆棧,就不用管具體的內容存放在什麼單元了,SP會自動管理。
❺ 單片機中的SP設置問題
如果是51單片機的話上電後SP默認的是07h,寄存器組默認的是第一組就是00h-07h這8個單元,寫程序的時候將自定義變數區設定在堆棧深度以外就可以了。
一般是將4個寄存器組單元地址預留出來。
❻ 51單片機中的SP是一個單獨的寄存器還是屬於RAM的一部分
SP是一個寄存器,是特殊寄存器中的一個,即SFR中的一個,他不屬於RAM.
我簡單的說一下單片機內部的內存的結構:
由四個部分組成:
1 ROM或者Flash
2 內部RAM
3 SFR
4 外部RAM
注意,很多單片機初學者,分不清內部RAM和SFR,認為他們是一個東西,其實不是,他們是完全獨立的兩個物理空間.
內部RAM的地址是 低部分00H--7FH 高部分80H--FFH
SFR的地址是 80H--FFH
雖然SFR和高的內部RAM地址相等,但是定址方式不一樣,所以單片機能區分得開
❼ 51系列單片機上電復位後堆棧指針sp的初始值為多少最大容量是多少
答:51系列單片機上電復位後堆棧指針SP的初始值為07H,即SP=07H。堆棧區最大容量是120位元組,即08H~7FH全為堆棧區。可事實上沒有這么用的,也不可能用這么多,內部RAM主要用於存放程序運行中的變數。
❽ 單片機里sp是什麼意思啊
單片機里sp是堆棧指針。
堆棧指針SP英文全稱為stack pointer,是單片機控制器的組成部件之一,與時控制邏輯電路、指令寄存器解碼器、地址指針DPTR、程序計數器等部件共同組成CPU的神經中樞。堆棧指針在單片機里的作用是隨時跟蹤棧頂地址,以便存取單片機的數據。
每當執一次PUSH指令時,SP就(在原來值的基礎上)自動加1,每當執行一次POP指令,SP就(在原來值的基礎上)自動減1。
(8)51單片機sp擴展閱讀
由於SP中的值可以用指令加以改變,所以只要在程序開始階段更改了SP的值,就可以把堆棧設置在規定的內存單元中,如在程序開始時,用一條MOV SP,#5FH指令,就是把堆棧設置在從內存單元60H開始的單元中。
一般程序的開頭總有這么一條設置堆棧指針的指令,因為開機時,SP的初始值為07H,這樣就使堆棧從08H單元開始往後,而08H到1FH這個區域正是8031的第二、三、四工作寄存器區,經常要被使用,這會造成數據的混亂。
不同作者編寫程序時,初始化堆棧指令也不完全相同,這是作者的習慣問題。當設置好堆棧區後,並不意味著該區域成為一種專用內存,它還是可以象普通內存區域一樣使用,只是一般情況下編程者不會把它當成普通內存用了。
❾ 什麼是堆棧,51單片機堆棧指針SP的使用
在計算機領域,堆棧是一個不容忽視的概念,堆棧是兩種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂(top))對數據項進行插入和刪除。在單片機應用中,堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。要點:堆,隊列優先,先進先出(FIFO—first in first out)[1] 。棧,先進後出(FILO—First-In/Last-Out)。