導航:首頁 > 操作系統 > 單片機sp的作用c語言

單片機sp的作用c語言

發布時間:2022-09-13 08:01:45

1. 什麼是堆棧堆棧指針的SP的作用是什麼8051單片機堆棧容量不超過多少位元組

在調用子程序時需要保存調用函數的CPU寄存器PC指針,PC指針是被CALL指令自動壓入SP所指向的片內存儲器,CPU寄存器要由用戶用PUSH指令自行保存,
因此SP的作用就是一個指針,當進行中斷調用,子函數調用時將現場數據壓入SP所指向的存儲器,SP自動增加1或2,當中斷結束RETI,調用返回RET,POP時將SP數據彈出,SP自動減1或2
8051最大為128位元組的片內存儲器,0X20以上理論都可以做堆棧用96位元組,8052為256位元組224位元組可用
但這樣便沒有其它空間可用於數據存儲
現在的單片機的程序一般都能用C51來,不用關心堆棧大小與SP寄存器

2. 請問單片機用c語言編程為什麼在主函數開頭有時要給sp賦值

變數是定義成
還是
得看變數的在程序中所起的作用,比如如下程序:
#include <REGX52.h>

int_count=0;
unsigned char count=0;
unsigned char second=0;
unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
unsigned char seg1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};
Delay_1s() //500m秒延時子程序
{unsigned char l,i,n;
for(l=50;l>0;l--)
for(i=20;i>0;i--)
for(n=248;n>0;n--);
}

void t0(void) interrupt 1 using 0
{int_count++;
if(int_count==4000)
{ int_count=0;
second=1;
}
}
void main (void)
{TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(second)
{
second=0;
P0=seg1[count];
count++;
if(count>=10)
count=0;
}
}
}

輸出0到9,每一秒變化一次,其中int_count、second是
這是因為,int_count是中斷次數統計,他需要在完成一次次的中斷以後數值保持不變,如果定義成
,沒發生一次中斷,它加一,中斷結束又變成0了,所以定義成
,這樣他的數值會根據中斷發生的次數不斷增加。而second則因為是
顯示的數組的下標,如果定義成
那麼每次
結束,內存釋放變數值也就沒有了,這樣就達不到每秒輸出不同數字的要求。、
總的來講呢,如果變數的值在
結束以後還會被其他的函數,活著表達式使用,才定義成全局變數。

3. 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指令使用堆棧,要注意進出棧的匹配,否則將引起不可預期的後果。

4. 什麼是堆棧堆棧指針的SP的作用是什麼8051單片機堆棧容量不超過多少位元組

  1. 堆棧:堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂對數據項進行插入和刪除。在單片機應用中,堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。

  2. SP的作用是在51單片機中,SP棧指針是一個專用的8位寄存器,系統復位後,SP初始化為07H,使得堆棧指針實際上是由08H單元開始。

  3. 51堆棧的容量最大也不會超過128位元組。

5. 單片機里sp是什麼意思啊

單片機里sp是堆棧指針。

堆棧指針SP英文全稱為stack pointer,是單片機控制器的組成部件之一,與時控制邏輯電路、指令寄存器解碼器、地址指針DPTR、程序計數器等部件共同組成CPU的神經中樞。堆棧指針在單片機里的作用是隨時跟蹤棧頂地址,以便存取單片機的數據。

每當執一次PUSH指令時,SP就(在原來值的基礎上)自動加1,每當執行一次POP指令,SP就(在原來值的基礎上)自動減1。

(5)單片機sp的作用c語言擴展閱讀

由於SP中的值可以用指令加以改變,所以只要在程序開始階段更改了SP的值,就可以把堆棧設置在規定的內存單元中,如在程序開始時,用一條MOV SP,#5FH指令,就是把堆棧設置在從內存單元60H開始的單元中。

一般程序的開頭總有這么一條設置堆棧指針的指令,因為開機時,SP的初始值為07H,這樣就使堆棧從08H單元開始往後,而08H到1FH這個區域正是8031的第二、三、四工作寄存器區,經常要被使用,這會造成數據的混亂。

不同作者編寫程序時,初始化堆棧指令也不完全相同,這是作者的習慣問題。當設置好堆棧區後,並不意味著該區域成為一種專用內存,它還是可以象普通內存區域一樣使用,只是一般情況下編程者不會把它當成普通內存用了。

6. 單片機的堆棧指針SP有什麼作用

SP用於存放棧頂的偏移地址。
通俗的說,就是存放堆棧SS的頂部。

7. 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指令使用堆棧,要注意進出棧的匹配,否則將引起不可預期的後果。

8. SP在單片機中是什麼寄存器有什麼作用

你沒有說是什麼單片機產品,各單片機定義不同。
如果是MCS-51單片機,SP指的是堆棧指針寄存器Stack Pointer,指示堆棧的棧頂地址,定位要入棧或出棧的數據的存放位置。

9. 單片機的堆棧指針SP有什麼作用

