1樓:匿名使用者
一般而言是要初始化棧的,否則將會造成意想不到的問題,這是乙個程式設計師的良好習慣,當然作為教學,他不牽涉到具體的控制實踐,也無可厚非。比如你如果不初始化,當中斷使用第二個工作暫存器區的時候就會出問題。
void t0isr() interrupt 1 using 1
這樣棧就與定時中斷中的工作暫存器發生衝突。
2樓:匿名使用者
你程式設計序時,一般用不到堆疊
即使用到堆疊,棧頂有黙認值,所以不用初始化
至於arm為什麼必須先初始化棧,我也不清楚
3樓:匿名使用者
堆疊指標預設是07h,如果程式用不到07h以後的儲存器,不設定也可以,當然最好設定一下,否則與第二組暫存器重合,程式會執行出錯
4樓:
用keil有段預設**可以初始化,但實際用要看你怎麼用,簡單用不初始化也可以
5樓:匿名使用者
你是說堆疊,還是什麼?堆疊的話有個堆疊指標sp要設定的startup有個這個啟動**裡有設定sp的設定,在模擬執行的時候你可以看彙編**,那裡就有隊sp的操作!!!!
6樓:匿名使用者
我也在學 期待高手回答啊
為什麼一般我們用keil寫51程式不用設定堆疊資訊,預設是什麼樣的?
7樓:神木雕像
1 系統復位預設 sp = 0x07
2 在寫c51程式時,有個startup.a51啟動檔案,檔案後面有一句 mov sp,#?stack-1
這句就是根據你的靜態記憶體使用量來把sp定位到你所有全域性或區域性變數的最後面
3 ?stack是個資料段的段名,因為這個段名很特殊,所以這個段始終被聯結器最後定位,也就是 說你的所有變數的儲存位址都被確定好了以後,這個段的儲存才最後被確定,自然#?stack也就在最後了,又因為sp是先加後用,所以就有 #?
stack-1而不會有問題,位址#?stack-1裡面存的就是你的某個變數資訊
4 當發生第一次函式呼叫時,16位位址會存在#?stack和#?stack+1裡,此時sp = #?stack+1
微控制器為什麼要初始化?
8樓:匿名使用者
呵呵,就好像住新房前,你需要裝修一樣。沒有初始化,微控制器就像毛坯房,初始化後,就可以按照自己的意願來工作了。
9樓:雪先雨
初始化多是對功能單元的配置
像:uart的位元組長度,校驗位,波特率啊什麼的一系列配置通常是相應的控制暫存器進行賦值達到效果
一般的情況下是在上電的時候初始化,還有就是程式跑飛和出現異常時也要初始化,初始化的目的就是把所有用到的標誌位、變數回到你的初始值,以及引腳的分配,配置暫存器寫入需要的值,像時鐘的選擇(內部、外部)
一般在上電時就做好,以後不是特殊需要是不改動的,引腳功能的分配也是一上來就設定好,之後如果可以就不改動,如果經常性的改可能會引發異常。
10樓:
這個初始化是相對的。
初始化是指配置一些狀態 符合你現在的需求。
例如配置你的時鐘,配置你的gpio 配置一些軟體用的常量變數。
配置完成後,然後開展你正常的程式處理。
其實可以看作微控制器的程式 看成是做飯, 初始化就是你在切菜,主程式就是你在炒菜。
11樓:
是變數還是什麼?變數的話就是為了程式的穩定啊,狀態是自己想要的
51微控制器入棧時為什麼要先加一
12樓:匿名使用者
入棧是要做兩件事,哪事先做,哪事後做,又有什麼關係呢?
設sp=30h,第乙個入棧的是放在30h處,sp+1處等著下乙個。
還有,微控制器本指令還沒有執行,pc已經指到下一條指令了。
51微控制器IO口為什麼不能控制驅動5v繼電器
也不盡然,有的繼電器是可以驅動的。但畢竟io口的輸出電流只有十幾毫安,無法驅動大部分的繼電器,也不建議直接驅動,因為繼電器會有較大的干擾,會干擾微控制器的執行。為什麼我的c51微控制器不能驅動繼電器啊, 1.換一個引腳試試 引腳壞掉了可能性比較大 2.微控制器與三極體沒有共地,把地線連上。3.npn...
微控制器延時為什麼要用延時函式而不用定時器做延時
只是延時的話,復 都可製以的。不過微控制器的定時器等資源通常比較緊張,在延時精度要求不高的程式中採用延時函式的比較多,也可以呼叫 一些需要不斷重複但時間關係不是很嚴格的的子程式來延時,例如掃瞄鍵盤,重新整理顯示等 恩到了stm32延時就一般不用軟體延時了,有系統嘀嗒時鐘 看設計要求。定時器資源有限,...
51微控制器數碼管為什麼不亮的原因,一點反應都沒有
第一 定時器的處理是很有問題的。第二 可能你選擇的數碼管不對,應該用共陰極數碼管,可能你選擇了共陽極。第三,你的電路圖或者接線可能有問題。51微控制器數碼管動態顯示不亮 問題在哪 20 程式沒有問題,看你的硬體電路是不是有問題。圖中的兩個三極體的集電極要接地的,你接成vcc了,這樣,三極體是永遠也不...