第6章單片機C語言.ppt_第1頁
第6章單片機C語言.ppt_第2頁
第6章單片機C語言.ppt_第3頁
第6章單片機C語言.ppt_第4頁
第6章單片機C語言.ppt_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第6章 單片機C語言程序設(shè)計基礎(chǔ),前面一章介紹了匯編語言的單片機程序。在單片機的開發(fā)與應用中,除了匯編語言,也可以采用其他高級語言,如C語言。單片機C語言既有匯編語言的操作底層硬件的能力,又具有高級語言的許多優(yōu)點。因此,在現(xiàn)代的單片機程序設(shè)計中廣泛采用單片機C語言。本章主要介紹了單片機C語言程序設(shè)計的基礎(chǔ)知識,包括標識符、關(guān)鍵字、數(shù)據(jù)類型、表達式和運算符等。熟練掌握這些知識,將為下面學習C51的函數(shù)和語句打好基礎(chǔ)。,6.1 單片機C語言概述,對比現(xiàn)有的程序設(shè)計語言,C語言以其功能強大、結(jié)構(gòu)清晰等優(yōu)點獲得廣泛應用。對于學過C語言的讀者來說,再學其他語言就顯得輕而易舉了。而在單片機程序設(shè)計中,同樣

2、有應用于單片機的C語言,有時簡稱為C51語言。C51語言繼承了C語言的結(jié)構(gòu)上的優(yōu)點,便于學習,又有匯編語言操作硬件的能力,因此被廣泛使用于單片機程序設(shè)計中。,6.1.1 單片機C語言和匯編語言對比,匯編語言是一種面向機器的程序語言,其可以直接控制硬件,指令執(zhí)行速度快,且指令的執(zhí)行時間固定,因此匯編語言的執(zhí)行效率很高。但其語言格式比較晦澀、可讀性差、難于編寫和調(diào)試,也不便于移植,影響了程序代碼的共享。 與匯編語言相比,單片機C語言在結(jié)構(gòu)上更易理解、可讀性強,且開發(fā)速度快、可靠性好、便于移植。因此,使用單片機C語言進行單片機系統(tǒng)的開發(fā),可以縮短開發(fā)周期、降低開發(fā)成本。隨著單片機硬件系統(tǒng)的發(fā)展和產(chǎn)品

3、更新速度的提升,單片機的開發(fā)越來越著重于程序本身的開發(fā)效率,以便快速占領(lǐng)市場。因此,單片機C語言已成為目前最流行的單片機開發(fā)語言。,6.1.2 C51語言的主要特點,單片機的C51語言特點很多,總結(jié)起來主要的有以下幾點: 單片機C51語言兼?zhèn)涓呒壵Z言與低級語言的優(yōu)點,語法結(jié)構(gòu)和標準C語言基本一致。其規(guī)模適中,語言簡潔,便于學習。 同C語言一樣,單片機C51語言提供了完備的數(shù)據(jù)類型、運算符以及函數(shù)供使用。 C51語言借鑒了ALGOL的分程序結(jié)構(gòu),是一種結(jié)構(gòu)化程序設(shè)計語言。其使用一對花括號“”將一系列語句組合成一個復合語句,程序結(jié)構(gòu)簡單明了。 C51語言的可移植性好。對于兼容的8051系列單片機,

4、只要將一個硬件型號下的程序稍加修改,甚至不加改變,就可移植到另一個不同的硬件型號開發(fā)環(huán)境中使用。 C51語言生成的代碼執(zhí)行效率高,且比匯編語言的程序易于理解和共享使用。,6.2 單片機C語言在Keil Vison3中應用實例,單片機C語言(即C51語言)是運行在單片機上的程序語言,和C語言的語法結(jié)構(gòu)是基本一致的。這里通過一個實例,來講解如何在Keil Vison3集成開發(fā)環(huán)境下進行單片機C語言的程序設(shè)計。,6.2.1 創(chuàng)建項目,雙擊啟動Keil Vison3集成開發(fā)環(huán)境,首先開始創(chuàng)建項目,操作步驟如下。,6.2.2 創(chuàng)建源文件,當一個單片機項目建立完畢后,現(xiàn)在開始進行核心的源文件的設(shè)計。具體的

