第二課51單片機C語言編程規(guī)范(改)_第1頁
第二課51單片機C語言編程規(guī)范(改)_第2頁
第二課51單片機C語言編程規(guī)范(改)_第3頁
第二課51單片機C語言編程規(guī)范(改)_第4頁
第二課51單片機C語言編程規(guī)范(改)_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、51單片機單片機C語言編程規(guī)范語言編程規(guī)范源碼工作室源碼工作室原碼工作室原碼工作室學習單片機學習單片機C語言的必要性語言的必要性 隨著單片機性能的不斷提高,隨著單片機性能的不斷提高,C C語言編譯調語言編譯調試工具的不斷完善,以及現(xiàn)在對單片機產(chǎn)品輔助試工具的不斷完善,以及現(xiàn)在對單片機產(chǎn)品輔助功能的要求、對開發(fā)周期不斷縮短的要求,使得功能的要求、對開發(fā)周期不斷縮短的要求,使得越來越多的單片機編程人員轉向使用越來越多的單片機編程人員轉向使用C C語言,因語言,因此有必要在單片機課程中講授此有必要在單片機課程中講授“單片機單片機C C語言語言”。原碼工作室原碼工作室C語言編程的優(yōu)勢語言編程的優(yōu)勢1語

2、言簡潔、緊湊,使用方便、靈活。語言簡潔、緊湊,使用方便、靈活。2運算符豐富。運算符豐富。3數(shù)據(jù)結構豐富。具有現(xiàn)代化語言的各種數(shù)據(jù)結構。數(shù)據(jù)結構豐富。具有現(xiàn)代化語言的各種數(shù)據(jù)結構。4可進行結構化程序設計。可進行結構化程序設計。5可以直接對計算機硬件進行操作。可以直接對計算機硬件進行操作。6生成的目標代碼質量高,程序執(zhí)行效率高。生成的目標代碼質量高,程序執(zhí)行效率高。7可移植性好??梢浦残院?。8. 容易實現(xiàn)模塊化開發(fā)容易實現(xiàn)模塊化開發(fā)9. 方便調試與維護程序方便調試與維護程序原碼工作室原碼工作室C語言與語言與匯編匯編的區(qū)別的區(qū)別 用匯編語言編寫單片機程序時,必須要考慮其用匯編語言編寫單片機程序時,必

3、須要考慮其存儲器的結構,尤其要考慮其片內數(shù)據(jù)存儲器、特存儲器的結構,尤其要考慮其片內數(shù)據(jù)存儲器、特殊功能寄存器是否正確合理的使用,以及按照實際殊功能寄存器是否正確合理的使用,以及按照實際地址端口數(shù)據(jù)的處理。地址端口數(shù)據(jù)的處理。 用用C51編寫程序,不像匯編語言那樣需要具體地編寫程序,不像匯編語言那樣需要具體地組織、分配存儲器資源,只是組織、分配存儲器資源,只是C51對數(shù)據(jù)類型和變量對數(shù)據(jù)類型和變量的定義,必須要與單片機的存儲結構相關聯(lián),否則的定義,必須要與單片機的存儲結構相關聯(lián),否則編譯器不能正確地映射定位。編譯器不能正確地映射定位。 原碼工作室原碼工作室單片機單片機C語言與語言與ANSI 的

4、區(qū)別的區(qū)別 用用C51編寫單片機程序,與用編寫單片機程序,與用ANSI C編寫程序編寫程序的不同之處是,需要根據(jù)單片機存儲器結構及內部的不同之處是,需要根據(jù)單片機存儲器結構及內部資源,定義相應的數(shù)據(jù)類型和變量。資源,定義相應的數(shù)據(jù)類型和變量。 其它的語法規(guī)定、程序結構及程序設計方法,其它的語法規(guī)定、程序結構及程序設計方法,都與都與ANSI C相同。相同。原碼工作室原碼工作室C語言的程序結構語言的程序結構 C語言程序采用函數(shù)結構,每個語言程序采用函數(shù)結構,每個C語言程序由一個語言程序由一個或多個函數(shù)組成,在這些函數(shù)中至少應包含一個主函或多個函數(shù)組成,在這些函數(shù)中至少應包含一個主函數(shù)數(shù)main()

