資源描述:
《單片機(jī)C語言課件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第8章單片機(jī)C程序設(shè)計及應(yīng)用8.1單片機(jī)C51程序設(shè)計8.2采用C51程序的設(shè)計實例本章小結(jié)練習(xí)與思考題8.1單片機(jī)C51程序設(shè)計8.1.1單片機(jī)C程序的基本概念目前仍在使用的單片機(jī)開發(fā)設(shè)計語言大致有兩類:匯編語言和C語言。C語言由于其結(jié)構(gòu)化、移植性好和高效性的特點,是進(jìn)行單片機(jī)開發(fā)的一種利器。C語言是一種源于編寫UNIX操作系統(tǒng)的語言,與匯編語言相比,有以下優(yōu)點:(1)不需要了解51單片機(jī)的指令系統(tǒng),僅僅要求初步了解存儲器結(jié)構(gòu)。 (2)程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù),使程序結(jié)構(gòu)化。 (3)
2、程序可讀性好。 (4)提供很多標(biāo)準(zhǔn)庫函數(shù),數(shù)據(jù)處理能力強(qiáng)。 (5)程序易于做到模塊化,移植性好。8.1.2單片機(jī)C程序的基本結(jié)構(gòu)C語言是一種通用性很強(qiáng)的結(jié)構(gòu)化程序設(shè)計語言。從程序流程的角度來看,單片機(jī)C程序可以分為3種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這3種基本結(jié)構(gòu)可以組成各種復(fù)雜程序。1.順序結(jié)構(gòu)順序結(jié)構(gòu)程序是僅包含一個main()函數(shù)的簡單程序,適當(dāng)運(yùn)用表達(dá)式語句就能設(shè)計出具有某特定功能的順序結(jié)構(gòu)C51程序。這是一種最簡單的基本結(jié)構(gòu),程序只由低地址向高地址順序執(zhí)行指令代碼,如圖8-1所示
3、。雖然該程序設(shè)計方法簡單,但在具體運(yùn)用中的算法仍然采用自頂向下逐步求精的方法進(jìn)行設(shè)計。圖8-1順序結(jié)構(gòu)2.選擇結(jié)構(gòu)使單片機(jī)具有決策能力的是選擇結(jié)構(gòu),這種結(jié)構(gòu)也稱為分支結(jié)構(gòu),如圖8-2(a)所示。選擇結(jié)構(gòu)中包含一個判斷框,執(zhí)行流程根據(jù)判斷條件P的成立與否,選擇執(zhí)行其中的一路分支。圖8-2(b)所示的是特殊的選擇結(jié)構(gòu),即一路為空的選擇結(jié)構(gòu)。這種選擇結(jié)構(gòu)中,當(dāng)P條件成立時,執(zhí)行A操作,然后脫離選擇結(jié)構(gòu);如果P條件不成立,則直接脫離選擇結(jié)構(gòu)。它包括if語句結(jié)構(gòu)和switch語句結(jié)構(gòu)兩種。圖8-2選擇結(jié)構(gòu)1)?if
4、語句結(jié)構(gòu) C語言的if語句有3種形式:基本if形式、if-else形式、if-else-if形式。 基本if形式語法結(jié)構(gòu)如下: if(表達(dá)式) 處理程序; 處理機(jī)理是:如果表達(dá)式的值為“真”,則執(zhí)行“處理程序”的語句內(nèi)容,否則不執(zhí)行該語句內(nèi)容。例如:voidmain() {ucharsp0=0,buffer0[2]={0,0};if(sp0==0)buffer0[sp0]=RXBUF0;//接收串口數(shù)據(jù)} if-else形式語法結(jié)構(gòu)如下:if(表達(dá)式)處理程序1;e
5、lse處理程序2;處理機(jī)理是:如果if表達(dá)式的值為“真”,則執(zhí)行“處理程序1”的語句內(nèi)容,否則執(zhí)行“處理程序2”語句內(nèi)容。例如: voidmain() { ucharend,rev_flag; if(end==1) rev_flag0=1; else rev_flag0=0; }if-else-if形式語法結(jié)構(gòu)如下: if(表達(dá)式1) 處理程序1; elseif(表達(dá)式2) 處理程序2; … else(表達(dá)式n
6、) 處理程序n;處理機(jī)理是:如果表達(dá)式1的值為“真”,則執(zhí)行與之相對應(yīng)的“處理程序1”的語句內(nèi)容;如果表達(dá)式2的值為“真”,則執(zhí)行與之相對應(yīng)的“處理程序2”的語句內(nèi)容,依次判斷表達(dá)式“x”是否為“真”,如果為“真”則執(zhí)行與之相對應(yīng)的“處理程序x”語句內(nèi)容。例如:voidmain() { ucharsp0=0,rev_byte0,buffer0[2]={0,0}, receive_frame[10]; if(sp0==0){ buffer0[sp0]=RXB
7、UF0;//接收串口數(shù)據(jù) if(buffer0[0]==0xEB)sp0++;}/*判斷第二個字節(jié)*/elseif(sp0==1){buffer0[sp0]=RXBUF0;if((buffer0[0]==0xEB)&&(buffer0[1]==0x90))sp0++;//數(shù)據(jù)為EB90elsesp0=0;}elseif(sp0>=2){receive_frame[rev_byte0]=RXBUF0;rev_byte0++;}2)?switch語句結(jié)構(gòu) C語言的switch
8、語句又稱開關(guān)語句,它可以從多種情況中選擇滿足條件的一種情況,是多分支選擇結(jié)構(gòu)語句。switch形式語法結(jié)構(gòu)如下:switch(表達(dá)式){case<常量表達(dá)式1>:[處理序列1;[break]]case<常量表達(dá)式2>:[處理序列2;[break]]…case<常量表達(dá)式n>:[處理序列n;[break]][default:處理序列n+1;]}處理機(jī)理是:計算表達(dá)式的值,并逐個與其后的常量表達(dá)式的值相比較,當(dāng)表達(dá)