5、操作步驟如下。,6.2.3 編譯項目,項目及源文件建立完畢后便可以編譯項目了。選擇“Project”“Build target”命令,即可編譯,如果程序無誤,則在輸出窗口中顯示編譯結(jié)果,如圖所示。,6.2.4 仿真調(diào)試,當一個單片機項目建立并編譯通過后,在下載到單片機硬件中之前,為了確保程序的執(zhí)行完全符合要求,一般需要進行仿真調(diào)試。Vison3的集成開發(fā)環(huán)境提供了完善的項目仿真和調(diào)試工具,下面就介紹如何使用Vison3來進行單片機C語言程序的仿真調(diào)試。項目仿真調(diào)試之前需要確保該項目完全通過編譯。仿真調(diào)試的步驟如下:,6.3 C51的標識符與關(guān)鍵字,同標準的C語言一樣,單片機的C51程序語言也包

6、含特定的標識符和關(guān)鍵字。因此,在進行C51程序設(shè)計時必須符合其使用的規(guī)則。,6.3.1 標識符,標識符是用來標識源程序中某個對象名稱的符號。其中的對象可以是常量、變量、語句標號、數(shù)據(jù)類型、自定義函數(shù)名以及數(shù)組名等。C51的標識符的定義不是隨意的,需要符合以下定義規(guī)則。 C51的標識符可以由字母、數(shù)字(09)和下劃線“_”組成。 C51的標識符區(qū)分大小寫,例如“num5”和“NUM5”代表兩個不同的標識符。 C51的標識符第一個字符必須是小寫字母(az)、大寫字母(AZ)或者下劃線“_”。例如“count1”、“C_1”等,都是正確的。而“5num”則是錯誤的標識符,在編譯時系統(tǒng)會出現(xiàn)錯誤提示。

7、另外,有些編譯系統(tǒng)專用的標識符是以下劃線開頭,為了程序的兼容性和可移植性,所以建議一般不要以下劃線開頭來命名標識符。 C51的標識符定義不能使用C51的關(guān)鍵字,也不能和用戶已使用的函數(shù)名或C51庫函數(shù)同名。例如“int”是不正確的標識符,“int”是關(guān)鍵字,所以它不能作為標識符。 C51的標識符最多可支持32個字符,不過,為了使用和理解方便,盡量不要使用過長的標識符。,6.3.2 關(guān)鍵字,關(guān)鍵字是被C51編譯器已定義保留的專用特殊標識符。關(guān)鍵字是C51語言的一部分,如if、for、do、case等。這些關(guān)鍵字有固定的名稱和含義,用戶在C51源程序中自定義的標識符不允許與關(guān)鍵字相同,否則程序?qū)o

8、法編譯運行。單片機C51程序語言采用了ANSI C標準定義的32個關(guān)鍵字。 (詳細內(nèi)容請參照本書),6.4 C51的數(shù)據(jù)類型,C51的數(shù)據(jù)類型是C51語言中變量以及常量的類型。每個變量在使用之前必須定義其數(shù)據(jù)類型。C51除了繼承了標準C語言中基本的數(shù)據(jù)類型int、char、short、long、float和double等外,又有自己的特點。例如在C51語言中int和short、float和double具有相同的取值范圍和含義。 在C51中有以下幾種基本數(shù)據(jù)類型:整型(int)、浮點型(float)、字符型(char)、無值型(void)。此外,C51語言還提供了幾種聚合類型(aggregate

9、 types),包括數(shù)組、指針、結(jié)構(gòu)、聯(lián)合(共用體)、枚舉和位域。關(guān)于幾種聚合類型將在下一章中進行詳細介紹。本章主要介紹幾種基本類型。 C51語言中基本數(shù)據(jù)類型的字長和取值范圍,如表所示。,6.4.1 常量與變量,常量就是在程序執(zhí)行過程中不改變值的數(shù)據(jù)量,變量就是在程序運行過程中可以改變值的數(shù)據(jù)量。常量和變量是計算機程序處理的數(shù)據(jù)對象。 1常量 常量在程序中是不接受程序修改的固定值,C51中的常量可為任意數(shù)據(jù)類型。 2變量 變量在程序中是可以被程序修改的數(shù)據(jù)量。一個完整的變量應該有類型說明符以及變量標識符。C51編譯器在單片機內(nèi)存中單獨劃分一定的存儲單元,用來存放該變量的值。,6.4.2 整型