5、,也可以包含一個,也可以包含一個main()函數(shù)和若干個其它函數(shù)和若干個其它的功能函數(shù)。不管的功能函數(shù)。不管main()函數(shù)放于何處,程序總是從函數(shù)放于何處,程序總是從main()函數(shù)開始執(zhí)行,執(zhí)行到函數(shù)開始執(zhí)行,執(zhí)行到main()函數(shù)結束則結束。函數(shù)結束則結束??梢栽诳梢栽趍ain()函數(shù)中調用其它函數(shù),其它函數(shù)也可以函數(shù)中調用其它函數(shù),其它函數(shù)也可以相互調用,但相互調用,但main()函數(shù)只能調用其它的功能函數(shù),函數(shù)只能調用其它的功能函數(shù),而不能被其它的函數(shù)所調用而不能被其它的函數(shù)所調用。 功能函數(shù)可以是功能函數(shù)可以是C語言編譯器提供的庫函數(shù),也語言編譯器提供的庫函數(shù),也可以是由用戶定義的

6、自定義函數(shù)。在編制可以是由用戶定義的自定義函數(shù)。在編制C程序時,程序時,程序的開始部分一般是預處理命令、函數(shù)說明和變量程序的開始部分一般是預處理命令、函數(shù)說明和變量定義等。定義等。原碼工作室原碼工作室C語言與語言與89C51單片機單片機 用用C C語言編寫的語言編寫的89C5189C51單片機應用程序,不用像單片機應用程序,不用像匯編語言那樣須具體組織、分配存儲器資源和處理匯編語言那樣須具體組織、分配存儲器資源和處理端口數(shù)據(jù),但在端口數(shù)據(jù),但在C C語言編程中,對數(shù)據(jù)類型與變量的語言編程中,對數(shù)據(jù)類型與變量的定義,必須要與單片機的存儲結構相關聯(lián),否則編定義,必須要與單片機的存儲結構相關聯(lián),否則

7、編譯器不能正確地映射定位。譯器不能正確地映射定位。 C C語言編寫單片機應用程序時,需根據(jù)單片機語言編寫單片機應用程序時,需根據(jù)單片機存儲結構及內部資源定義相應的數(shù)據(jù)類型和變量,存儲結構及內部資源定義相應的數(shù)據(jù)類型和變量,而標準的而標準的C C語言程序不需要考慮這些問題;語言程序不需要考慮這些問題;原碼工作室原碼工作室C語言與語言與89C51單片機單片機 C51包含的數(shù)據(jù)類型、變量存儲模式、輸入輸出包含的數(shù)據(jù)類型、變量存儲模式、輸入輸出處理、函數(shù)等方面與標準的處理、函數(shù)等方面與標準的C語言有一定的區(qū)別。其語言有一定的區(qū)別。其它的語法規(guī)則、程序結構及程序設計方法等與標準它的語法規(guī)則、程序結構及程

8、序設計方法等與標準的的C語言程序設計相同。語言程序設計相同。 現(xiàn)在支持現(xiàn)在支持89C51系列單片機的系列單片機的C語言編譯器有很語言編譯器有很多種,如多種,如American Automation、Avocet、BSO/TASKING、DUNFIELD SHAREWARE、KEIL/Franklin等。各種編譯器的基本情況相同,但等。各種編譯器的基本情況相同,但具體處理時有一定的區(qū)別,其中具體處理時有一定的區(qū)別,其中KEIL/Franklin以它以它的代碼緊湊和使用方便等特點優(yōu)于其它編譯器,現(xiàn)的代碼緊湊和使用方便等特點優(yōu)于其它編譯器,現(xiàn)在使用特別廣泛。在使用特別廣泛。 本章主要以本章主要以KE

9、IL編譯器介紹編譯器介紹89C51單片機單片機C語言語言程序設計。程序設計。原碼工作室原碼工作室C51程序結構程序結構 C51的語法規(guī)定、程序結構及程序設計方法都與的語法規(guī)定、程序結構及程序設計方法都與標準的標準的C語言程序設計相同,但語言程序設計相同,但C51程序與標準的程序與標準的C程序在以下幾個方面不一樣:程序在以下幾個方面不一樣: (1)C51中定義的庫函數(shù)和標準中定義的庫函數(shù)和標準C語言定義的庫語言定義的庫函數(shù)不同。標準的函數(shù)不同。標準的C語言定義的庫函數(shù)是按通用微型語言定義的庫函數(shù)是按通用微型計算機來定義的,而計算機來定義的,而C51中的庫函數(shù)是按中的庫函數(shù)是按89C51單片單片機

