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