10、數(shù)據(jù),整型數(shù)據(jù)是整數(shù)類型的數(shù)據(jù)。整型數(shù)據(jù)是最常用的數(shù)據(jù)類型,下面就介紹整型數(shù)據(jù)的說明、整型變量的定義以及整型常量的表示。 1整型數(shù)據(jù)說明 2整型變量定義 定義整型變量的一般格式是“類型說明符 變量標識符,變量標識符”。示例如下。 inta, b;/定義a、b為有符號短整型變量 unsigned longc, d;/定義c、d為無符號長整型變量 3整型常量表示 整型常量及整型常數(shù)可以表示十進制、八進制、十六進制的整數(shù)值。按不同的進制區(qū)分,整型常數(shù)有三種表示方法。,6.4.3 浮點型數(shù)據(jù),浮點型數(shù)據(jù)是用于表示包含小數(shù)點的數(shù)據(jù)類型。下面分別介紹在C51語言中浮點型數(shù)據(jù)的說明、浮點型數(shù)據(jù)的定義以及浮點

11、型常量的表示。 1浮點型數(shù)據(jù)說明:C51中支持如下三種類型的浮點數(shù),即float類型、double類型和long double類型。只不過,在C51語言中不具體區(qū)分這三種類型,都被當作float類型對待。因此,這三種浮點類型有相同的精度和取值范圍。浮點類型的變量字長為4個字節(jié)共32位二進制數(shù),取值范圍為3.4x10-383.4x10+38。另外,在C51語言中,浮點型數(shù)據(jù)均為有符號浮點數(shù),而沒有無符號浮點數(shù)。 2浮點型變量定義:浮點型變量的一般定義格式是“類型說明符 變量標識符,變量標識符”。同整型數(shù)據(jù)一樣,浮點型變量也可以同時定義多個。 3浮點型常量表示:浮點型常量通常稱為實型常量,其值可以

12、表示為十進制。浮點型常量的值由整數(shù)部分、尾數(shù)部分和指數(shù)部分組成。一般情況下,在不加說明的情況下,浮點型常量為正值。如果表示負值,需要在常量前使用負號。例如28.57、-57.63、-7.2e-16、8.265。,6.4.4 字符型數(shù)據(jù),字符型變量是用來存放字符的變量類型。字符型變量只能存放一個字符。在信息的傳遞中,字符、文字等是經(jīng)常用到的。下面介紹C51中的字符型數(shù)據(jù)的定義和使用等。 1字符型變量定義:在C51語言中,可以定義兩種類型的字符型變量:有符號字符變量和無符號字符變量。字符型變量的定義格式示例如下: char a:/定義a為有符號字符變量 unsigned char b;/定義b為無

13、符號字符變量 2字符常量表示:字符常量是指用一對單引號括起來的一個字符。其中單引號只起定界作用,并不表示字符本身,例如F,7,!等。在C51語言中,字符常量單引號中的字符不能是單引號()和反斜杠()。如果需要使用這兩個字符,則需要采用轉(zhuǎn)義字符來表示,這將在后面介紹。 3轉(zhuǎn)義字符:轉(zhuǎn)義字符用于表示ASCII碼字符集中不可打印的控制字符和特定功能的字符。轉(zhuǎn)義字符是C51語言中表示字符的一種特殊形式。,6.4.5 指針型數(shù)據(jù),指針型數(shù)據(jù)是指向變量所存放地址的數(shù)據(jù)類型。指針型數(shù)據(jù)是一種特殊的數(shù)據(jù)類型,根據(jù)所指的變量類型不同,可以分為整型指針、浮點型指針、字符型指針、結(jié)構(gòu)型指針和聯(lián)合指針。在C51語言中