10、相應情況來定義的;機相應情況來定義的; (2)C51中的數(shù)據(jù)類型與標準中的數(shù)據(jù)類型與標準C的數(shù)據(jù)類型也有的數(shù)據(jù)類型也有一定的區(qū)別,在一定的區(qū)別,在C51中還增加了幾種針對中還增加了幾種針對89C51單片單片機特有的數(shù)據(jù)類型;機特有的數(shù)據(jù)類型;原碼工作室原碼工作室C51程序結構程序結構 (3)C51變量的存儲模式與標準變量的存儲模式與標準C中變量的存儲模中變量的存儲模式不一樣,式不一樣,C51中變量的存儲模式是與中變量的存儲模式是與89C51單片機單片機的存儲器緊密相關;的存儲器緊密相關; (4)C51與標準與標準C的輸入輸出處理不一樣,的輸入輸出處理不一樣,C51中中的輸入輸出是通過的輸入輸出

11、是通過89C51串行口來完成的,輸入輸出串行口來完成的,輸入輸出指令執(zhí)行前必須要對串行口進行初始化;指令執(zhí)行前必須要對串行口進行初始化; (5)C51與標準與標準C在函數(shù)使用方面也有一定的區(qū)別,在函數(shù)使用方面也有一定的區(qū)別,C51中有專門的中斷函數(shù)。中有專門的中斷函數(shù)。原碼工作室原碼工作室C51數(shù)據(jù)類型數(shù)據(jù)類型 C51的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和組合數(shù)據(jù)類的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和組合數(shù)據(jù)類型,情況與標準型,情況與標準C中的數(shù)據(jù)類型基本相同,但其中中的數(shù)據(jù)類型基本相同,但其中char型與型與short型相同,型相同,float型與型與double型相同,另型相同,另外,外,C51中還有專門針

12、對于中還有專門針對于89C51單片機的特殊功能單片機的特殊功能寄存器型和位類型。寄存器型和位類型。 原碼工作室原碼工作室C51數(shù)據(jù)類型數(shù)據(jù)類型原碼工作室原碼工作室特殊功能寄存器型特殊功能寄存器型 這是這是C51擴充的數(shù)據(jù)類型,用于訪問擴充的數(shù)據(jù)類型,用于訪問89C51單片單片機中的特殊功能寄存器數(shù)據(jù),它分機中的特殊功能寄存器數(shù)據(jù),它分sfr和和sfr16兩種類兩種類型。其中:型。其中: sfr為字節(jié)型特殊功能寄存器類型,占一個內存為字節(jié)型特殊功能寄存器類型,占一個內存單元,利用它可以訪問單元,利用它可以訪問89C51內部的所有特殊功能寄內部的所有特殊功能寄存器;存器; sfr16為雙字節(jié)型特殊

13、功能寄存器類型,占用兩為雙字節(jié)型特殊功能寄存器類型,占用兩個字節(jié)單元,利用它可以訪問個字節(jié)單元,利用它可以訪問89C51內部的所有兩個內部的所有兩個字節(jié)的特殊功能寄存器。字節(jié)的特殊功能寄存器。 在在C51中對特殊功能寄存器的訪問必須先用中對特殊功能寄存器的訪問必須先用sfr或或sfr16進行聲明。進行聲明。原碼工作室原碼工作室位類型位類型 這也是這也是C51中擴充的數(shù)據(jù)類型,用于訪問中擴充的數(shù)據(jù)類型,用于訪問MCS-51單片機中的可尋址的位單元。在單片機中的可尋址的位單元。在C51中,支持兩中,支持兩種位類型:種位類型:bit型和型和sbit型。它們在內存中都只占一型。它們在內存中都只占一個二

14、進制位,其值可以是個二進制位,其值可以是“1”或或“0”。 其中:用其中:用bit定義的位變量在定義的位變量在C51編譯器編譯時,編譯器編譯時,在不同的時候位地址是可以變化的,而用在不同的時候位地址是可以變化的,而用sbit定義的定義的位變量必須與位變量必須與89C51單片機的一個可以尋址位單元單片機的一個可以尋址位單元或可位尋址的字節(jié)單元中的某一位聯(lián)系在一起,在或可位尋址的字節(jié)單元中的某一位聯(lián)系在一起,在C51編譯器編譯時,其對應的位地址是不可變化的。編譯器編譯時,其對應的位地址是不可變化的。原碼工作室原碼工作室位類型位類型 格式如下:格式如下: sbit 位變量名位變量名=位地址;位地址;

15、 如位地址為位直接如位地址為位直接地址,其取值范圍為地址,其取值范圍為0 x000 xff;如位地址是;如位地址是可位尋址變量帶位號或可位尋址變量帶位號或特殊功能寄存器名帶位特殊功能寄存器名帶位號,則在它前面須對可號,則在它前面須對可位尋址變量或特殊功能位尋址變量或特殊功能寄存器進行定義。字節(jié)寄存器進行定義。字節(jié)地址與位號之間、特殊地址與位號之間、特殊功能寄存器與位號之間功能寄存器與位號之間一般用一般用“”作間隔。作間隔。原碼工作室原碼工作室位類型位類型 在在C51中,為了用戶處理方便,中,為了用戶處理方便,C51編譯器把編譯器把89C51單片機的常用的特殊功能寄存器和特殊位進行單片機的常用的

