?? c51編程經驗三則.txt
字號:
主題:C51編程經驗三則 (轉載) [龍嘯九天] [429次] 2000-11-15 21:27:31
主題:C51編程經驗三則
---------------------------------------------------------------------------
在單片機的開發應用中,已逐漸開始引入高級語言,C語言就是其中的一種。用慣
了匯編的人,總覺得高級語言“可控性”不好,不如匯編那樣隨心所欲。以下是筆者
在C51編程中的幾點經驗,希望對初學C51者有所幫助。
一、C51熱啟動代碼的編制
工業控制計算機,往往設有看門狗電路,看門狗動作,計算機復位,這就是熱啟
動。熱啟動時,一般不允許程序從頭開始,因為這將使測量或計算值復位,導致系統
工作異常。故程序必須判斷是熱啟動還是冷啟動。常用的方法是:設定某內存單位為
標志位(如0x7f位和0x7e位),啟動時首先讀該內存單元的內容,如果它等于一個特定
的值(例如兩個內存單元的都是0xaa),就認為是熱啟動,否則就是冷啟動,程序執行
初始化部分,并將0xaa賦予這兩個內存單元。
根據以上的設計思路,編程時,設置一個指針,指向特定的內存單元如0x7f,然
后在程序中根據特定內存單元的值判斷冷/熱啟動,程序如下:
void main()
{ char data*HotPoint=(char*)0x7f;
if((*HotPoint==0xaa)&&(*(--Hot
Point)==0xaa))
{ /*熱啟動的處理 */
}
else
{ HotPoint=0x7e; /*冷啟動的處理
*HotPoint-0xaa;
*(++HotPoint)=0xaa;
}
/*正常工作代碼*/
}
實際調試中發現,無論是熱啟動還是冷啟動,開機后所有內存單元的值都被復位
為0,實現不了熱啟動的要求。這是為什么呢?原來,用C語言編程時,開機時執行的代
碼并非是從main()函數的第一語句開始的,在main()函數的第一語句執行前要先執行
一段‘起始代碼’。正是這段代碼執行了內存清零的工作。C編譯程序提供了這段起始
代碼的源程序,名為CSTARTUP
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -