微控制器中寫程式時為什麼要抬高堆疊指標?

2025-03-09 03:25:17 字數 1793 閱讀 9950

1樓:古榮花祝詩

51的硬體結構要求堆疊從下往上壓入(方向是從低位元組ram到高位元組ram)。

如果堆疊指標設定的太低,那麼你的低位元組ram就無法使用了。

比如,sp復位後的值是07h,如果不調整指標,那麼工作暫存器1~3區,以及30h附近的ram就無法使用;

所以,襪拿一般微控制器復位以後,執行一條mov

sp,#60h的語句,將堆疊指標設定為60h;

這樣,全部工作暫存器區培返以及30h~5fh的ram空間使用者就可以使用;

60h~7fh的堆疊範圍也足夠3級子程式或中斷巢狀;

但是要注意sp壓棧操作時,值一定不能到達80h,那可是p0口。

根據實際情況再定吧,上面說的只是一般情況,告中搭。

如果你的ram使用不多,但是子程式或中斷特別多,那麼你的sp就必須要設低了。

2樓:羊合英紅嫣

你好!51微控制器在用組合語言寫畢褲程式時常這樣,堆疊是從上向下壓,預設的堆疊指標往下就壓到工作暫存器裡了,而寫程式時經常用到工作暫存器,怕有衝突,手槐簡建議改到ram的明空頂端。

其他微控制器一般不用這樣做。

我的你還滿意嗎~~

什麼是堆疊指標,怎麼理解堆疊指標

3樓:網友

堆疊指標是乙個8位暫存器,用它存放棧頂的位址,堆疊的一端是固定的,稱為棧底;一端是浮動的,稱為棧頂。如果是堆疊從低位址向高位址方向延伸,則棧底是最低位址,開始時,棧頂與棧底位址重合,此時堆疊指標指向這個位址。

4樓:匿名使用者

建議你應該看看資料結構。

微控制器中程式指標、資料指標、堆疊指標區別是什麼?

5樓:羊福偶淑

首先,你要明白乙個概念,指標,是做什麼的?答案是,指標,是指向位址的。

程式指標,指向的空間,在物理上是flash,在邏輯上,就是**空間。比如說51微控制器。

資料指標,指向的空間,在物理上有flash和ram,在邏輯上是flash裡的常數空間和資料空間,注意,是對於微控制器來說,對於我們的電腦,常數空間不是在flash上。

比如說51微控制器的dptr,如果用movc

a,@a+dptr,此時,就是指向常數空間,如果用。

movxa,@a+dptr就是指向的資料空間。

堆疊。指標,指向的空間,在物理上是ram,在邏輯上,就是資料空間,是特定的資料空間,堆疊是資料空間中單獨劃分出來,專門用於寄存中間結果的記憶體空間。

資料指標和堆疊指標主要有兩個區別:

一是資料指標可以指向flash,即可以指向常數,比如說我們定義乙個陣列。

unsigned

charcode

table[99],此時,就是dptr可以指向常數空間。堆疊指標是不可以的,只能是指向ram。

第二個區別,堆疊指標指向的是特定的資料空間,這個特定的資料空間,是從整個資料空間裡劃分出來,專門用於作堆疊用的,堆疊區間一旦劃分出來,堆疊指標在規則上,就只能在這個範圍內活動,如果出了這個範圍,可能導雹鎮耐致整個程式的崩潰。而資料指標在規則旅滲上,可以指向整個資料空間,但是,可以讀堆疊空間,不應該去修改,否則也可能導致程式的崩潰。

6樓:網友

51微控制器在用組合語言寫程式時常這樣,堆疊是從上向下壓,預設的堆疊指標往下就壓到工作暫存器裡了,而寫程式時經常用到工作暫存器,怕有衝突,建議改到ram的頂端。

其他微控制器一般不用這樣做。

7樓:尼瑪真響亮

你這問題描述的不清楚啊?

堆還是棧?那類微控制器?

微控制器LED,微控制器中程式中,LED LED是什麼意思?

雖然你這樣的電路仍然可以實現這些功能,但不值得推薦,你了解一下動態掃瞄吧,如果能掌握動態掃瞄就很簡單了,因為按你這個樣子,如果顯示5位數的話,那微控制器io口豈不是都不夠用了啊,你只要把數碼管的段顯示部分 2個數碼管的左邊七個引腳 都接在p2口就行,也就是再多的數碼管都接在乙個 8位 口上,例如 p...

微控制器程式中能輸入小數嗎,51微控制器怎麼從鍵盤輸入小數點啊

51微控制器硬體沒有浮點數運算指令,如果是彙編,需要自己使用一段彙編指令序列來完成浮點數運算,如果是c語言就比較容易了,編譯器會自動做處理,但是微控制器做浮點運算開銷是很大的 小數部分會被直接捨去,不會產生進製。微控制器處理浮點運算是很慢的。使用float型或double型變數,經過編譯器編譯後是會...

微控制器中驅動器件執行除了寫程式還要做什麼?比如驅動電機需要晶元嗎?驅動數碼管不需要晶元嗎?有什

你也說到了好幾次 驅動 微控制器的io輸出電流,像at89c51 是毫安級別的 你想驅動乙個幾安的大電機當然不能 那就需要向l298這樣的驅動晶元,其他類似功能的晶元也可以,需要你去尋找,通過小電流輸出控制大電流,驅動電機。微控制器是可以直接驅動一兩個的數碼管的,但是,一般數碼管都不會用乙個,要用上...