16、特殊功能寄存器和特殊位進行了定義,放在一個了定義,放在一個“reg51.h”或或“reg52.h”的頭文件的頭文件中,當用戶要使用時,只須要在使用之前用一條預中,當用戶要使用時,只須要在使用之前用一條預處理命令處理命令#include 把這個頭文件包含到程把這個頭文件包含到程序中,然后就可使用殊功能寄存器名和特殊位名稱。序中,然后就可使用殊功能寄存器名和特殊位名稱。原碼工作室原碼工作室數(shù)據(jù)轉換數(shù)據(jù)轉換 在在C51語言程序中,有可能會出現(xiàn)在運算中數(shù)據(jù)語言程序中,有可能會出現(xiàn)在運算中數(shù)據(jù)類型不一致的情況。類型不一致的情況。C51允許任何標準數(shù)據(jù)類型的隱允許任何標準數(shù)據(jù)類型的隱式轉換。式轉換。 1)

17、自動轉換)自動轉換轉換規(guī)則是向高精度數(shù)據(jù)類型轉換、向有符號數(shù)轉換規(guī)則是向高精度數(shù)據(jù)類型轉換、向有符號數(shù)據(jù)類型轉換。如字符型變量與整型變量相加時,則據(jù)類型轉換。如字符型變量與整型變量相加時,則位變量先轉換字符型或整型數(shù)據(jù),然后相加。位變量先轉換字符型或整型數(shù)據(jù),然后相加。2)強制轉換)強制轉換像像ANSI C一樣,通過強制類型轉換的方式進行一樣,通過強制類型轉換的方式進行轉換。如:轉換。如:unsignedintb;floatc;原碼工作室原碼工作室數(shù)據(jù)轉換數(shù)據(jù)轉換 隱式轉換的優(yōu)先級順序如下:隱式轉換的優(yōu)先級順序如下: bitcharintlongfloat signedunsigned 也就是

18、說,當也就是說,當char型與型與int型進行運算時,先自型進行運算時,先自動對動對char型擴展為型擴展為int型,然后與型,然后與int型進行運算,運型進行運算,運算結果為算結果為int型。型。C51除了支持隱式類型轉換外,還可除了支持隱式類型轉換外,還可以通過強制類型轉換符以通過強制類型轉換符“()()”對數(shù)據(jù)類型進行人對數(shù)據(jù)類型進行人為的強制轉換。為的強制轉換。 C5l編譯器除了能支持以上這些基本數(shù)據(jù)類型之編譯器除了能支持以上這些基本數(shù)據(jù)類型之外,還能支持一些復雜的組合型數(shù)據(jù)類型,如數(shù)組外,還能支持一些復雜的組合型數(shù)據(jù)類型,如數(shù)組類型、指針類型、結構類型、聯(lián)合類型等這些復雜類型、指針類

19、型、結構類型、聯(lián)合類型等這些復雜的數(shù)據(jù)類型,在后面將相繼介紹。的數(shù)據(jù)類型,在后面將相繼介紹。原碼工作室原碼工作室C51數(shù)據(jù)的存儲數(shù)據(jù)的存儲 MCS-51單片機只有單片機只有bit和和unsigned char兩種數(shù)據(jù)兩種數(shù)據(jù)類型支持機器指令類型支持機器指令,而其它類型的數(shù)據(jù)都需要轉換,而其它類型的數(shù)據(jù)都需要轉換成成bit或或unsigned char型進行存儲。型進行存儲。為了減少單片機的存儲空間和提高運行速度,要為了減少單片機的存儲空間和提高運行速度,要盡可能地使用盡可能地使用unsigned char型數(shù)據(jù)。型數(shù)據(jù)。 一、位變量的存儲一、位變量的存儲bit和和sbit型位變量,直接存于型位

