【正文】
m, thus testing the ability of antistatic. In summary, the SCM has bee a puter development and application of an important aspect of the application of the important significance of SCM is that it fundamentally changes the traditional control system design and design methods. Former must be analog or digital circuits to achieve most of the functions now can use SCM software approach to reality. This software instead of hardware control technology, also known as microcontrol technology, control technology is a revolution in the traditional. In addition, in the development and application process, we must master the skills, improve efficiency in order to fulfill its broader use.附錄B 外文翻譯 單片機的應用與開發(fā)技巧 目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。本系統(tǒng)以單片機系統(tǒng)為核心,通過與智能傳感器相連,采集并存儲智能傳感器的測量數(shù)據(jù),經(jīng)過分析處理將結果顯示于LCD液晶屏,從而實現(xiàn)了室內(nèi)環(huán)境的監(jiān)測。因此,單片機的學習、開發(fā)與應用顯得尤為重要。 一、單片機的特點應用 單片機的特點主要有:高集成度,體積小,高可靠性;控制功能強;低電壓,低功耗,便于生產(chǎn)便攜式產(chǎn)品;易擴展;優(yōu)異的性能價格比。目前,單片機的應用領域主要包括:辦公自動化設備;單片機在機電一體化中的應用;在實時過程控制中的應用;單片機在日常生活及家用電器領域的應用;在各類儀器儀表中引入單片機,使儀器儀表智能化,提高測試的自動化程度和精度,簡化儀器儀表的硬件結構,提高其性能價格比;在計算機網(wǎng)絡和通信領域中的應用;商業(yè)營銷設備;單片機在醫(yī)用設備領域中的應用;汽車電子產(chǎn)品;航空航天系統(tǒng)和國防軍事、尖端武器等領域,單片機的應用更是不言而喻。 單片機開發(fā)中的幾個基本技巧 在單片機應用開發(fā)中,代碼的使用效率問題、單片機抗干擾性和可靠性等問題仍困擾著許多研發(fā)者?,F(xiàn)歸納出單片機開發(fā)中應掌握的幾個基本技巧。 如何減少程序中的bug。對于如何減少程序的bug,應該先考慮系統(tǒng)運行中應考慮的超范圍管理參數(shù)如下。物理參數(shù):這些參數(shù)主要是系統(tǒng)的輸入?yún)?shù),它包括激勵參數(shù)、采集處理中的運行參數(shù)和處理結束的結果參數(shù)。資源參數(shù):這些參數(shù)主要是系統(tǒng)中的電路、器件、功能單元的資源,如記憶體容量、存儲單元長度、堆疊深度。應用參數(shù):這些應用參數(shù)常表現(xiàn)為一些單片機、功能單元的應用條件。過程參數(shù):指系統(tǒng)運行中的有序變化的參數(shù)。 如何提高C語言編程代碼的效率。用C語言進行單片機程序設計是單片機開發(fā)與應用的必然趨勢。如果使用C編程時,要達到最高的效率,最好熟悉所使用的C編譯器。先試驗一下每條C語言編譯以后對應的匯編語言的語句行數(shù),這樣就可以很明確的知道效率。在今后編程的時候,使用編譯效率最高的語句。各家的C編譯器都會有一定的差異,故編譯效率也會有所不同,優(yōu)秀的嵌入式系統(tǒng)C編譯器代碼長度和執(zhí)行時間僅比以匯編語言編寫的同樣功能程度長520%。對于復雜而開發(fā)時間緊的項目時,可以采用C語言,但前提是要求你對該MCU系統(tǒng)的C語言和C編譯器非常熟悉,特別要注意該C編譯系統(tǒng)所能支持的數(shù)據(jù)類型和算法。雖然C語言是最普遍的一種高級語言,但由于不同的MCU廠家其C語言編譯系統(tǒng)是有所差別的,特別是在一些特殊功能模塊的操作上。所以如果對這些特性不了解,那么調(diào)試起來問題就會很多,反而導致執(zhí)行效率低于匯編語言。 如何解決單片機的抗干擾性問題。防止干擾最有效的方法是去除干擾源、隔斷干擾路徑,但往往很難做到,所以只能看單片機抗干擾能力夠不夠強了。在提高硬件系統(tǒng)抗干擾能力的同時,軟件抗干擾以其設計靈活、節(jié)省硬件資源、可靠性好越來越受到重視。單片機干擾最常見的現(xiàn)象就是復位;至于程序跑飛,其實也可以用軟件陷阱和看門狗將程序拉回到復位狀態(tài);所以單片機軟件抗干擾最重要的是處理好復位狀態(tài)。一般單片機都會有一些標志寄存器,可以用來判斷復位原因;另外你也可以自己在RAM中埋一些標志。在每次程序復位時,通過判斷這些標志,可以判斷出不同的復位原因;還可以根據(jù)不同的標志直接跳到相應的程序。這樣可以使程序運行有連續(xù)性,用戶在使用時也不會察覺到程序被重新復位過。 如何測試單片機系統(tǒng)的可靠性。當一個單片機系統(tǒng)設計完成,對于不同的單片機系統(tǒng)產(chǎn)品會有不同的測試項目和方法,但是有一些是必須測試的:測試單片機軟件功能的完善性;上電、掉電測試;老化測試;ESD和EFT等測試。有時候,我們還可以模擬人為使用中,可能發(fā)生的破壞情況。例如用人體或者衣服織物故意摩擦單片機系統(tǒng)的接觸端口,由此測試抗靜電的能力?! 【C上所述,單片機已成為計算機發(fā)展和應用的一個重要方面,單片機應用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設計思想和設計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術也稱為微控制技術,是傳統(tǒng)控制技術的一次革命。此外在開發(fā)和應用過程中我們更要掌握技巧,提高效率,以便于發(fā)揮它更加廣闊的用途。附錄C//IO口定義sbit DATADH = P2^7 。//變量聲明uchar U8FLAG。uchar U8temp。uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata。uchar U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp。uchar U8data。//延時void DelayDH(uint j){ uint a,b。 for(b=j。b0。b) for(a=47。a0。a)。}//延時void Delay_10usDH(void){ uchar a,b。 for(b=1。b0。b) for(a=2。a0。a)。}//初始化 void COM(void){ uchar i。 for(i=0。i8。i++) { U8FLAG=2。 while((!DATADH)amp。amp。U8FLAG++)。 Delay_10usDH()。 Delay_10usDH()。 U8temp=0。 if(DATADH)U8temp=1。 U8FLAG=2。 while((DATADH)amp。amp。U8FLAG++)。 //超時則跳出for循環(huán) if(U8FLAG==1)break。 //判斷數(shù)據(jù)位是0還是1 // 如果高電平高過預定0高電平值則數(shù)據(jù)位為 1 U8data=1。 U8data|=U8temp。 //0 }//rof}//濕度讀取子程序 void RH(void){ //主機拉低18ms DATADH=0。 DelayDH(180)。 DATADH=1。 //總線由上拉電阻拉高 主機延時20us Delay_10usDH()。 Delay_10usDH()。 Delay_10usDH()。 Delay_10usDH()。 //主機設為輸入 判斷從機響應信號 DATADH=1。 //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行 if(!DATADH) //T ! { U8FLAG=2。 //判斷從機是否發(fā)出 80us 的低電平響應信號是否結束 while((!DATADH)amp。amp。U8FLAG++)。 U8FLAG=2。 //判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài) while((DATADH)amp。amp。U8FLAG++)。 //數(shù)據(jù)接收狀態(tài) COM()。 U8RH_data_H_temp=U8data。 COM()。 U8RH_data_L_temp=U8data。 COM()。 U8T_data_H_temp=U8data。 COM()。 U8T_data_L_temp=U8data。 COM()。 U8checkdata_temp=U8data。 DATADH=1。 //數(shù)據(jù)校驗 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp)。 if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp。 U8RH_data_L=U8RH_data_L_temp。 U8T_data_H=U8T_data_H_temp。 U8T_data_L=U8T_data_L_temp。 U8checkdata=U8checkdata_temp。 }//fi }//fi}/*A/D轉換sbit CS = P1^0。 sbit Clk = P1^1。 sbit DATI = P1^2。 sbit DATO = P1^2。unsigned char dat = 0x00。 //ADunsigned char adc0832(unsigned char CH) { unsigned char i,test,adval。 adval = 0x00。 test = 0x00。 Clk = 0。 //初始化 DATI = 1。 _nop_()。 CS = 0。 _nop_()。 Clk = 1。 _nop_()。 if ( CH == 0x00 ) //通道選擇 { Clk = 0。 DATI = 1。 //通道0的第一位 _nop_()。 Clk = 1。 _nop_()。 Clk = 0。 DATI = 0。 //通道0的第二位 _nop_()。 Clk = 1。 _nop_()。 } else { Clk = 0。 DATI = 1。 //通道1的第一位 _nop_()。 Clk = 1。 _nop_()。 Clk = 0。 DATI = 1。 //通道1的第二位 _nop_()。 Clk = 1。 _nop_()。 } Clk = 0。 DATI = 1。 for( i = 0。i 8。i++ ) //讀取前8位的值 { _nop_()。 adval = 1。 Clk = 1。 _nop_()。 Clk = 0。 if (DATO) adval |= 0x01。 else adval |= 0x00。 } for (i = 0。 i 8。 i++) //讀取后8位的值 { test = 1。 if (DATO) test |= 0x80。 else test |= 0x00。 _nop_()。 Clk = 1。 _nop_()。 Clk = 0。 } if (adval == test) //比較前8位與后8位的值,如果不相同