![第4章 單片機C語言程序設(shè)計(ghl)課件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/030858c6-4f91-46bc-8f8d-c17d78180c08/030858c6-4f91-46bc-8f8d-c17d78180c081.gif)
![第4章 單片機C語言程序設(shè)計(ghl)課件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/030858c6-4f91-46bc-8f8d-c17d78180c08/030858c6-4f91-46bc-8f8d-c17d78180c082.gif)
![第4章 單片機C語言程序設(shè)計(ghl)課件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/030858c6-4f91-46bc-8f8d-c17d78180c08/030858c6-4f91-46bc-8f8d-c17d78180c083.gif)
![第4章 單片機C語言程序設(shè)計(ghl)課件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/030858c6-4f91-46bc-8f8d-c17d78180c08/030858c6-4f91-46bc-8f8d-c17d78180c084.gif)
![第4章 單片機C語言程序設(shè)計(ghl)課件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/030858c6-4f91-46bc-8f8d-c17d78180c08/030858c6-4f91-46bc-8f8d-c17d78180c085.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4章 單片機C語言程序設(shè)計東北大學信息學院高宏亮單片機原理及應用 第4章 單片機C語言程序設(shè)計4.1 C語言與語言與MCS-51單片機單片機4.1.1 C語言的特點及程序結(jié)構(gòu)語言的特點及程序結(jié)構(gòu)一一C語言的特點語言的特點1語言簡潔、緊湊,使用方便、靈活。語言簡潔、緊湊,使用方便、靈活。2運算符豐富。運算符豐富。3數(shù)據(jù)結(jié)構(gòu)豐富。具有現(xiàn)代化語言的各種數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)豐富。具有現(xiàn)代化語言的各種數(shù)據(jù)結(jié)構(gòu)。4可進行結(jié)構(gòu)化程序設(shè)計??蛇M行結(jié)構(gòu)化程序設(shè)計。(*)5可以直接對計算機硬件進行操作。可以直接對計算機硬件進行操作。(*)6生成的目標代碼質(zhì)量高,程序執(zhí)行效率高。生成的目標代碼質(zhì)量高,程序執(zhí)行效率高
2、。(*)7可移植性好??梢浦残院?。(*)第4章 單片機C語言程序設(shè)計二二C語言的程序結(jié)構(gòu)語言的程序結(jié)構(gòu) C語言程序采用函數(shù)結(jié)構(gòu),每個語言程序采用函數(shù)結(jié)構(gòu),每個C語言程序由一個或語言程序由一個或多個函數(shù)組成,在這些函數(shù)中至少應包含一個主函數(shù)多個函數(shù)組成,在這些函數(shù)中至少應包含一個主函數(shù)main() 。程序總是從。程序總是從main()函數(shù)開始執(zhí)行,執(zhí)行到函數(shù)開始執(zhí)行,執(zhí)行到main()函數(shù)結(jié)束則結(jié)束。函數(shù)結(jié)束則結(jié)束。 在在main()函數(shù)中調(diào)用其它函數(shù),其它函數(shù)也可以相函數(shù)中調(diào)用其它函數(shù),其它函數(shù)也可以相互調(diào)用,但互調(diào)用,但main()函數(shù)只能調(diào)用其它的功能函數(shù),而不函數(shù)只能調(diào)用其它的功能函數(shù),
3、而不能被其它的函數(shù)所調(diào)用。能被其它的函數(shù)所調(diào)用。 功能函數(shù)可以是功能函數(shù)可以是C語言編譯器提供的庫函數(shù),也可語言編譯器提供的庫函數(shù),也可以是由用戶定義的自定義函數(shù)。在編制以是由用戶定義的自定義函數(shù)。在編制C程序時,程序程序時,程序的開始部分一般是預處理命令、函數(shù)說明和變量定義等。的開始部分一般是預處理命令、函數(shù)說明和變量定義等。 第4章 單片機C語言程序設(shè)計C語言程序一般結(jié)構(gòu)如下:語言程序一般結(jié)構(gòu)如下:預處理命令預處理命令 include 函數(shù)聲明函數(shù)聲明 long fun1(); int x,y; float z;功能函功能函數(shù)數(shù)功能函數(shù)功能函數(shù)1 fun1() 函數(shù)體函數(shù)體 主函數(shù)主函數(shù)主
4、函數(shù)主函數(shù) main() 主函數(shù)體主函數(shù)體 第4章 單片機C語言程序設(shè)計 其中,函數(shù)由其中,函數(shù)由“函數(shù)定義函數(shù)定義”和和“函數(shù)體函數(shù)體”兩個部分兩個部分組成。函數(shù)定義包括:函數(shù)類型、函數(shù)名、形式參數(shù)組成。函數(shù)定義包括:函數(shù)類型、函數(shù)名、形式參數(shù)說明等,函數(shù)名后面必須跟一個圓括號說明等,函數(shù)名后面必須跟一個圓括號(),形式參數(shù)在,形式參數(shù)在()內(nèi)定義。內(nèi)定義。 函數(shù)體內(nèi)包含若干語句,一般由兩部分組成:聲函數(shù)體內(nèi)包含若干語句,一般由兩部分組成:聲明語句和執(zhí)行語句。明語句和執(zhí)行語句。 C語言程序在書寫時格式十分自由,語言程序在書寫時格式十分自由,每條語句后每條語句后面必須以分號面必須以分號“;”作
5、為結(jié)束符作為結(jié)束符。C語言程序語言程序?qū)Υ笮Υ笮懽帜副容^敏感寫字母比較敏感,在程序中,同一個字母的大小寫系,在程序中,同一個字母的大小寫系統(tǒng)是作不同的處理。在程序中可以用統(tǒng)是作不同的處理。在程序中可以用“/*/”或或“/”對對C程序中的任何部分作注釋,以增加程序的可程序中的任何部分作注釋,以增加程序的可讀性。讀性。第4章 單片機C語言程序設(shè)計 C語言本身沒有輸入輸出語句。輸入和輸出是通語言本身沒有輸入輸出語句。輸入和輸出是通過輸入輸出函數(shù)過輸入輸出函數(shù)scanf()和和printf()來實現(xiàn)的。輸入輸出來實現(xiàn)的。輸入輸出函數(shù)是通過標準庫函數(shù)形式提供給用戶。函數(shù)是通過標準庫函數(shù)形式提供給用戶
6、。 (注意注意C51與與PC機機C程序中的區(qū)別程序中的區(qū)別)第4章 單片機C語言程序設(shè)計4.1.2 C語言與語言與MCS-51單片機單片機 用用C語言編寫語言編寫51單片機程序與用匯編語言寫單片機單片機程序與用匯編語言寫單片機程序不一樣,用匯編語言寫單片機程序必須要考慮其存程序不一樣,用匯編語言寫單片機程序必須要考慮其存儲器結(jié)構(gòu),尤其要考慮其片內(nèi)數(shù)據(jù)存儲器與特殊功能寄儲器結(jié)構(gòu),尤其要考慮其片內(nèi)數(shù)據(jù)存儲器與特殊功能寄存器的使用以及按實際地址處理端口數(shù)據(jù)。存器的使用以及按實際地址處理端口數(shù)據(jù)。 用用C語言編寫的語言編寫的MCS51單片機應用程序,不用具單片機應用程序,不用具體組織、分配存儲器資源和
7、處理端口數(shù)據(jù)。體組織、分配存儲器資源和處理端口數(shù)據(jù)。C51編程中,編程中,對變量的數(shù)據(jù)類型定義,必須要與單片機的存儲結(jié)構(gòu)相對變量的數(shù)據(jù)類型定義,必須要與單片機的存儲結(jié)構(gòu)相關(guān)聯(lián),否則編譯器不能正確映射定位。關(guān)聯(lián),否則編譯器不能正確映射定位。 用用C語言編寫單片機應用程序與標準的語言編寫單片機應用程序與標準的C語言程序語言程序也有相應的區(qū)別:也有相應的區(qū)別:C語言編寫單片機應用程序時,需根語言編寫單片機應用程序時,需根據(jù)單片機存儲結(jié)構(gòu)及內(nèi)部資源定義相應的數(shù)據(jù)類型和變據(jù)單片機存儲結(jié)構(gòu)及內(nèi)部資源定義相應的數(shù)據(jù)類型和變量,而標準的量,而標準的C語言程序一般不需要考慮這些問題。語言程序一般不需要考慮這些問
8、題。第4章 單片機C語言程序設(shè)計 C51包含的數(shù)據(jù)類型、變量存儲模式、輸入輸出包含的數(shù)據(jù)類型、變量存儲模式、輸入輸出處理、函數(shù)等方面與標準的處理、函數(shù)等方面與標準的C語言有一定的區(qū)別。其語言有一定的區(qū)別。其它的語法規(guī)則、程序結(jié)構(gòu)及程序設(shè)計方法等與標準的它的語法規(guī)則、程序結(jié)構(gòu)及程序設(shè)計方法等與標準的C語言程序設(shè)計相同。語言程序設(shè)計相同。 現(xiàn)在支持現(xiàn)在支持MCS-51系列單片機的系列單片機的C語言編譯器有很語言編譯器有很多種,各種編譯器的基本情況相同,但具體處理時有多種,各種編譯器的基本情況相同,但具體處理時有一定的區(qū)別,其中一定的區(qū)別,其中KEIL/Franklin性能較好且被廣泛性能較好且被廣
9、泛使用。本書以使用。本書以KEIL編譯器介紹編譯器介紹C51單片機程序設(shè)計。單片機程序設(shè)計。第4章 單片機C語言程序設(shè)計4.1.3 C51程序結(jié)構(gòu)程序結(jié)構(gòu) C51的語法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計方法都與標準的的語法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計方法都與標準的C語語言程序設(shè)計相同,但言程序設(shè)計相同,但C51程序與標準的程序與標準的C程序在以下幾個方面不一程序在以下幾個方面不一樣:樣:(1)C51中定義的庫函數(shù)和標準中定義的庫函數(shù)和標準C語言定義的庫函數(shù)不同。標準語言定義的庫函數(shù)不同。標準的的C語言定義的庫函數(shù)是按通用微型計算機來定義的,而語言定義的庫函數(shù)是按通用微型計算機來定義的,而C51中的中的庫函數(shù)
10、是按庫函數(shù)是按MCS-51單片機相應情況來定義的;單片機相應情況來定義的;(2)C51中的數(shù)據(jù)類型與標準中的數(shù)據(jù)類型與標準C的數(shù)據(jù)類型也有一定的區(qū)別,在的數(shù)據(jù)類型也有一定的區(qū)別,在C51中還增加了幾種針對中還增加了幾種針對MCS-51單片機特有的數(shù)據(jù)類型;單片機特有的數(shù)據(jù)類型;(3)C51變量的存儲模式與標準變量的存儲模式與標準C中變量的存儲模式不一樣,中變量的存儲模式不一樣,C51中變量的存儲模式是與中變量的存儲模式是與51單片機的存儲器緊密相關(guān);單片機的存儲器緊密相關(guān);(4)C51與標準與標準C的輸入輸出處理不一樣,的輸入輸出處理不一樣,C51中的默認輸入輸出中的默認輸入輸出是通過是通過M
11、CS-51串行口來完成的,輸入輸出指令執(zhí)行前必須要對串行口來完成的,輸入輸出指令執(zhí)行前必須要對串行口進行初始化;串行口進行初始化;(5)C51與標準與標準C在函數(shù)使用方面也有一定的區(qū)別,在函數(shù)使用方面也有一定的區(qū)別,C51中有專門中有專門的中斷函數(shù)。的中斷函數(shù)。第4章 單片機C語言程序設(shè)計4.2 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、中還有專門針對于門針對于51單片機的特殊功能寄存器型和位類型。單片機的特殊功能寄存器型和位類型。 一字符型一字符型char 有有signed char和和unsigned char之分,默認為之分,默認為signed char。它們的長度為一個字節(jié)。對于。它們的長度為一個字節(jié)。對于signed char,它用,它用于定義帶符號字節(jié)數(shù)據(jù),其字節(jié)的最高位為符號位,于定義帶符號字節(jié)數(shù)據(jù),其字節(jié)的最高位為符號位,“0”表示正數(shù),表示正數(shù),“1”表示負數(shù),補碼表示,所能表示表示負數(shù),補碼表示,所能表示的數(shù)值范圍是的數(shù)值范圍是-128+127;對于;對于unsigned char,它用于,它用于定義無符號
13、字節(jié)數(shù)據(jù)或字符,可以存放一個字節(jié)的無符定義無符號字節(jié)數(shù)據(jù)或字符,可以存放一個字節(jié)的無符號數(shù),其取值范圍為號數(shù),其取值范圍為0255。unsigned char可以用來存可以用來存放無符號數(shù),也可以存放西文字符,一個西文字符占一放無符號數(shù),也可以存放西文字符,一個西文字符占一個字節(jié),在計算機內(nèi)部用個字節(jié),在計算機內(nèi)部用ASCII碼存放。碼存放。 第4章 單片機C語言程序設(shè)計二二int整型整型 分分signed int和和unsigned int。默認為。默認為signed int。它們的長度均為兩個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。它們的長度均為兩個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。對于對于signed
14、 int,用于存放兩字節(jié)帶符號數(shù),補碼表示,用于存放兩字節(jié)帶符號數(shù),補碼表示,數(shù)的范疇為數(shù)的范疇為-32768+32767。對于。對于unsigned int,用于,用于存放兩字節(jié)無符號數(shù),數(shù)的范圍為存放兩字節(jié)無符號數(shù),數(shù)的范圍為065535。三三long長整型長整型 分分signed long和和unsigned long。默認為。默認為signed long。它們的長度均為四個字節(jié),用于存放一個四字。它們的長度均為四個字節(jié),用于存放一個四字節(jié)數(shù)據(jù)。對于節(jié)數(shù)據(jù)。對于signed long,用于存放四字節(jié)帶符號數(shù),用于存放四字節(jié)帶符號數(shù),補碼表示。對于補碼表示。對于unsigned long,
15、用于存放四字節(jié)無符,用于存放四字節(jié)無符號數(shù)。號數(shù)。第4章 單片機C語言程序設(shè)計四四float浮點型浮點型 float型數(shù)據(jù)的長度為四個字節(jié),格式符合型數(shù)據(jù)的長度為四個字節(jié),格式符合IEEE-754標準的單精度浮點型數(shù)據(jù)。標準的單精度浮點型數(shù)據(jù)。 五五* 指針型指針型 指針型本身就是一個變量,在這個變量中存放指針型本身就是一個變量,在這個變量中存放的指向另一個數(shù)據(jù)的地址。這個指針變量要占用一定的指向另一個數(shù)據(jù)的地址。這個指針變量要占用一定的內(nèi)存單元,對不同的處理器其長度不一樣,在的內(nèi)存單元,對不同的處理器其長度不一樣,在C51中它的長度一般為中它的長度一般為13個字節(jié)。個字節(jié)。第4章 單片機C語
16、言程序設(shè)計六特殊功能寄存器型六特殊功能寄存器型 這是這是C51擴充的數(shù)據(jù)類型,用于訪問擴充的數(shù)據(jù)類型,用于訪問51單片機中單片機中的特殊功能寄存器數(shù)據(jù),它分的特殊功能寄存器數(shù)據(jù),它分sfr和和sfr16兩種類型,其兩種類型,其中中sfr為字節(jié)型特殊功能寄存器類型,占一個內(nèi)存單元,為字節(jié)型特殊功能寄存器類型,占一個內(nèi)存單元,利用它可以訪問利用它可以訪問MCS-51內(nèi)部的所有特殊功能寄存器;內(nèi)部的所有特殊功能寄存器;sfr16為雙字節(jié)型特殊功能寄存器類型,占用兩個字節(jié)為雙字節(jié)型特殊功能寄存器類型,占用兩個字節(jié)單元,利用它可以訪問單元,利用它可以訪問MCS-51內(nèi)部的所有兩個字節(jié)的內(nèi)部的所有兩個字節(jié)
17、的特殊功能寄存器。在特殊功能寄存器。在C51中對特殊功能寄存器的訪問必中對特殊功能寄存器的訪問必須先用須先用sfr或或sfr16進行聲明。進行聲明。七位類型七位類型 這也是這也是C51中擴充的數(shù)據(jù)類型,用于訪問中擴充的數(shù)據(jù)類型,用于訪問51單片單片機中的可尋址的位單元。在機中的可尋址的位單元。在C51中,支持兩種位類型:中,支持兩種位類型:bit型和型和sbit型。它們在內(nèi)存中都只占一個二進制位,其型。它們在內(nèi)存中都只占一個二進制位,其值可以是值可以是“1”或或“0”。第4章 單片機C語言程序設(shè)計 其中用其中用bit定義的位變量在定義的位變量在C51編譯器編譯時,編譯器編譯時,在不同的時候位地
18、址是可以變化的在不同的時候位地址是可以變化的,而用,而用sbit定義定義的位變量必須與的位變量必須與51單片機的一個可以尋址位單元或單片機的一個可以尋址位單元或可位尋址的字節(jié)單元中的某一位聯(lián)系在一起,在可位尋址的字節(jié)單元中的某一位聯(lián)系在一起,在C51編譯器編譯時,其對應的編譯器編譯時,其對應的位地址是不可變化的位地址是不可變化的。第4章 單片機C語言程序設(shè)計 在在C51語言程序中,有可能會出現(xiàn)在運算中數(shù)據(jù)類語言程序中,有可能會出現(xiàn)在運算中數(shù)據(jù)類型不一致的情況。型不一致的情況。C51允許任何標準數(shù)據(jù)類型的隱式轉(zhuǎn)允許任何標準數(shù)據(jù)類型的隱式轉(zhuǎn)換,隱式轉(zhuǎn)換的優(yōu)先級順序如下:換,隱式轉(zhuǎn)換的優(yōu)先級順序如下
19、:bitcharintlongfloatsignedunsigned 也就是說,當也就是說,當char型與型與int型進行運算時,先自動對型進行運算時,先自動對char型擴展為型擴展為int型,然后與型,然后與int型進行運算,運算結(jié)果為型進行運算,運算結(jié)果為int型。型。C51除了支持隱式類型轉(zhuǎn)換外,還可以通過強制除了支持隱式類型轉(zhuǎn)換外,還可以通過強制類型轉(zhuǎn)換符類型轉(zhuǎn)換符“()”對數(shù)據(jù)類型進行人為的強制轉(zhuǎn)換。對數(shù)據(jù)類型進行人為的強制轉(zhuǎn)換。 C5l編譯器除了能支持以上這些基本數(shù)據(jù)類型之外,編譯器除了能支持以上這些基本數(shù)據(jù)類型之外,還能支持一些復雜的組合型數(shù)據(jù)類型,如數(shù)組類型、指還能支持一些復雜
20、的組合型數(shù)據(jù)類型,如數(shù)組類型、指針類型、結(jié)構(gòu)類型、聯(lián)合類型等這些復雜的數(shù)據(jù)類型。針類型、結(jié)構(gòu)類型、聯(lián)合類型等這些復雜的數(shù)據(jù)類型。第4章 單片機C語言程序設(shè)計4.3 51的運算量的運算量4.3.1 常量常量 常量是指在程序執(zhí)行過程中其值不能改變的量。在常量是指在程序執(zhí)行過程中其值不能改變的量。在C51中支持整型常量、浮點型常量、字符型常量和字符中支持整型常量、浮點型常量、字符型常量和字符串型常量。串型常量。一整型常量一整型常量 整型常量也就是整型常數(shù),根據(jù)其值范圍在計整型常量也就是整型常數(shù),根據(jù)其值范圍在計算機中分配不同的字節(jié)數(shù)來存放。在算機中分配不同的字節(jié)數(shù)來存放。在C51中它可以表中它可以表
21、示成以下幾種形式:示成以下幾種形式: 十進制整數(shù)。如十進制整數(shù)。如234、-56、0等。等。 十六進制整數(shù)。以十六進制整數(shù)。以0 x開頭表示,如開頭表示,如0 x12表示十表示十六進制數(shù)六進制數(shù)12H。第4章 單片機C語言程序設(shè)計 長整數(shù)。在長整數(shù)。在C51中當一個整數(shù)的值達到長整型的范中當一個整數(shù)的值達到長整型的范圍,則該數(shù)按長整型存放,在存儲器中占四個字節(jié),圍,則該數(shù)按長整型存放,在存儲器中占四個字節(jié),另外,如一個整數(shù)后面加一個字母另外,如一個整數(shù)后面加一個字母L,這個數(shù)在存儲,這個數(shù)在存儲器中也按長整型存放。如器中也按長整型存放。如123L在存儲器中占四個字節(jié)。在存儲器中占四個字節(jié)。二浮
22、點型常量二浮點型常量 浮點型常量也就是實型常數(shù)。有十進制表示形式浮點型常量也就是實型常數(shù)。有十進制表示形式和指數(shù)表示形式。和指數(shù)表示形式。 十進制表示形式又稱定點表示形式,由數(shù)字和小數(shù)十進制表示形式又稱定點表示形式,由數(shù)字和小數(shù)點組成。如點組成。如 0.123、34.645等都是十進制數(shù)表示形式等都是十進制數(shù)表示形式的浮點型常量。的浮點型常量。第4章 單片機C語言程序設(shè)計指數(shù)表示形式為:指數(shù)表示形式為: 數(shù)字數(shù)字 .數(shù)字數(shù)字 e 數(shù)字數(shù)字 例如:例如:123.456e-3、-3.123e2等都是指數(shù)形式的等都是指數(shù)形式的浮點型常量。浮點型常量。三字符型常量三字符型常量 字符型常量是用單引號引起
23、的字符,如字符型常量是用單引號引起的字符,如a、1、F等??梢允强娠@示的等??梢允强娠@示的ASCII字符,也可以字符,也可以是不可顯示的控制字符。對不可顯示的控制字符須是不可顯示的控制字符。對不可顯示的控制字符須在前面加上反斜杠在前面加上反斜杠“”組成轉(zhuǎn)義字符。利用它可以完組成轉(zhuǎn)義字符。利用它可以完成一些特殊功能和輸出時的格式控制。常用的轉(zhuǎn)義成一些特殊功能和輸出時的格式控制。常用的轉(zhuǎn)義字符如表字符如表4-2所示。所示。 第4章 單片機C語言程序設(shè)計轉(zhuǎn)義字符轉(zhuǎn)義字符含含 義義ASCII碼碼(十六進制數(shù)十六進制數(shù)) 0空字符空字符(null)00H n換行符換行符(LF)0AH r回車符回車符(C
24、R)0DH t水平制表符水平制表符(HT)09H b退格符退格符(BS)08H f換頁符換頁符(FF)0CH 單引號單引號27H ”雙引號雙引號22H 反斜杠反斜杠5CH第4章 單片機C語言程序設(shè)計四字符串型常量四字符串型常量 字符串型常量由雙引號字符串型常量由雙引號“”“”括起的字符組成。括起的字符組成。如如“D”、“1234”、“ABCD”等。等。 注意字符串常量與字符常量是不一樣,一個字符注意字符串常量與字符常量是不一樣,一個字符常量在計算機內(nèi)只用一個字節(jié)存放,而一個字符串常常量在計算機內(nèi)只用一個字節(jié)存放,而一個字符串常量在內(nèi)存中存放時不僅雙引號內(nèi)的字符一個占一個字量在內(nèi)存中存放時不僅雙
25、引號內(nèi)的字符一個占一個字節(jié),而且系統(tǒng)會自動的在后面加一個轉(zhuǎn)義字符節(jié),而且系統(tǒng)會自動的在后面加一個轉(zhuǎn)義字符“0”作為字符串結(jié)束符。因此不要將字符常量和字符串常作為字符串結(jié)束符。因此不要將字符常量和字符串常量混淆,如字符常量量混淆,如字符常量A和字符串常量和字符串常量“A”是不一是不一樣的。樣的。4.3.2 變量變量 在在C51中,變量在中,變量在使用前必須對變量進行定義使用前必須對變量進行定義,指,指出變量的數(shù)據(jù)類型和存儲模式。以便編譯系統(tǒng)為它分出變量的數(shù)據(jù)類型和存儲模式。以便編譯系統(tǒng)為它分配相應的存儲單元。定義的格式如下:配相應的存儲單元。定義的格式如下: 存儲種類存儲種類 數(shù)據(jù)類型說明符數(shù)據(jù)
26、類型說明符 存儲器類型存儲器類型 變量名變量名1=初值初值,變量名,變量名2初值初值;第4章 單片機C語言程序設(shè)計一數(shù)據(jù)類型說明符一數(shù)據(jù)類型說明符 在定義變量時,必須通過數(shù)據(jù)類型說明符指明變在定義變量時,必須通過數(shù)據(jù)類型說明符指明變量的數(shù)據(jù)類型,指明變量在存儲器中占用的字節(jié)數(shù)。量的數(shù)據(jù)類型,指明變量在存儲器中占用的字節(jié)數(shù)。可以是基本數(shù)據(jù)類型說明符,也可以是組合數(shù)據(jù)類型可以是基本數(shù)據(jù)類型說明符,也可以是組合數(shù)據(jù)類型說明符,還可以是用說明符,還可以是用typedef或或#define定義的類型別名。定義的類型別名。 在在C51中,為了增加程序的可讀性,允許用戶為中,為了增加程序的可讀性,允許用戶為
27、系統(tǒng)固有的數(shù)據(jù)類型說明符用系統(tǒng)固有的數(shù)據(jù)類型說明符用typedef或或#define起別名,起別名,格式如下:格式如下: typedef c51固有的數(shù)據(jù)類型說明符固有的數(shù)據(jù)類型說明符 別名;別名; 或或 #define 別名別名 C51固有的數(shù)據(jù)類型說明符;固有的數(shù)據(jù)類型說明符; 定義別名后,就可以用別名代替數(shù)據(jù)類型說明符定義別名后,就可以用別名代替數(shù)據(jù)類型說明符對變量進行定義。別名可以用大寫,也可以用小寫,對變量進行定義。別名可以用大寫,也可以用小寫,為了區(qū)別一般用大寫字母表示。為了區(qū)別一般用大寫字母表示。第4章 單片機C語言程序設(shè)計【例【例4-1】 typedef或或#define的使用
28、。的使用。typedef unsigned int WORD;#define BYTE unsigned char(不能加分號不能加分號)BYTE a1=0 x12;WORD a2=0 x1234;二變量名二變量名 變量名是變量名是C51區(qū)分不同變量,為不同變量取的名區(qū)分不同變量,為不同變量取的名稱。在稱。在C51中規(guī)定變量名可以由字母、數(shù)字和下劃線中規(guī)定變量名可以由字母、數(shù)字和下劃線三種字符組成,且第一個字母必須為字母或下劃線。三種字符組成,且第一個字母必須為字母或下劃線。變量名有兩種:普通變量名和指針變量名。它們的區(qū)變量名有兩種:普通變量名和指針變量名。它們的區(qū)別是指針變量名前面要帶別是指
29、針變量名前面要帶“*”號。號。三存儲種類三存儲種類 存儲種類是指變量在程序執(zhí)行過程中的作用范圍。存儲種類是指變量在程序執(zhí)行過程中的作用范圍。C51變量的存儲種類有四種,分別是自動變量的存儲種類有四種,分別是自動(auto)、外部、外部(extern)、靜態(tài)、靜態(tài)(static)和寄存器和寄存器(register)。(自行復習自行復習)第4章 單片機C語言程序設(shè)計四存儲器類型四存儲器類型 存儲器類型是用于指明變量所處的單片機的存儲器存儲器類型是用于指明變量所處的單片機的存儲器區(qū)域情況。區(qū)域情況。存儲器類型與存儲種類完全不同存儲器類型與存儲種類完全不同。C51編編譯器能識別的存儲器類型有以下幾種,
30、見表所示。譯器能識別的存儲器類型有以下幾種,見表所示。存儲器類型存儲器類型描描 述述 data直接尋址的片內(nèi)直接尋址的片內(nèi)RAM低低128B,訪問速度快,訪問速度快 bdata片內(nèi)片內(nèi)RAM的可位尋址區(qū)的可位尋址區(qū)(20H2FH),允許字節(jié)和位混合,允許字節(jié)和位混合訪問訪問 idata間接尋址訪問的片內(nèi)間接尋址訪問的片內(nèi)RAM,允許訪問全部片內(nèi),允許訪問全部片內(nèi)RAM pdata用用Ri間接訪問的片外間接訪問的片外RAM的低的低256B xdata用用DPTR間接訪問的片外間接訪問的片外RAM,允許訪問全部,允許訪問全部64k片外片外RAM code程序存儲器程序存儲器ROM64k空間空間 定
31、義變量時也可以缺省定義變量時也可以缺省“存儲器類型存儲器類型”,缺省時,缺省時C51編譯器將按編譯模式默認存儲器類型,具體編編譯器將按編譯模式默認存儲器類型,具體編譯模式的情況在后面介紹。譯模式的情況在后面介紹。第4章 單片機C語言程序設(shè)計【例【例4-2】變量定義存儲種類和存儲器類型相關(guān)情況?!孔兞慷x存儲種類和存儲器類型相關(guān)情況。 char data varl; /*在片內(nèi)在片內(nèi)RAM低低128B定義用直接尋址定義用直接尋址方式訪問的字符型變量方式訪問的字符型變量var1*/ int idata var2; /*在片內(nèi)在片內(nèi)RAM256B定義用間接尋址方定義用間接尋址方式訪問的整型變量式訪問
32、的整型變量var2*/ auto unsigned long data var3; /*在片內(nèi)在片內(nèi)RAM128B定定義用直接尋址方式訪問的自動無符號長整型變量義用直接尋址方式訪問的自動無符號長整型變量var3*/ extern float xdata var4; /*在片外在片外RAM64KB空間定空間定義用間接尋址方式訪問的外部實型變量義用間接尋址方式訪問的外部實型變量var4*/ int code var5; /*在在ROM空間定義整型變量空間定義整型變量var5*/ unsign char bdata var6; /*在片內(nèi)在片內(nèi)RAM位尋址區(qū)位尋址區(qū)20H2FH單元定義可字節(jié)處理和位
33、處理的無符號字符型變量單元定義可字節(jié)處理和位處理的無符號字符型變量var6*/第4章 單片機C語言程序設(shè)計五特殊功能寄存器變量五特殊功能寄存器變量 MCS-51系列單片機片內(nèi)有許多特殊功能寄存器,系列單片機片內(nèi)有許多特殊功能寄存器,通過這些特殊功能寄存器可以控制單片機的定時器、計通過這些特殊功能寄存器可以控制單片機的定時器、計數(shù)器、串口、數(shù)器、串口、I/O及其它功能部件,每一個特殊功能寄存及其它功能部件,每一個特殊功能寄存器在片內(nèi)器在片內(nèi)RAM中都對應于一個字節(jié)單元或兩個字節(jié)單元。中都對應于一個字節(jié)單元或兩個字節(jié)單元。 在在C51中,允許用戶對這些特殊功能寄存器進行訪中,允許用戶對這些特殊功能
34、寄存器進行訪問,訪問時須通過問,訪問時須通過sfr或或sfr16類型說明符進行定義,定義類型說明符進行定義,定義時須指明它們所對應的片內(nèi)時須指明它們所對應的片內(nèi)RAM單元的地址。格式如下:單元的地址。格式如下: sfr或或sfr16 特殊功能寄存器名特殊功能寄存器名=地址;地址; sfr用于對單字節(jié)的特殊功能寄存器進行定義,用于對單字節(jié)的特殊功能寄存器進行定義,sfr16用于對雙字節(jié)特殊功能寄存器進行定義。特殊功能寄存用于對雙字節(jié)特殊功能寄存器進行定義。特殊功能寄存器名一般用大寫字母表示。地址一般用直接地址形式,器名一般用大寫字母表示。地址一般用直接地址形式,具體特殊功能寄存器地址見前面內(nèi)容。
35、具體特殊功能寄存器地址見前面內(nèi)容。第4章 單片機C語言程序設(shè)計【例【例4-3】特殊功能寄存器的定義?!刻厥夤δ芗拇嫫鞯亩x。(現(xiàn)在一般編譯器都提供定現(xiàn)在一般編譯器都提供定義好的義好的SFR頭文件,頭文件,,等等) sfr PSW=0 xd0; sfr SCON=0 x98; sfr TMOD=0 x89; sfr P1=0 x90; sfr16 DPTR=0 x82; sfr16 T1=0X8A;六位變量六位變量 在在C51中,允許用戶通過位類型符定義位變量。中,允許用戶通過位類型符定義位變量。位類型符有兩個:位類型符有兩個:bit和和sbit。可以定義兩種位變量。可以定義兩種位變量。 bit
36、位類型符用于定義一般的可位處理位變量。它位類型符用于定義一般的可位處理位變量。它的格式如下:的格式如下: bit 位變量名;位變量名;第4章 單片機C語言程序設(shè)計 在格式中可以加上各種修飾,但注意存儲器類型在格式中可以加上各種修飾,但注意存儲器類型只能是只能是bdata、data、idata。只能是片內(nèi)。只能是片內(nèi)RAM的可位的可位尋址區(qū),嚴格來說只能是尋址區(qū),嚴格來說只能是bdata。 sbit位類型符用于定義在可位尋址字節(jié)或特殊功能位類型符用于定義在可位尋址字節(jié)或特殊功能寄存器中的位,定義時須指明其位地址,可以是位直寄存器中的位,定義時須指明其位地址,可以是位直接地址,可以是可位尋址變量帶
37、位號,也可以是特殊接地址,可以是可位尋址變量帶位號,也可以是特殊功能寄存器名帶位號。格式如下:功能寄存器名帶位號。格式如下: sbit 位變量名位變量名=位地址;位地址; 如位地址為位直接地址,其取值范圍為如位地址為位直接地址,其取值范圍為0 x000 xff;如位地址是可位尋址變量帶位號或特殊功能寄存器名如位地址是可位尋址變量帶位號或特殊功能寄存器名帶位號,則在它前面須對可位尋址變量或特殊功能寄帶位號,則在它前面須對可位尋址變量或特殊功能寄存器進行定義。字節(jié)地址與位號之間、特殊功能寄存存器進行定義。字節(jié)地址與位號之間、特殊功能寄存器與位號之間一般用器與位號之間一般用“”作間隔。作間隔。第4章
38、 單片機C語言程序設(shè)計【例【例4-5】sbit型變量的定義。型變量的定義。sbit OV=0 xd2;sbit CY=oxd7;unsigned char bdata flag;sbit flag0=flag0;sfr P1=0 x90;sbit P1_0=P10; 為了方便用戶,為了方便用戶,C51編譯器把編譯器把51單片機的常用的特單片機的常用的特殊功能寄存器和特殊位進行了定義,放在一個殊功能寄存器和特殊位進行了定義,放在一個“reg51.h”或或“reg52.h”的頭文件中,當用戶使用時,的頭文件中,當用戶使用時,只須要在使用之前用一條預處理命令只須要在使用之前用一條預處理命令#incl
39、ude 把這個頭文件包含到程序中,然后就可使用把這個頭文件包含到程序中,然后就可使用殊功能寄存器名和特殊位名稱。殊功能寄存器名和特殊位名稱。第4章 單片機C語言程序設(shè)計 C51編譯器支持三種存儲模式:編譯器支持三種存儲模式:SMALL模式、模式、COMPACT模式和模式和LARGE模式。不同的存儲模式對模式。不同的存儲模式對變量默認的存儲器類型不一樣。變量默認的存儲器類型不一樣。(1)SMALL模式。模式。SMALL模式稱為小編譯模式,在模式稱為小編譯模式,在SMALL模式下,編譯時,函數(shù)參數(shù)和變量被默認在模式下,編譯時,函數(shù)參數(shù)和變量被默認在片內(nèi)片內(nèi)RAM中,存儲器類型為中,存儲器類型為da
40、ta。(2)COMPACT模式。模式。COMPACT模式稱為緊湊編譯模式稱為緊湊編譯模式,在模式,在COMPACT模式下,編譯時,函數(shù)參數(shù)和變模式下,編譯時,函數(shù)參數(shù)和變量被默認在片外量被默認在片外RAM的低的低256字節(jié)空間,存儲器類型字節(jié)空間,存儲器類型為為pdata。(3)LARGE模式。模式。LARGE模式稱為大編譯模式,在模式稱為大編譯模式,在LARGE模式下,編譯時函數(shù)參數(shù)和變量被默認在片模式下,編譯時函數(shù)參數(shù)和變量被默認在片外外RAM的的64K字節(jié)空間,存儲器類型為字節(jié)空間,存儲器類型為xdata。 一般開發(fā)時,存儲模式在編譯器選項中設(shè)定好后,一般開發(fā)時,存儲模式在編譯器選項中設(shè)
41、定好后,較少更改。較少更改。4.3.3 存儲模式存儲模式第4章 單片機C語言程序設(shè)計4.3.4 絕對地址的訪問絕對地址的訪問一使用一使用C51運行庫中預定義宏運行庫中預定義宏 C51編譯器提供了一組編譯器提供了一組宏定義宏定義來對來對51系列單片機的系列單片機的code、data、pdata和和xdata空間進行絕對尋址。規(guī)定只空間進行絕對尋址。規(guī)定只能以無符號數(shù)方式訪問,定義了能以無符號數(shù)方式訪問,定義了8個宏定義,其函數(shù)原個宏定義,其函數(shù)原型如下:型如下:#define CBYTE(unsigned char volatile*)0 x50000L)#define DBYTE(unsign
42、ed char volatile*)0 x40000L)#define PBYTE(unsigned char volatile*)0 x30000L)#define XBYTE(unsigned char volatile*)0 x20000L)#define CWORD(unsigned int volatile*)0 x50000L)#define DWORD(unsigned int volatile*)0 x40000L)#define PWORD(unsigned int volatile*)0 x30000L)#define XWORD(unsigned int volatile
43、*)0 x20000L)第4章 單片機C語言程序設(shè)計這些函數(shù)原型放在這些函數(shù)原型放在absacc.h文件中。使用時須用預處文件中。使用時須用預處理命令把該頭文件包含到文件中,形式為:理命令把該頭文件包含到文件中,形式為:#include 。 其中:其中:CBYTE以字節(jié)形式對以字節(jié)形式對code區(qū)尋址,區(qū)尋址,DBYTE以字節(jié)形式對以字節(jié)形式對data區(qū)尋址,區(qū)尋址,PBYTE以字節(jié)形式以字節(jié)形式對對pdata區(qū)尋址,區(qū)尋址,XBYTE以字節(jié)形式對以字節(jié)形式對xdata區(qū)尋址,區(qū)尋址,CWORD以字形式對以字形式對code區(qū)尋址,區(qū)尋址,DWORD以字形式對以字形式對data區(qū)尋址,區(qū)尋址,P
44、WORD以字形式對以字形式對pdata區(qū)尋址,區(qū)尋址,XWORD以字形式對以字形式對xdata區(qū)尋址。訪問形式如下:區(qū)尋址。訪問形式如下: 宏名宏名地址地址 宏名為宏名為CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORD、PWORD或或XWORD。地址為存。地址為存儲單元的絕對地址,一般用十六進制形式表示。儲單元的絕對地址,一般用十六進制形式表示。第4章 單片機C語言程序設(shè)計【例【例4-7】絕對地址對存儲單元的訪問】絕對地址對存儲單元的訪問#include /*將絕對地址頭文件包含在文件中將絕對地址頭文件包含在文件中*/#include /*將寄存器頭文件包含在文件中將寄存
45、器頭文件包含在文件中*/#define uchar unsigned char /*定義符號定義符號uchar為數(shù)據(jù)類型符為數(shù)據(jù)類型符unsigned char*/#define uint unsigned int /*定義符號定義符號uint為數(shù)據(jù)類型符為數(shù)據(jù)類型符unsigned int*/void main(void)uchar var1;uint var2;var1=XBYTE0 x0005; /*XBYTE0 x0005訪問片外訪問片外RAM的的0005字節(jié)單元字節(jié)單元*/var2=XWORD0 x0002; /*XWORD0 x0002訪問片外訪問片外RAM的的000字單元字單元*
46、/.while(1);第4章 單片機C語言程序設(shè)計二通過指針訪問二通過指針訪問 采用指針的方法,可以實現(xiàn)在采用指針的方法,可以實現(xiàn)在C51程序中對任意程序中對任意指定的存儲器單元進行訪問。指定的存儲器單元進行訪問?!纠纠?-8】 通過指針實現(xiàn)絕對地址的訪問。通過指針實現(xiàn)絕對地址的訪問。#define uchar unsigned char#define uint unsigned intvoid func(void)uchar data var1;uchar pdata *dp1; /*定義一個指向定義一個指向pdata區(qū)的指針區(qū)的指針dp1*/uint xdata *dp2; /*定義一個
47、指向定義一個指向xdata區(qū)的指針區(qū)的指針dp2*/uchar data *dp3; /*定義一個指向定義一個指向data區(qū)的指針區(qū)的指針dp3*/dp1=0 x30; /*dp1指針賦值,指向指針賦值,指向pdata區(qū)的區(qū)的30H單元單元*/dp2=0 x1000; /*dp2指針賦值,指向指針賦值,指向xdata區(qū)的區(qū)的1000H單元單元*/*dp1=0 xff; /*將數(shù)據(jù)將數(shù)據(jù)0 xff送到片外送到片外RAM30H單元單元*/*dp2=0 x1234; /*將數(shù)據(jù)將數(shù)據(jù)0 x1234送到片外送到片外RAM1000H單元單元*/dp3=&var1; /*dp3指針指向指針指向da
48、ta區(qū)的區(qū)的var1變量變量*/*dp3=0 x20; /*給變量給變量var1賦值賦值0 x20*/第4章 單片機C語言程序設(shè)計三使用三使用C51擴展關(guān)鍵字擴展關(guān)鍵字_at_ 使用使用_at_對指定的存儲器空間的絕對地址進行訪對指定的存儲器空間的絕對地址進行訪問,一般格式如下:問,一般格式如下: 存儲器類型存儲器類型 數(shù)據(jù)類型說明符數(shù)據(jù)類型說明符 變量名變量名 _at_ 地址地址常數(shù);常數(shù); 其中,存儲器類型為其中,存儲器類型為data、bdata、idata、pdata等等C51能識別的數(shù)據(jù)類型,如省略則按存儲模式規(guī)定能識別的數(shù)據(jù)類型,如省略則按存儲模式規(guī)定的默認存儲器類型確定變量的存儲器
49、區(qū)域;數(shù)據(jù)類型的默認存儲器類型確定變量的存儲器區(qū)域;數(shù)據(jù)類型為為C51支持的數(shù)據(jù)類型。地址常數(shù)用于指定變量的絕支持的數(shù)據(jù)類型。地址常數(shù)用于指定變量的絕對地址,必須位于有效的存儲器空間之內(nèi);對地址,必須位于有效的存儲器空間之內(nèi);使用使用_at_定義的變量必須為全局變量。定義的變量必須為全局變量。第4章 單片機C語言程序設(shè)計【例【例4-9】通過】通過_at_實現(xiàn)絕對地址的訪問。實現(xiàn)絕對地址的訪問。#define uchar unsigned char #define uint unsigned intdata uchar x1 _at_ 0 x40; /*在在data區(qū)中定義字節(jié)變量區(qū)中定義字節(jié)變
50、量x1,它的地址為它的地址為40H*/xdata uint x2 _at_ 0 x2000; /*在在xdata區(qū)中定義字變量區(qū)中定義字變量x2,它的地址為它的地址為2000H*/void main(void)x1=0 xff;x2=0 x1234;.while(1);第4章 單片機C語言程序設(shè)計4.4 C51的運算符及表達式的運算符及表達式4.4.1 賦值運算符賦值運算符 賦值運算符賦值運算符“=”,功能是將一個數(shù)據(jù)的值賦給一,功能是將一個數(shù)據(jù)的值賦給一個變量個變量(匯編語言中匯編語言中MOV語句語句) 。一個賦值語句的格式。一個賦值語句的格式如下:如下: 變量變量=表達式;表達式; 執(zhí)行時
51、先計算出右邊表達式的值,然后賦給左邊的執(zhí)行時先計算出右邊表達式的值,然后賦給左邊的變量。例如:變量。例如: x=8+9; /*將將8+9的值賦紿變量的值賦紿變量x*/ x=y=5; /*將常數(shù)將常數(shù)5同時賦給變量同時賦給變量x和和y*/ 在在C51中,允許在一個語句中同時給多個變量賦值,中,允許在一個語句中同時給多個變量賦值,賦值順序賦值順序自右向左自右向左。 第4章 單片機C語言程序設(shè)計4.4.2 算術(shù)運算符算術(shù)運算符C51中支持的算術(shù)運算符有:中支持的算術(shù)運算符有:+ 加或取正值運算符加或取正值運算符- 減或取負值運算符減或取負值運算符 * 乘運算符乘運算符/ 除運算符除運算符% 取余運算
52、符取余運算符 加、減、乘運算相對比較簡單,而對于除運算,加、減、乘運算相對比較簡單,而對于除運算,如相除的兩個數(shù)為浮點數(shù),則運算的結(jié)果也為浮點數(shù),如相除的兩個數(shù)為浮點數(shù),則運算的結(jié)果也為浮點數(shù),如相除的兩個數(shù)為整數(shù),則運算的結(jié)果也為整數(shù),即為如相除的兩個數(shù)為整數(shù),則運算的結(jié)果也為整數(shù),即為整除。如整除。如25.0/20.0結(jié)果為結(jié)果為1.25,而,而25/20結(jié)果為結(jié)果為1。 對于取余運算,則要求參加運算的兩個數(shù)必須為對于取余運算,則要求參加運算的兩個數(shù)必須為整數(shù),運算結(jié)果為它們的余數(shù)。例如:整數(shù),運算結(jié)果為它們的余數(shù)。例如:x=5%3,結(jié)果,結(jié)果x的值為的值為2。第4章 單片機C語言程序設(shè)計
53、4.4.3 關(guān)系運算符關(guān)系運算符C51中有中有6種關(guān)系運算符:種關(guān)系運算符: 大于大于= 大于等于大于等于= 小于等于小于等于= = 等于等于 != 不等于不等于 關(guān)系運算用于比較兩個數(shù)的大小,用關(guān)系運算符關(guān)系運算用于比較兩個數(shù)的大小,用關(guān)系運算符將兩個表達式連接起來形成的式子稱為關(guān)系表達式。將兩個表達式連接起來形成的式子稱為關(guān)系表達式。關(guān)系表達式通常用來作為判別條件構(gòu)造分支或循環(huán)程關(guān)系表達式通常用來作為判別條件構(gòu)造分支或循環(huán)程序。關(guān)系表達式的一般形式如下:序。關(guān)系表達式的一般形式如下: 表達式表達式1 關(guān)系運算符關(guān)系運算符 表達式表達式2 關(guān)系運算的結(jié)果為邏輯量,成立為真關(guān)系運算的結(jié)果為邏輯
54、量,成立為真(1),不成立,不成立為假為假(0)。注意:注意:關(guān)系運算符等于關(guān)系運算符等于“= =”是由兩個是由兩個“=”組成組成。第4章 單片機C語言程序設(shè)計4.4.4 邏輯運算符邏輯運算符C51有有3種邏輯運算符:種邏輯運算符:| 邏輯或邏輯或& 邏輯與邏輯與! 邏輯非邏輯非 關(guān)系運算符用于反映兩個表達式之間的大小關(guān)系,邏輯關(guān)系運算符用于反映兩個表達式之間的大小關(guān)系,邏輯運算符則用于求條件式的邏輯值,用邏輯運算符將關(guān)系表達式運算符則用于求條件式的邏輯值,用邏輯運算符將關(guān)系表達式或邏輯量連接起來的式子就是邏輯表達式?;蜻壿嬃窟B接起來的式子就是邏輯表達式。 邏輯與,格式:邏輯與,格式:
55、 條件式條件式1 & 條件式條件式2邏輯或,格式:邏輯或,格式: 條件式條件式1 | 條件式條件式2邏輯非,格式:邏輯非,格式: !條件式!條件式例如:若例如:若a=8,b=3,c=0,則!,則!a為假,為假,a & b為真,為真,b & c為假。為假。注意此處將數(shù)字變量注意此處將數(shù)字變量a,b,c當成邏輯變量來使用。當成邏輯變量來使用。第4章 單片機C語言程序設(shè)計4.4.5 位運算符位運算符 C51語言能對運算對象按位進行操作。位運算是按語言能對運算對象按位進行操作。位運算是按位對變量進行運算,但并不改變參與運算的變量的值。位對變量進行運算,但并不改變參與運算的變量的
56、值。如果要求按位改變變量的值,則要利用相應的賦值運如果要求按位改變變量的值,則要利用相應的賦值運算。算。C51中位運算符只能對整數(shù)進行操作,不能對浮中位運算符只能對整數(shù)進行操作,不能對浮點數(shù)進行操作。點數(shù)進行操作。C51中的位運算符有:中的位運算符有:& 按位與按位與| 按位或按位或 按位異或按位異或 按位取反按位取反 右移右移第4章 單片機C語言程序設(shè)計4.4.6 復合賦值運算符復合賦值運算符 C51語言中支持在賦值運算符語言中支持在賦值運算符“=”的前面加上其它的前面加上其它運算符,組成復合賦值運算符。下面是運算符,組成復合賦值運算符。下面是C51中支持的復中支持的復合賦值運算符:
57、合賦值運算符:+= 加法賦值加法賦值 + 減法賦值減法賦值*= 乘法賦值乘法賦值 /= 除法賦值除法賦值%= 取模賦值取模賦值 &= 邏輯與賦值邏輯與賦值|= 邏輯或賦值邏輯或賦值 = 邏輯異或賦值邏輯異或賦值= 邏輯非賦值邏輯非賦值 = 右移位賦值右移位賦值=2相當于相當于x=x2。第4章 單片機C語言程序設(shè)計4.4.7 逗號運算符逗號運算符 在在C51語言中,逗號語言中,逗號“,”是一個特殊的運算符,是一個特殊的運算符,可以用它將兩個或兩個以上的表達式連接起來,稱為可以用它將兩個或兩個以上的表達式連接起來,稱為逗號表達式。逗號表達式的一般格式為:逗號表達式。逗號表達式的一般格式為:
58、 表達式表達式1,表達式,表達式2,表達式,表達式n 程序執(zhí)行時對逗號表達式的處理:按程序執(zhí)行時對逗號表達式的處理:按從左至右的從左至右的順序依次計算出各個表達式的值,而整個逗號表達式順序依次計算出各個表達式的值,而整個逗號表達式的值是最右邊的表達式的值是最右邊的表達式(表達式表達式n)的值。的值。例如:例如:x=(a=3,6*3)結(jié)果結(jié)果x的值為的值為18。第4章 單片機C語言程序設(shè)計4.4.8 條件運算符條件運算符 條件運算符條件運算符“?:?:”是是C51語言中語言中唯一的一個唯一的一個三目運算符三目運算符,它要求有三個運算對象,用它可以將三,它要求有三個運算對象,用它可以將三個表達式連
59、接在一起構(gòu)成一個條件表達式。條件表達個表達式連接在一起構(gòu)成一個條件表達式。條件表達式的一般格式為:式的一般格式為: 邏輯表達式?表達式邏輯表達式?表達式1:表達式:表達式2 其功能是先計算邏輯表達式的值,當邏輯表達式其功能是先計算邏輯表達式的值,當邏輯表達式的值為真的值為真(非非0值值)時,將計算的表達式時,將計算的表達式1的值作為整個的值作為整個條件表達式的值;當邏輯表達式的值為假條件表達式的值;當邏輯表達式的值為假(0值值)時,將時,將計算的表達式計算的表達式2的值作為整個條件表達式的值。的值作為整個條件表達式的值。例如:例如:條件表達式條件表達式max=(ab)?a:b的執(zhí)行結(jié)果是的執(zhí)行
60、結(jié)果是將將a和和b中較大的數(shù)賦值給變量中較大的數(shù)賦值給變量max。第4章 單片機C語言程序設(shè)計4.4.9 指針與地址運算符指針與地址運算符 指針是指針是C51語言中的一個十分重要的概念,在語言中的一個十分重要的概念,在C51中的數(shù)據(jù)類型中專門有一種指針類型。指針為變量的訪中的數(shù)據(jù)類型中專門有一種指針類型。指針為變量的訪問提供了另一種方式,變量的指針就是該變量的地址,問提供了另一種方式,變量的指針就是該變量的地址,還可以定義一個專門指向某個變量的地址的指針變量。還可以定義一個專門指向某個變量的地址的指針變量。為了表示指針變量和它所指向的變量地址之間的關(guān)系,為了表示指針變量和它所指向的變量地址之間的關(guān)系,C51中提供了兩個專門的運算符:中提供了兩個專門的運算符:* 指針運算符
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代交通樞紐的鐵路貨運效率優(yōu)化
- 深度解讀如何用云計算構(gòu)建高效智能制造平臺
- 國慶節(jié)巡航摩旅活動方案
- 小學趣味運動會活動方案策劃
- 2024年春七年級地理下冊 第九章 第二節(jié) 巴西說課稿 (新版)新人教版
- 23 梅蘭芳蓄須說課稿-2024-2025學年四年級上冊語文統(tǒng)編版001
- 8 千年夢圓在今朝(說課稿)2023-2024學年部編版語文四年級下冊
- 5 協(xié)商決定班級事務 說課稿-2024-2025學年道德與法治五年級上冊統(tǒng)編版
- 2023八年級英語上冊 Module 9 Population Unit 3 Language in use說課稿(新版)外研版
- 《10天然材料和人造材料》說課稿-2023-2024學年科學三年級下冊青島版
- 文檔協(xié)同編輯-深度研究
- 七年級數(shù)學新北師大版(2024)下冊第一章《整式的乘除》單元檢測習題(含簡單答案)
- 2024-2025學年云南省昆明市盤龍區(qū)高一(上)期末數(shù)學試卷(含答案)
- 五年級上冊寒假作業(yè)答案(人教版)
- 2024年財政部會計法律法規(guī)答題活動題目及答案一
- 2025年中考語文復習熱搜題速遞之說明文閱讀(2024年7月)
- 和達投資集團(杭州)有限公司招聘筆試沖刺題2025
- 政企單位春節(jié)元宵猜燈謎活動謎語200個(含謎底)
- 綜治工作培訓課件
- 2024年云網(wǎng)安全應知應會考試題庫
- 2024年全國職業(yè)院校技能大賽高職組(智能節(jié)水系統(tǒng)設(shè)計與安裝賽項)考試題庫-下(多選、判斷題)
評論
0/150
提交評論