20、變量,直接存于RAM的位尋址空間,的位尋址空間,包括低包括低128位和特殊功能寄存器位。位和特殊功能寄存器位。原碼工作室原碼工作室C51數(shù)據(jù)的存儲數(shù)據(jù)的存儲 二、字符變量的存儲二、字符變量的存儲字符變量字符變量(char):無論是):無論是unsigned char數(shù)據(jù)還數(shù)據(jù)還是是signed char數(shù)據(jù),均為數(shù)據(jù),均為1個字節(jié),能夠被直接存儲個字節(jié),能夠被直接存儲在在RAM中,可以存儲在中,可以存儲在00 x7f區(qū)域,也可以存儲在區(qū)域,也可以存儲在0 x800 xff區(qū)域,與變量的定義有關。區(qū)域,與變量的定義有關。unsigned char數(shù):可直接被數(shù):可直接被MSC-51接受接受sig

21、ned char數(shù)據(jù):用補碼表示。需要額外的操作數(shù)據(jù):用補碼表示。需要額外的操作來測試、處理符號位,使用的是兩種庫函數(shù),代碼來測試、處理符號位,使用的是兩種庫函數(shù),代碼量大,運算速度降低。量大,運算速度降低。原碼工作室原碼工作室C51數(shù)據(jù)的存儲數(shù)據(jù)的存儲 三、整型變量的存儲三、整型變量的存儲整型變量整型變量(int):不管是):不管是unsigned int數(shù)據(jù)還是數(shù)據(jù)還是signed int數(shù)數(shù)據(jù),均為據(jù),均為2個字節(jié),其存儲方法是個字節(jié),其存儲方法是高位字節(jié)保存在低地址(在前高位字節(jié)保存在低地址(在前面),低位字節(jié)保存在高地址面),低位字節(jié)保存在高地址(在后面)(在后面) 。 例如例如:整

22、型變量的值為:整型變量的值為0 x1234,在內存中的存放如右圖所示。在內存中的存放如右圖所示。signed int數(shù)據(jù)用補碼表示。數(shù)據(jù)用補碼表示。原碼工作室原碼工作室C51數(shù)據(jù)的存儲數(shù)據(jù)的存儲 四、長整型變量的存儲四、長整型變量的存儲長整型變量長整型變量(long)為)為4個字個字節(jié),其存儲方法與整型數(shù)據(jù)一樣,節(jié),其存儲方法與整型數(shù)據(jù)一樣,是是最高位字節(jié)保存的地址最低最高位字節(jié)保存的地址最低(在最前面),最低位字節(jié)保存(在最前面),最低位字節(jié)保存的地址最高(在最后面)的地址最高(在最后面)。 如長整型變量的值為如長整型變量的值為0 x12345678,在內存中的存放方,在內存中的存放方法如右

23、圖所示。不管是法如右圖所示。不管是unsigned long數(shù)據(jù)還是數(shù)據(jù)還是signed long數(shù)據(jù)數(shù)據(jù)原碼工作室原碼工作室C51數(shù)據(jù)的存儲數(shù)據(jù)的存儲 五、浮點型變量的存儲五、浮點型變量的存儲 浮點型變量浮點型變量(fload)占)占4個字節(jié),用指數(shù)方式表個字節(jié),用指數(shù)方式表示,其具體格式與編譯器有關。示,其具體格式與編譯器有關。 對于對于Keil C,采用的是,采用的是IEEE-754標準,具有標準,具有24位位精度,尾數(shù)的最高位始終為精度,尾數(shù)的最高位始終為1,因而不保存。具體分,因而不保存。具體分布為:布為:1位符號位,位符號位,8位階碼位,位階碼位,23位尾數(shù),如下圖位尾數(shù),如下圖所

24、示。所示。 原碼工作室原碼工作室C51數(shù)據(jù)的存儲數(shù)據(jù)的存儲 符號位符號位S:1表示負數(shù),表示負數(shù),0表示正數(shù)。表示正數(shù)。 階碼階碼:用移碼表示。如,實際階碼:用移碼表示。如,實際階碼-126用用1表示,表示,實際階碼實際階碼0用用127表示,即實際階碼數(shù)加上表示,即實際階碼數(shù)加上127得到階得到階碼的表達數(shù)。碼的表達數(shù)。 階碼數(shù)值范圍階碼數(shù)值范圍:-126+128。原碼工作室原碼工作室C51數(shù)據(jù)的存儲數(shù)據(jù)的存儲 例如:浮點數(shù)例如:浮點數(shù)-12.5符號位為符號位為1,12.5的二進制數(shù)的二進制數(shù)1100.1=1.1001E+0011, 階碼數(shù)值為:階碼數(shù)值為:3+127=130=10000010