在51單片機中,SP棧指針是一個專用的8位寄存器,系統復位後,SP初始化為07H,使得堆棧指針實際上是由08H單元開始。
在響應中斷或子程序調用時,發生入棧操作,入棧的是16位PC值;51中有PUSH壓入和POP彈出棧操作指令,如有必要,在中斷或調用子程序時可用POSU指令把PSW或其它需要保護的寄存器的內容壓入堆棧加以保護;返回前再使用POP指令把它們恢復。

10. 什麼是堆棧堆棧指針的SP的作用是什麼8051單片機堆棧容量不超過多少位元組

1、在計算機領域,堆棧是一個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆棧其實是兩種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂(top))對數據項進行插入和刪除。要點:堆,順序隨意。棧,後進先出(Last-In/First-Out)。

區分隊列 先進先出
2、堆棧是一塊保存數據的連續內存。 一個名為堆棧指針(SP)的寄存器指向堆棧的頂部。 堆棧的底部在一個固定的地址。 堆棧的大小在運行時由內核動態地調整。 CPU實現指令 PUSH和POP, 向堆棧中添加元素和從中移去元素。 堆棧由邏輯堆棧幀組成。 當調用函數時邏輯堆棧幀被壓入棧中, 當函數返回時邏輯 堆棧幀被從棧中彈出。 堆棧幀包括函數的參數, 函數地局部變數, 以及恢復前一個堆棧 幀所需要的數據, 其中包括在函數調用時指令指針(IP)的值。 堆棧既可以向下增長(向內存低地址)也可以向上增長, 這依賴於具體的實現。 在我 們的例子中, 堆棧是向下增長的。 這是很多計算機的實現方式, 包括Intel, Motorola, SPARC和MIPS處理器。 堆棧指針(SP)也是依賴於具體實現的。 它可以指向堆棧的最後地址, 或者指向堆棧之後的下一個空閑可用地址。 在我們的討論當中, SP指向堆棧的最後地址。 除了堆棧指針(SP指向堆棧頂部的的低地址)之外, 為了使用方便還有指向幀內固定 地址的指針叫做幀指針(FP)。 有些文章把它叫做局部基指針(LB-local base pointer)。 從理論上來說, 局部變數可以用SP加偏移量來引用。 然而, 當有字被壓棧和出棧後, 這 些偏移量就變了。 盡管在某些情況下編譯器能夠跟蹤棧中的字操作, 由此可以修正偏移 量, 但是在某些情況下不能。 而且在所有情況下, 要引入可觀的管理開銷。 而且在有些 機器上, 比如Intel處理器, 由SP加偏移量訪問一個變數需要多條指令才能實現。 因此, 許多編譯器使用第二個寄存器, FP, 對於局部變數和函數參數都可以引用, 因為它們到FP的距離不會受到PUSH和POP操作的影響。 在Intel CPU中, BP(EBP)用於這 個目的。 在Motorola CPU中, 除了A7(堆棧指針SP)之外的任何地址寄存器都可以做FP。 考慮到我們堆棧的增長方向, 從FP的位置開始計算, 函數參數的偏移量是正值, 而局部 變數的偏移量是負值。 當一個常式被調用時所必須做的第一件事是保存前一個FP(這樣當常式退出時就可以 恢復)。 然後它把SP復制到FP, 創建新的FP, 把SP向前移動為局部變數保留空間。 這稱為 常式的序幕(prolog)工作。 當常式退出時, 堆棧必須被清除干凈, 這稱為常式的收尾 (epilog)工作。 Intel的ENTER和LEAVE指令, Motorola的LINK和UNLINK指令, 都可以用於 有效地序幕和收尾工作。
3、普通的8051MCU堆棧指針只有8位,所以堆棧不可能超過256位元組13086.

閱讀全文

與單片機sp的作用c語言相關的資料

熱點內容
阿里雲郵smtp伺服器地址 瀏覽:250
解壓館認知理解 瀏覽:239
為什麼使用非官方伺服器會封號 瀏覽:9
佛山加密文檔軟體 瀏覽:813
港式5張梭哈源碼 瀏覽:241
數據中心pdf 瀏覽:524
crf源碼解析 瀏覽:853
伺服器軟體開發是什麼意思 瀏覽:941
刪除彩信android 瀏覽:862
元宵節猜燈謎h5源碼 瀏覽:69
樂培生app怎麼綁定 瀏覽:762
視頻壓縮不清楚怎麼說 瀏覽:525
加好友伺服器繁忙是怎麼回事 瀏覽:381
怎麼解綁app的支付寶賬號 瀏覽:912
ip地址伺服器不可用怎麼解決方法 瀏覽:185
為什麼軟體需要伺服器 瀏覽:64
redis操作命令大全 瀏覽:597
python字元串重復索引 瀏覽:963
為什麼香信新版本連接不上伺服器 瀏覽:51
元旦程序員打羽毛球 瀏覽:615