14、,指針型變量的定義格式如下: int *i;/定義整型指針變量 float *f;/定義浮點型指針變量 char *c;/定義字符型指針變量 struct*stu;/定義結(jié)構(gòu)型指針變量 union *uni;/定義聯(lián)合指針變量,6.4.6 無值型數(shù)據(jù),無值型數(shù)據(jù)是一個特殊的類型,其字節(jié)長度為0。在C51語言中,無值型主要有兩個用途: 定義一個同一類型指針,該指針可根據(jù)需要動態(tài)分配內(nèi)存。 在定義和使用函數(shù)時,明確地表示這個函數(shù)不返回任何值。 無值型數(shù)據(jù)的聲明示例如下: void *buf;/buf被定義為無值型指針,6.5 C51的變量作用域,變量作用域是在程序中變量起作用的范圍。C51語言中,

15、使用變量前需要首先聲明該變量。由于C51程序中可以包含多個函數(shù)和程序文件,因此使用變量時,需要注意變量有效作用范圍的問題,即變量的作用域。,6.5.1 基本規(guī)則,在C51語言中規(guī)定,在塊結(jié)構(gòu)中進行定義的變量,其有效使用范圍只在該塊結(jié)構(gòu)內(nèi)。其中,塊結(jié)構(gòu)是任何以花括號括起來的一段程序,通常稱為復合語句。在C51程序中,一些函數(shù)和語句是以一對花括號“”和“”來構(gòu)成的,這也是塊結(jié)構(gòu)的一種,示例如下: #include /頭文件 void main() /主函數(shù) int i;/定義整型變量 i=23;/變量賦值 if(i%2=0)/判斷是否是偶數(shù),如果是執(zhí)行下面的語句 int j;/定義整型變量 j=2

16、;/變量賦值 printf(i=%d,i);/輸出變量i,正確 printf(j=%d,j);/輸出變量j,錯誤 ,6.5.2 自動變量,自動變量是以關(guān)鍵字auto標識的變量類型。其聲明格式為“auto 類型說明符 變量標識符,變量標識符”。自動型變量可以在如下兩種情況下使用。 在函數(shù)的內(nèi)部進行定義,其作用域的范圍為該函數(shù)的內(nèi)部,在該函數(shù)之外變量無效。 在程序塊中聲明,其作用域的范圍為該程序塊。 在編譯C51程序時,自動型變量根據(jù)變量類型動態(tài)分配存儲空間。動態(tài)分配的過程是,在程序執(zhí)行到該函數(shù)時,為其自動分配存儲空間,當該函數(shù)執(zhí)行完畢后,立即結(jié)束該變量的存儲空間,即該自動型變量消失。這便是為什么

17、在函數(shù)內(nèi)部定義的變量,不能在函數(shù)外引用的原因。,6.5.3 外部變量,外部變量一般定義在所有函數(shù)的外部,即整個程序文件的最前面,也稱為全局變量。外部變量的作用域是整個程序文件,其可以被該程序文件中的任何函數(shù)使用。 在編譯C51程序時,外部變量根據(jù)變量類型被靜態(tài)地分配適當?shù)拇鎯臻g。在整個程序運行過程中,該變量一旦分配空間,便不會消失。這也是外部變量對整個程序文件有效的原因。,6.5.4 靜態(tài)變量,靜態(tài)變量以關(guān)鍵字static聲明,聲明格式為“static 類型說明符 變量標識符,變量標識符”。 在C51語言中,根據(jù)聲明的位置不同,靜態(tài)變量可以分為如下兩種: 內(nèi)部靜態(tài)變量,在函數(shù)內(nèi)部定義; 外部

18、靜態(tài)變量,在函數(shù)外部定義。 在編譯C51程序時,根據(jù)數(shù)據(jù)類型靜態(tài)地給靜態(tài)變量分配合適的存儲空間,并在程序運行過程中始終占有該存儲空間。 另外,C51語言允許將函數(shù)定義為靜態(tài)型的。這樣,只有同一文件中的其他函數(shù)才能調(diào)用這個靜態(tài)型函數(shù),同一工程項目中的其他文件不能調(diào)用訪問,這樣,可以既有利于程序的模塊化設(shè)計,又可以防止和其他文件中的函數(shù)有重名的情況。,6.5.5 寄存器變量,寄存器變量以關(guān)鍵字register聲明,聲明格式為“register 類型說明符 變量標識符,變量標識符”。示例如下: register char ch; register double db; 寄存器變量常用于某一變量名頻繁