25、B, 尾數(shù)為尾數(shù)為1001。 因此,其十六進制數(shù)為因此,其十六進制數(shù)為0 xC1480000,則存儲結構如右,則存儲結構如右圖所示。圖所示。 原碼工作室原碼工作室C51變量變量 C51變量定義的一般格式為:變量定義的一般格式為: 存儲類型存儲類型 數(shù)據(jù)類型數(shù)據(jù)類型 存儲區(qū)存儲區(qū) 變量名變量名1=初值初值 ,變量名變量名2=初值初值 , 或或 存儲類型存儲類型存儲區(qū)存儲區(qū) 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名1=初值初值 ,變量名變量名2=初值初值 ,可見變量(非位變量)的定義由可見變量(非位變量)的定義由4部分組成,即部分組成,即在變量定義時,指定變量在變量定義時,指定變量4種屬性。種屬性。原碼工作

26、室原碼工作室變量存儲種類變量存儲種類 存儲種類是指變量在程序執(zhí)行過程中的作用范圍。存儲種類是指變量在程序執(zhí)行過程中的作用范圍。C51變量的存儲種類有四種,分別是變量的存儲種類有四種,分別是自動自動(auto),外部外部(extern)、靜態(tài)靜態(tài)(static)和和寄存器寄存器(register)。 1auto: 使用使用auto定義的變量稱為自動變量,其作用范圍定義的變量稱為自動變量,其作用范圍在定義它的函數(shù)體或復合語句內部,當定義它的函在定義它的函數(shù)體或復合語句內部,當定義它的函數(shù)體或復合語句執(zhí)行時,數(shù)體或復合語句執(zhí)行時,C51才為該變量分配內存空才為該變量分配內存空間,結束時占用的內存空間

27、釋放。自動變量一般分間,結束時占用的內存空間釋放。自動變量一般分配在內存的堆??臻g中。定義變量時,如果省略存配在內存的堆??臻g中。定義變量時,如果省略存儲種類,則該變量默認為自動儲種類,則該變量默認為自動(auto)變量變量原碼工作室原碼工作室 2extern: 使用使用extern定義的變量稱為外部變量。在一個函數(shù)體定義的變量稱為外部變量。在一個函數(shù)體內,要使用一個已在該函數(shù)體外或別的程序中定義過的內,要使用一個已在該函數(shù)體外或別的程序中定義過的外部變量時,該變量在該函數(shù)體內要用外部變量時,該變量在該函數(shù)體內要用extern說明。外部說明。外部變量被定義后分配固定的內存空間,在程序整個執(zhí)行時

28、變量被定義后分配固定的內存空間,在程序整個執(zhí)行時間內都有效,直到程序結束才釋放。間內都有效,直到程序結束才釋放。 3static: 使用使用static定義的變量稱為靜態(tài)變量。它又分為內部定義的變量稱為靜態(tài)變量。它又分為內部靜態(tài)變量和外部靜態(tài)變量。在函數(shù)體內部定義的靜態(tài)變靜態(tài)變量和外部靜態(tài)變量。在函數(shù)體內部定義的靜態(tài)變量為內部靜態(tài)變量,它在對應的函數(shù)體內有效,一直存量為內部靜態(tài)變量,它在對應的函數(shù)體內有效,一直存在,但在函數(shù)體外不可見,這樣不僅使變量在定義它的在,但在函數(shù)體外不可見,這樣不僅使變量在定義它的函數(shù)體外被保護,還可以實現(xiàn)當離開函數(shù)時值不被改變。函數(shù)體外被保護,還可以實現(xiàn)當離開函數(shù)時

29、值不被改變。外部靜態(tài)變量上在函數(shù)外部定義的靜態(tài)變量。它在程序外部靜態(tài)變量上在函數(shù)外部定義的靜態(tài)變量。它在程序中一直存在,但在定義的范圍之外是不可見的。如在多中一直存在,但在定義的范圍之外是不可見的。如在多文件或多模塊處理中,外部靜態(tài)變量只在文件內部或模文件或多模塊處理中,外部靜態(tài)變量只在文件內部或模塊內部有效。塊內部有效。原碼工作室原碼工作室 4register: 使用使用register定義的變量稱為寄存器變量。它定義定義的變量稱為寄存器變量。它定義的變量存放在的變量存放在CPU內部的寄存器中,處理速度快,內部的寄存器中,處理速度快,但數(shù)目少。但數(shù)目少。C51編譯器編譯時能自動識別程序中使用

30、編譯器編譯時能自動識別程序中使用頻率最高的變量,并自動將其作為寄存器變量,用頻率最高的變量,并自動將其作為寄存器變量,用戶可以無需專門聲明。戶可以無需專門聲明。原碼工作室原碼工作室存儲器類型存儲器類型 存儲器類型是用于指明變量所處的單片機的存儲器區(qū)存儲器類型是用于指明變量所處的單片機的存儲器區(qū)域情況。存儲器類型與存儲種類完全不同。域情況。存儲器類型與存儲種類完全不同。C51編譯器能編譯器能識別的存儲器類型有以下幾種,見表所示。識別的存儲器類型有以下幾種,見表所示。原碼工作室原碼工作室【例例】變量定義存儲種類和存儲器類型相關情況。變量定義存儲種類和存儲器類型相關情況。 char data var

31、l; /*在片內在片內RAM低低128B定義用直接尋址定義用直接尋址方式訪問的字符型變量方式訪問的字符型變量var1*/ int idata var2; /*在片內在片內RAM256B定義用間接尋址方定義用間接尋址方式訪問的整型變量式訪問的整型變量var2*/ auto unsigned long data var3; /*在片內在片內RAM128B定義用直接尋址方式訪問的自動無符號長整型變量定義用直接尋址方式訪問的自動無符號長整型變量var3*/ extern float xdata var4; /*在片外在片外RAM64KB空間定空間定義用間接尋址方式訪問的外部實型變量義用間接尋址方式訪問

32、的外部實型變量var4*/ int code var5; /*在在ROM空間定義整型變量空間定義整型變量var5*/ unsign char bdata var6; /*在片內在片內RAM位尋址區(qū)位尋址區(qū)20H2FH單元定義可字節(jié)處理和位處理的無符號字符型單元定義可字節(jié)處理和位處理的無符號字符型變量變量var6*/原碼工作室原碼工作室 五特殊功能寄存器變量五特殊功能寄存器變量 89C51系列單片機片內有許多特殊功能寄存器,系列單片機片內有許多特殊功能寄存器,通過這些特殊功能寄存器可以控制通過這些特殊功能寄存器可以控制89C51系列單片機系列單片機的定時器、計數(shù)器、串口、的定時器、計數(shù)器、串口、

33、I/O及其它功能部件,每及其它功能部件,每一個特殊功能寄存器在片內一個特殊功能寄存器在片內RAM中都對應于一個字中都對應于一個字節(jié)單元或兩個字節(jié)單元。節(jié)單元或兩個字節(jié)單元。 在在C51中,允許用戶對這些特殊功能寄存器進行中,允許用戶對這些特殊功能寄存器進行訪問,訪問時須通過訪問,訪問時須通過sfr或或sfr16類型說明符進行定義,類型說明符進行定義,定義時須指明它們所對應的片內定義時須指明它們所對應的片內RAM單元的地址。單元的地址。格式如下:格式如下: sfr或或sfr16 特殊功能寄存器名特殊功能寄存器名=地址;地址; sfr用于對用于對89C51單片機中單字節(jié)的特殊功能寄存單片機中單字節(jié)

34、的特殊功能寄存器進行定義,器進行定義,sfr16用于對雙字節(jié)特殊功能寄存器進用于對雙字節(jié)特殊功能寄存器進行定義。特殊功能寄存器名一般用大寫字母表示。行定義。特殊功能寄存器名一般用大寫字母表示。地址一般用直接地址形式,具體特殊功能寄存器地地址一般用直接地址形式,具體特殊功能寄存器地址見前面內容。址見前面內容。原碼工作室原碼工作室 C51的運算符及表達式的運算符及表達式 在表達式的后邊加一個分號在表達式的后邊加一個分號“;”就構成了表達就構成了表達式語句式語句 ,如如: a=+b*9; x=8;y=7; +k; 可以一行放一個表達式形成表達式語句,也可可以一行放一個表達式形成表達式語句,也可以一行

35、放多個表達式形成表達式語句,這時每個表以一行放多個表達式形成表達式語句,這時每個表達式后面都必須帶達式后面都必須帶“;”號,另外,還可以僅由號,另外,還可以僅由個分號個分號“;”占一行形成一個表達式語句,這種語占一行形成一個表達式語句,這種語句稱為空語句。句稱為空語句。原碼工作室原碼工作室C51的運算符及表達式的運算符及表達式 空語句在程序設計中通常用于兩種情況:空語句在程序設計中通常用于兩種情況: (1)在程序中為有關語句提供標號,用以標記)在程序中為有關語句提供標號,用以標記程序執(zhí)行的位置。例如采用下面的語句可以構成一程序執(zhí)行的位置。例如采用下面的語句可以構成一個循環(huán)。個循環(huán)。 repea