19、使用的情況,這樣做可以提高系統(tǒng)的運算速度。因為普通的變量一般存儲在內(nèi)存中,而寄存器變量被存儲在CPU的寄存器中。 在C51語言中,只允許同時定義兩個寄存器變量,如果多于兩個,程序在編譯時會自動地將兩個之外的寄存器變量當作非寄存器變量來處理。,6.6 分隔符與const修飾符,分隔符和修飾符是計算機語言中最重要的組成部分,這里介紹C51語言中的分隔符和const修飾符。,6.6.1 C51分隔符,分隔符在C51程序語言中起輔助標識和分界的作用。一般分為兩種,簡單分隔符和復合分隔符。簡單分隔符是除字母、數(shù)字、下劃線以外的單個ASCII字符,如:+、-、*、/、!、|、=、.、,、:、;、#等。復合

20、分隔符是特定字符的某種組合,例如=、(、)等。 分隔符常用于數(shù)組、語句等情況,下面舉出常用的分隔符示例。 用“;”進行隔離語句,例如int r; 用“ ”對數(shù)組說明,例如char ch =Hello Word?。?用“( )”進行隔離,例如s=area(r); 用“,”進行隔離,例如char ch1,ch2,ch3; 用“”進行隔離復合語句,例如for i=0;i100;i+; 用“*”做指針,例如char *ponter; 用“#”做預處理偽指令,例如#define PI 3.1415926; 用“”標識特殊寄存器的位,例如sbit P00=P00。,6.6.2 const修飾符,const

21、修飾符主要用來定義常量或變量。其定義格式為“const =;”。示例如下: const double PI=3.1415926; 在C51語言中,用關(guān)鍵字const修飾的是一類特殊的常量,一般稱為符號常量或const變量。從編譯的角度看,程序在編譯時,將視const變量為一個常量,系統(tǒng)不為其分配內(nèi)存。在程序中遇到該const變量時,將用定義時的初值來代替。 這里需要注意的是,使用const修飾的變量不能在程序中修改其值,這樣一方面可以防止程序運行時該值被意外修改,另一方面也可以對于程序中經(jīng)常使用的值做統(tǒng)一修改,便于調(diào)試程序。,6.7 運算符,運算符是一個表示特定的算術(shù)或邏輯操作的符號,也稱為操

22、作符。例如“+”號,表示了一個相加運算;“ 3地址操作運算符:地址操作運算符主要有兩種:“*”和“ 這里的表達式需要用結(jié)合性來判斷,因為運算符“-”和“+”相對于運算的操作數(shù)來說是“左”結(jié)合的,所以實際參與計算的是“-5”和“+7”,運算的結(jié)果為2。,6.8 表達式,表達式是由運算符把需要進行運算的各個量連接起來而構(gòu)成的一個整體。表達式主要由操作數(shù)和運算符組成。操作數(shù)一般包括常量和變量,有時甚至可以包括函數(shù)和表達式等。同運算符一樣,表達式也是C51語言中的基本組成部分。,6.8.1 算術(shù)表達式,算術(shù)表達式是指用算術(shù)運算符和括號將操作數(shù)連接起來,并且符合C51語法規(guī)則的式子。例如:a+(b-c)*2-b,這是一個正確的算術(shù)表達式。算術(shù)表達式比較簡單,主要應該注意算術(shù)運算符的計算順序。這里僅舉一個例子,來演示算術(shù)表達式的應用,程序示例如下。 #include /頭文件 void main()/主函數(shù) int i,j,x,y;/聲明變量 i=23; j=12; x=i+j;/算術(shù)運算 y=i-j;/算術(shù)運算 printf(i+j=%dni-j=%dn,x,y);/輸出結(jié)果 ,6.8.2 賦值表達式,賦值表達式是指由賦值運算符將一個變量和一個表達式連接起來的式子,其一般形式為: 例如“x=15”就

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論