36、t:;:; ; goto repeat; (2)在用)在用while語句構成的循環(huán)語句后面加一個語句構成的循環(huán)語句后面加一個分號,形成一個不執(zhí)行其它操作的空循環(huán)體。這種分號,形成一個不執(zhí)行其它操作的空循環(huán)體。這種結構通常用于對某位進行判斷,當不滿足條件則等結構通常用于對某位進行判斷,當不滿足條件則等待,滿足條件則執(zhí)行。待,滿足條件則執(zhí)行。原碼工作室原碼工作室復合語句復合語句 復合語句是由若干條語句組合而成的一種語句,復合語句是由若干條語句組合而成的一種語句,在在C51中,用一個大括號中,用一個大括號“ ”將若干條語句括在一將若干條語句括在一起就形成了一個復合語句,復合語句最后不需要以起就形成了

37、一個復合語句,復合語句最后不需要以分號分號“;”結束,但它內部的各條語句仍需以分號結束,但它內部的各條語句仍需以分號“;”結束。復合語句的一般形式為:結束。復合語句的一般形式為: 局部變量定義;局部變量定義; 語句語句l; 語句語句2; 原碼工作室原碼工作室復合語句復合語句 復合語句在執(zhí)行時,其中的各條單語句按順序依復合語句在執(zhí)行時,其中的各條單語句按順序依次執(zhí)行,整個復合語句在語法上等價于一條單語句,次執(zhí)行,整個復合語句在語法上等價于一條單語句,因此在因此在C51中可以將復合語句視為一條單語句。通常中可以將復合語句視為一條單語句。通常復合語句出現(xiàn)在函數(shù)中,實際上,函數(shù)的執(zhí)行部分復合語句出現(xiàn)在

38、函數(shù)中,實際上,函數(shù)的執(zhí)行部分(即函數(shù)體)就是一個復合語句;復合語句中的單(即函數(shù)體)就是一個復合語句;復合語句中的單語句一般是可執(zhí)行語句,此外還可以是變量的定義語句一般是可執(zhí)行語句,此外還可以是變量的定義語句(說明變量的數(shù)據(jù)類型)。在復合語句內部語語句(說明變量的數(shù)據(jù)類型)。在復合語句內部語句所定義的變量,稱為該復合語句中的局部變量,句所定義的變量,稱為該復合語句中的局部變量,它僅在當前這個復合語句中有效。利用復合語句將它僅在當前這個復合語句中有效。利用復合語句將多條單語句組合在多條單語句組合在起,以及在復合語句中進行局起,以及在復合語句中進行局部變量定義是部變量定義是C51語言的一個重要特

39、征。語言的一個重要特征。原碼工作室原碼工作室C51程序基本結構與相關語句程序基本結構與相關語句 C51的基本結構的基本結構: 一、順序結構一、順序結構 二、選擇結構二、選擇結構 三、循環(huán)結構三、循環(huán)結構 C51的相關語句的相關語句: 一、一、if else Switch/case 二、二、while do while for 三、三、break/continue 四、四、return原碼工作室原碼工作室函函 數(shù)數(shù)函數(shù)定義的一般函數(shù)定義的一般格式格式如下:如下:函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(形式參數(shù)表形式參數(shù)表) reentrantinterrupt musing n形式參數(shù)說明形式參數(shù)說明

40、局部變量定義局部變量定義 函數(shù)體函數(shù)體前面部件稱為函數(shù)的首部前面部件稱為函數(shù)的首部,后面稱為函數(shù)的尾部后面稱為函數(shù)的尾部,格式說明:格式說明:1函數(shù)類型函數(shù)類型函數(shù)類型說明了函數(shù)返回值的類型。函數(shù)類型說明了函數(shù)返回值的類型。2函數(shù)名函數(shù)名函數(shù)名是用戶為自定義函數(shù)取的名字以便調用函數(shù)時使用。函數(shù)名是用戶為自定義函數(shù)取的名字以便調用函數(shù)時使用。3形式參數(shù)表形式參數(shù)表形式參數(shù)表用于列錄在主調函數(shù)與被調用函數(shù)之間進行數(shù)據(jù)傳遞形式參數(shù)表用于列錄在主調函數(shù)與被調用函數(shù)之間進行數(shù)據(jù)傳遞的形式參數(shù)。的形式參數(shù)。原碼工作室原碼工作室函數(shù)的調用與聲明函數(shù)的調用與聲明 函數(shù)調用的一般形式如下:函數(shù)調用的一般形式如下: 函數(shù)名(實參列表);函數(shù)名(實參列表); 對于有參數(shù)的函數(shù)調用,若實參列表包含多個實參,對于有參數(shù)的函數(shù)調用,若實參列表包含多個實參,則各個實參之間用逗號隔開。則各個實參之間用逗號隔開。

溫馨提示

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

評論

0/150

提交評論