第2章(3)C51程序設(shè)計(jì)語(yǔ)言_第1頁(yè)
第2章(3)C51程序設(shè)計(jì)語(yǔ)言_第2頁(yè)
第2章(3)C51程序設(shè)計(jì)語(yǔ)言_第3頁(yè)
第2章(3)C51程序設(shè)計(jì)語(yǔ)言_第4頁(yè)
第2章(3)C51程序設(shè)計(jì)語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、KEIL C編譯器所支持的數(shù)據(jù)類(lèi)型編譯器所支持的數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型長(zhǎng)長(zhǎng) 度度值值 域域unsigned char單字節(jié)單字節(jié)0255signed char單字節(jié)單字節(jié)-128+127unsigned int雙字節(jié)雙字節(jié)065535signed int雙字節(jié)雙字節(jié)-32768+32767unsigned long四字節(jié)四字節(jié)04294967295signed long四字節(jié)四字節(jié)-2147483648+2147483647float四字節(jié)四字節(jié)1.175494E-383.402823E+38*13 字節(jié)字節(jié)對(duì)象的地址對(duì)象的地址bit位位0 或或 1sfr單字節(jié)單字節(jié)0255sfr16雙字節(jié)

2、雙字節(jié)065535sbit位位0 或或 12.3.1.2 2.3.1.2 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型一字符型一字符型charchar有有signed charsigned char和和unsigned charunsigned char之分,默認(rèn)為之分,默認(rèn)為signed charsigned char。它們的長(zhǎng)度均為它們的長(zhǎng)度均為一個(gè)字節(jié)一個(gè)字節(jié),用于存放一個(gè)單字節(jié)的數(shù)據(jù)。對(duì),用于存放一個(gè)單字節(jié)的數(shù)據(jù)。對(duì)于于signed charsigned char,它用于定義帶符號(hào)字節(jié)數(shù)據(jù),其字節(jié)的最高,它用于定義帶符號(hào)字節(jié)數(shù)據(jù),其字節(jié)的最高位為符號(hào)位,位為符號(hào)位,“0”0”表示正數(shù),表示正數(shù),“1”1”表示負(fù)數(shù)

3、,補(bǔ)碼表示,表示負(fù)數(shù),補(bǔ)碼表示,所能表示的數(shù)值范圍是所能表示的數(shù)值范圍是-128+127;對(duì)于;對(duì)于unsigned charunsigned char,它,它用于定義無(wú)符號(hào)字節(jié)數(shù)據(jù)或字符,可以存放一個(gè)字節(jié)的無(wú)符用于定義無(wú)符號(hào)字節(jié)數(shù)據(jù)或字符,可以存放一個(gè)字節(jié)的無(wú)符號(hào)數(shù),其取值范圍為號(hào)數(shù),其取值范圍為0255。unsigned charunsigned char可以用來(lái)存放無(wú)可以用來(lái)存放無(wú)符號(hào)數(shù),也可以存放西文字符,一個(gè)西文字符占一個(gè)字節(jié),符號(hào)數(shù),也可以存放西文字符,一個(gè)西文字符占一個(gè)字節(jié),在計(jì)算機(jī)內(nèi)部用在計(jì)算機(jī)內(nèi)部用ASCIIASCII碼存放。碼存放。 二二int整型整型分分singed in

4、t和和unsigned int。默認(rèn)為。默認(rèn)為signed int。它們的長(zhǎng)度均。它們的長(zhǎng)度均為兩個(gè)字節(jié),用于存放一個(gè)雙字節(jié)數(shù)據(jù)。對(duì)于為兩個(gè)字節(jié),用于存放一個(gè)雙字節(jié)數(shù)據(jù)。對(duì)于signed int,用于,用于存放兩字節(jié)帶符號(hào)數(shù),補(bǔ)碼表示,數(shù)的范疇為存放兩字節(jié)帶符號(hào)數(shù),補(bǔ)碼表示,數(shù)的范疇為-32768+32767。對(duì)于對(duì)于unsigned int,用于存放兩字節(jié)無(wú)符號(hào)數(shù),數(shù)的范圍為,用于存放兩字節(jié)無(wú)符號(hào)數(shù),數(shù)的范圍為065535。三三long長(zhǎng)整型長(zhǎng)整型 分分singed long和和unsigned long。默認(rèn)為。默認(rèn)為signed long。它們。它們的長(zhǎng)度均為四個(gè)字節(jié),用于存放一個(gè)四字節(jié)

5、數(shù)據(jù)。對(duì)于的長(zhǎng)度均為四個(gè)字節(jié),用于存放一個(gè)四字節(jié)數(shù)據(jù)。對(duì)于signed long,用于存放四字節(jié)帶符號(hào)數(shù),補(bǔ)碼表示,數(shù)的范疇為,用于存放四字節(jié)帶符號(hào)數(shù),補(bǔ)碼表示,數(shù)的范疇為-2147483648+2147483647。對(duì)于。對(duì)于unsigned long,用于存放四字,用于存放四字節(jié)無(wú)符號(hào)數(shù),數(shù)的范圍為節(jié)無(wú)符號(hào)數(shù),數(shù)的范圍為04294967295。四四floatfloat浮點(diǎn)型浮點(diǎn)型 floatfloat型數(shù)據(jù)的長(zhǎng)度為四個(gè)字節(jié),包含指數(shù)和尾數(shù)兩部分,型數(shù)據(jù)的長(zhǎng)度為四個(gè)字節(jié),包含指數(shù)和尾數(shù)兩部分,最高位為符號(hào)位,最高位為符號(hào)位,“1”1”表示負(fù)數(shù),表示負(fù)數(shù),“0”0”表示正數(shù),其次的表示正數(shù),其

6、次的8 8位為階碼,最后的位為階碼,最后的2323位為尾數(shù)的有效數(shù)位。位為尾數(shù)的有效數(shù)位。 五五* * 指針型指針型 指針型變量中存放的是指向另一個(gè)數(shù)據(jù)的地址。這個(gè)指針指針型變量中存放的是指向另一個(gè)數(shù)據(jù)的地址。這個(gè)指針變量要占用一定的內(nèi)存單元,一般為變量要占用一定的內(nèi)存單元,一般為1313個(gè)字節(jié)。個(gè)字節(jié)。六六位類(lèi)型位類(lèi)型是是C51C51中擴(kuò)充的數(shù)據(jù)類(lèi)型,用于訪問(wèn)中擴(kuò)充的數(shù)據(jù)類(lèi)型,用于訪問(wèn)5151單片機(jī)中的可尋址的位單單片機(jī)中的可尋址的位單元。在元。在C51C51中,支持兩種位類(lèi)型:中,支持兩種位類(lèi)型:bitbit型和型和sbitsbit型。它們?cè)趦?nèi)存型。它們?cè)趦?nèi)存中都只占一個(gè)二進(jìn)制位,其值可以

7、是中都只占一個(gè)二進(jìn)制位,其值可以是“1”1”或或“0”0”。其中用。其中用bitbit定義的位變量在定義的位變量在C51C51編譯器編譯時(shí),在不同的時(shí)候位地址是可以編譯器編譯時(shí),在不同的時(shí)候位地址是可以變化的,而用變化的,而用sbitsbit定義的位變量必須與定義的位變量必須與5151單片機(jī)的一個(gè)可以位單片機(jī)的一個(gè)可以位尋址的字節(jié)單元中的某一位聯(lián)系在一起,在尋址的字節(jié)單元中的某一位聯(lián)系在一起,在C51C51編譯器編譯時(shí),編譯器編譯時(shí),其對(duì)應(yīng)的位地址是不可變化的。其對(duì)應(yīng)的位地址是不可變化的。bit位類(lèi)型符用于定義一般的位變量。它的格式如下: bit 位變量名;在格式中可以加上各種修飾,但注意存儲(chǔ)

8、器類(lèi)型只能是在格式中可以加上各種修飾,但注意存儲(chǔ)器類(lèi)型只能是bdata、data、idata。只能是片內(nèi)。只能是片內(nèi)RAM的可位尋址區(qū),嚴(yán)格來(lái)說(shuō)只能是的可位尋址區(qū),嚴(yán)格來(lái)說(shuō)只能是bdata。七七特殊功能寄存器型特殊功能寄存器型 這是這是C51擴(kuò)充的數(shù)據(jù)類(lèi)型,用于訪問(wèn)擴(kuò)充的數(shù)據(jù)類(lèi)型,用于訪問(wèn)51單片機(jī)中的特殊功能單片機(jī)中的特殊功能寄存器數(shù)據(jù),它分寄存器數(shù)據(jù),它分sfr和和sfr16兩種類(lèi)型,其中兩種類(lèi)型,其中sfr為字節(jié)型特殊功能為字節(jié)型特殊功能寄存器類(lèi)型,占一個(gè)內(nèi)存單元,利用它可以訪問(wèn)寄存器類(lèi)型,占一個(gè)內(nèi)存單元,利用它可以訪問(wèn)51內(nèi)部的所有特內(nèi)部的所有特殊功能寄存器;殊功能寄存器;sfr16為

9、雙字節(jié)型特殊功能寄存器類(lèi)型,占用兩個(gè)為雙字節(jié)型特殊功能寄存器類(lèi)型,占用兩個(gè)字節(jié)單元,利用它可以訪問(wèn)字節(jié)單元,利用它可以訪問(wèn)51內(nèi)部的所有兩個(gè)字節(jié)的特殊功能寄內(nèi)部的所有兩個(gè)字節(jié)的特殊功能寄存器。在存器。在C51中對(duì)特殊功能寄存器的訪問(wèn)必須先用中對(duì)特殊功能寄存器的訪問(wèn)必須先用sfr或或sfr16進(jìn)行進(jìn)行聲明。聲明。2.3.1.4 變量及其存儲(chǔ)模式變量及其存儲(chǔ)模式 變量是在程序運(yùn)行過(guò)程中其值可以改變的量。一個(gè)變量變量是在程序運(yùn)行過(guò)程中其值可以改變的量。一個(gè)變量由兩部分組成:變量名和變量值。在由兩部分組成:變量名和變量值。在C51中,變量在使用前必中,變量在使用前必須對(duì)變量進(jìn)行定義,定義的格式如下:須

10、對(duì)變量進(jìn)行定義,定義的格式如下: 存儲(chǔ)種類(lèi)存儲(chǔ)種類(lèi) 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型 變量名表;變量名表;一數(shù)據(jù)類(lèi)型說(shuō)明符一數(shù)據(jù)類(lèi)型說(shuō)明符 在定義變量時(shí),必須通過(guò)數(shù)據(jù)類(lèi)型說(shuō)明符指明變量的數(shù)據(jù)在定義變量時(shí),必須通過(guò)數(shù)據(jù)類(lèi)型說(shuō)明符指明變量的數(shù)據(jù)類(lèi)型,指明變量在存儲(chǔ)器中占用的字節(jié)數(shù)??梢允腔緮?shù)據(jù)類(lèi)類(lèi)型,指明變量在存儲(chǔ)器中占用的字節(jié)數(shù)??梢允腔緮?shù)據(jù)類(lèi)型說(shuō)明符,也可以是組合數(shù)據(jù)類(lèi)型說(shuō)明符,還可以是用型說(shuō)明符,也可以是組合數(shù)據(jù)類(lèi)型說(shuō)明符,還可以是用typedef定義的類(lèi)型別名。定義的類(lèi)型別名。 在在C51C51中,為了增加程序的可讀性,允許用戶為系統(tǒng)固有的數(shù)中,為了增加程序的可讀性,允許用戶為系

11、統(tǒng)固有的數(shù)據(jù)類(lèi)型說(shuō)明符用據(jù)類(lèi)型說(shuō)明符用typedeftypedef起別名,格式如下:起別名,格式如下: typedef c51typedef c51固有的數(shù)據(jù)類(lèi)型說(shuō)明符固有的數(shù)據(jù)類(lèi)型說(shuō)明符 別名;別名;【例【例3-2】 typedef的使用。的使用。typedef unsigned int WORD;typedef unsigned char BYTE;BYTE a1=0 x12;WORD a2=0 x1234;三、存儲(chǔ)器類(lèi)型三、存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型是用于指明變量所處的單片機(jī)的存儲(chǔ)器區(qū)域情況存儲(chǔ)器類(lèi)型是用于指明變量所處的單片機(jī)的存儲(chǔ)器區(qū)域情況存儲(chǔ)器類(lèi)型與存儲(chǔ)種類(lèi)完全不同。存儲(chǔ)器類(lèi)型與存儲(chǔ)種類(lèi)完

12、全不同。C51C51編譯器能識(shí)別的存儲(chǔ)器編譯器能識(shí)別的存儲(chǔ)器類(lèi)型有:類(lèi)型有:存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型說(shuō)說(shuō) 明明datadata直接訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器(直接訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器(128128字節(jié)字節(jié)),),訪問(wèn)速度最快訪問(wèn)速度最快bdatabdata可位尋址內(nèi)部數(shù)據(jù)存儲(chǔ)器(可位尋址內(nèi)部數(shù)據(jù)存儲(chǔ)器(1616字節(jié)),允許位與字節(jié)混合訪問(wèn)字節(jié)),允許位與字節(jié)混合訪問(wèn)idataidata間接訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器(間接訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器(256256字節(jié)),對(duì)于字節(jié)),對(duì)于5151子系列,只允許子系列,只允許訪問(wèn)低訪問(wèn)低128B128B,對(duì)于,對(duì)于5252子系列,允許訪問(wèn)全部子系列,允許訪問(wèn)全部256B256B地

13、址地址pdatapdata分頁(yè)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器(分頁(yè)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器(256256字節(jié)),相當(dāng)于用字節(jié)),相當(dāng)于用MOVX RiMOVX Ri指令指令訪問(wèn)訪問(wèn)xdataxdata外部數(shù)據(jù)存儲(chǔ)器外部數(shù)據(jù)存儲(chǔ)器(64KB)(64KB),相當(dāng)于用,相當(dāng)于用MOVX DPTRMOVX DPTR指令訪問(wèn)指令訪問(wèn)codecode程序存儲(chǔ)器(程序存儲(chǔ)器(64KB64KB), ,相當(dāng)于用相當(dāng)于用MOVC A+DPTRMOVC A+DPTR指令訪問(wèn)指令訪問(wèn)例:數(shù)據(jù)類(lèi)型例:數(shù)據(jù)類(lèi)型 存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型 變量變量 char data var1; bit bdata flags;unsigned char xd

14、ata vextor; 定義變量時(shí)如果省略存儲(chǔ)器類(lèi)型,系統(tǒng)則會(huì)按編譯定義變量時(shí)如果省略存儲(chǔ)器類(lèi)型,系統(tǒng)則會(huì)按編譯模式模式SMALLSMALL、COMPACTCOMPACT或或LARGELARGE所規(guī)定的默認(rèn)存儲(chǔ)器類(lèi)所規(guī)定的默認(rèn)存儲(chǔ)器類(lèi)型去指定變量的存儲(chǔ)區(qū)域。型去指定變量的存儲(chǔ)區(qū)域。 2.3.1.5 C51定義特殊功能寄存器定義特殊功能寄存器 對(duì)對(duì)SFRSFR的操作,只能采用直接尋址方式。為了能直接訪問(wèn)這的操作,只能采用直接尋址方式。為了能直接訪問(wèn)這些特殊功能寄存器,些特殊功能寄存器,Keil C51Keil C51擴(kuò)充了兩個(gè)關(guān)鍵字?jǐn)U充了兩個(gè)關(guān)鍵字“sfr”sfr”、“sfr16”sfr16”,

15、可以直接對(duì),可以直接對(duì)5151單片機(jī)的特殊寄存器進(jìn)行定義。單片機(jī)的特殊寄存器進(jìn)行定義。一、一、 使用關(guān)鍵字使用關(guān)鍵字sfr、sfr16定義特殊功能寄存器定義特殊功能寄存器 sfr 特殊功能寄存器名特殊功能寄存器名= 特殊功能寄存器地址常數(shù)特殊功能寄存器地址常數(shù);如:對(duì)于如:對(duì)于8051片內(nèi)片內(nèi)I/O口,定義方法如下:口,定義方法如下:sfr P1 = 0 x90; /定義定義P1口,地址口,地址90H sfr后面是一個(gè)要定義的名字,要符合標(biāo)識(shí)符的命名規(guī)則,名后面是一個(gè)要定義的名字,要符合標(biāo)識(shí)符的命名規(guī)則,名字最好有一定的含義字最好有一定的含義 等號(hào)后面必須是常數(shù),不允許有帶運(yùn)算符的表達(dá)式,而且

16、該等號(hào)后面必須是常數(shù),不允許有帶運(yùn)算符的表達(dá)式,而且該常數(shù)必須在特殊功能寄存器的地址范圍之內(nèi)(常數(shù)必須在特殊功能寄存器的地址范圍之內(nèi)(80H-FFH)。)。Sfr16 特殊功能寄存器名特殊功能寄存器名= 特殊功能寄存器地址常數(shù)特殊功能寄存器地址常數(shù);如:數(shù)據(jù)指針如:數(shù)據(jù)指針DPTR,可以定義為:,可以定義為:sfr16 DPTR = 0 x82; /這里定義數(shù)據(jù)指針這里定義數(shù)據(jù)指針DPTR,地址為,地址為DPL=82H,DPH=83H 用用sfr16定義定義16位特殊功能寄存器時(shí),等號(hào)后面是它的低位地址,位特殊功能寄存器時(shí),等號(hào)后面是它的低位地址,高位地址一定要位于物理低位地址之上。高位地址一

17、定要位于物理低位地址之上。二、用二、用sbit定義特殊功能寄存器的特殊位定義特殊功能寄存器的特殊位1)sbit 位變量名位地址位變量名位地址sbit P1_1 = 0 x91;這樣是把位的絕對(duì)地址賦給位變量。這樣是把位的絕對(duì)地址賦給位變量。同同sfr一樣,一樣,sbit的位地址必須位于的位地址必須位于80HFFH之間。之間。2)Sbit 位變量名特殊功能寄存器名位變量名特殊功能寄存器名位地址位地址sfr P3 = 0 xB0;sbit P3_1 = P3 1; /先定義一個(gè)特殊功能寄存器名,先定義一個(gè)特殊功能寄存器名,再指定位變量名所在的位置。再指定位變量名所在的位置。當(dāng)可尋址位位于特殊功能寄

18、存器中時(shí)可采用這種方當(dāng)可尋址位位于特殊功能寄存器中時(shí)可采用這種方法。法。3)sbit 位變量名字節(jié)地址位變量名字節(jié)地址位地址位地址sbit P3_1 = 0 xB01; 三、三、 通過(guò)頭文件訪問(wèn)通過(guò)頭文件訪問(wèn)SFRSFR編譯器給出的頭文件已經(jīng)給出了常用編譯器給出的頭文件已經(jīng)給出了常用51 51 單片機(jī)中的單片機(jī)中的SFR SFR 及及其可位尋址位的定義。比如其可位尋址位的定義。比如Keil C Keil C 將這些頭文件按單片機(jī)的將這些頭文件按單片機(jī)的不同生產(chǎn)公司、不同型號(hào)分別存在不同生產(chǎn)公司、不同型號(hào)分別存在Keil C Keil C 的的INC INC 子目錄下,子目錄下,在程序中只需直接

19、引用這些頭文件即可實(shí)現(xiàn)對(duì)在程序中只需直接引用這些頭文件即可實(shí)現(xiàn)對(duì)SFR SFR 的訪問(wèn)和的訪問(wèn)和控制??刂啤!纠纠?-33-3】頭文件引用實(shí)例?!款^文件引用實(shí)例。#include /#include /單片機(jī)為單片機(jī)為atmel atmel 公司的公司的AT89C51AT89C51main()main() TL0=0 xb0; /TL0=0 xb0; /訪問(wèn)定時(shí)器訪問(wèn)定時(shí)器0 0,設(shè)置時(shí)間常數(shù),設(shè)置時(shí)間常數(shù)TH0=0 x3c;TH0=0 x3c;TR0=1; /TR0=1; /啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器0 0 C51C51包含的頭文件包含的頭文件reg51.hreg51.h, reg52.hreg

20、52.h, Reg51.h Reg51.h 定義定義5151子系列單片機(jī)的特殊功能寄存器和部分子系列單片機(jī)的特殊功能寄存器和部分位寄存器位寄存器 Reg52.h Reg52.h 定義定義5252子系列單片機(jī)的特殊功能寄存器和部分子系列單片機(jī)的特殊功能寄存器和部分位寄存器位寄存器 在程序開(kāi)始部分使用語(yǔ)句在程序開(kāi)始部分使用語(yǔ)句 #include #include 即可直接使用特殊功能寄存器及其部分位單元,不需要再即可直接使用特殊功能寄存器及其部分位單元,不需要再作定義。作定義。2.3.1.5 指針指針一指針的概念一指針的概念在在C語(yǔ)言中,數(shù)據(jù)通常是以變量的形式進(jìn)行存放和訪問(wèn)的。變語(yǔ)言中,數(shù)據(jù)通常是

21、以變量的形式進(jìn)行存放和訪問(wèn)的。變量在使用時(shí)分清兩個(gè)概念量在使用時(shí)分清兩個(gè)概念:變量名和變量的值。:變量名和變量的值。變量名變量名是數(shù)據(jù)的標(biāo)識(shí)符,相當(dāng)于內(nèi)存單元的地址是數(shù)據(jù)的標(biāo)識(shí)符,相當(dāng)于內(nèi)存單元的地址變量的值變量的值是數(shù)據(jù)的內(nèi)容,變量的值相當(dāng)于內(nèi)存單元的內(nèi)容。是數(shù)據(jù)的內(nèi)容,變量的值相當(dāng)于內(nèi)存單元的內(nèi)容。對(duì)于變量有兩種訪問(wèn)方式:對(duì)于變量有兩種訪問(wèn)方式:直接訪問(wèn)方式和間接訪問(wèn)方式直接訪問(wèn)方式和間接訪問(wèn)方式。直接訪問(wèn)方式。直接訪問(wèn)方式。對(duì)于變量的訪問(wèn),我們大多數(shù)時(shí)候是直接給對(duì)于變量的訪問(wèn),我們大多數(shù)時(shí)候是直接給出變量名。出變量名。間接訪問(wèn)方式。間接訪問(wèn)方式。例如要存取變量例如要存取變量a中的值時(shí),可

22、以先將變量中的值時(shí),可以先將變量a的地址放在另一個(gè)變量的地址放在另一個(gè)變量b中,訪問(wèn)時(shí)先找到變量中,訪問(wèn)時(shí)先找到變量b,從變量,從變量b中取出變量中取出變量a的地址,然后根據(jù)這個(gè)地址從內(nèi)存單元中取出變的地址,然后根據(jù)這個(gè)地址從內(nèi)存單元中取出變量量a的值。這就是間接訪問(wèn)。在這里,從變量的值。這就是間接訪問(wèn)。在這里,從變量b中取出的不是中取出的不是所訪問(wèn)的數(shù)據(jù),而是訪問(wèn)的數(shù)據(jù)(變量所訪問(wèn)的數(shù)據(jù),而是訪問(wèn)的數(shù)據(jù)(變量a的值)的地址,這就的值)的地址,這就是指針,變量是指針,變量b稱(chēng)為指針變量。稱(chēng)為指針變量。 變量的指針和指向變量的指針變量。變量的指針和指向變量的指針變量。變量的指針就是變量變量的指針

23、就是變量的地址。對(duì)于變量的地址。對(duì)于變量a,如果它所對(duì)應(yīng)的內(nèi)存單元地址為,如果它所對(duì)應(yīng)的內(nèi)存單元地址為2000H,它的指針就是,它的指針就是2000H。指針變量是指一個(gè)專(zhuān)門(mén)用。指針變量是指一個(gè)專(zhuān)門(mén)用來(lái)存放另一個(gè)變量地址的變量,它的值是指針。上面變量來(lái)存放另一個(gè)變量地址的變量,它的值是指針。上面變量b中存放的是變量中存放的是變量a的地址,變量的地址,變量b中的值是變量中的值是變量a的指針,變的指針,變量量b就是一個(gè)指向變量就是一個(gè)指向變量a的指針變量。的指針變量。二指針變量的定義二指針變量的定義指針變量的定義與一般變量的定義類(lèi)似,定義的一般形式為:指針變量的定義與一般變量的定義類(lèi)似,定義的一般形

24、式為:數(shù)據(jù)類(lèi)型說(shuō)明符數(shù)據(jù)類(lèi)型說(shuō)明符 存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型1 *【存儲(chǔ)器類(lèi)型【存儲(chǔ)器類(lèi)型2 】指針變量名;】指針變量名;其中:其中:“數(shù)據(jù)類(lèi)型說(shuō)明符數(shù)據(jù)類(lèi)型說(shuō)明符”說(shuō)明了該指針變量所指向的變量的類(lèi)型。說(shuō)明了該指針變量所指向的變量的類(lèi)型。 “存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型”是可選項(xiàng),如果帶有此選項(xiàng),指針被定義是可選項(xiàng),如果帶有此選項(xiàng),指針被定義為基于存儲(chǔ)器的指針。無(wú)此選項(xiàng)時(shí),被定義為一般指針。為基于存儲(chǔ)器的指針。無(wú)此選項(xiàng)時(shí),被定義為一般指針。 下面是幾個(gè)指針變量定義的例子:下面是幾個(gè)指針變量定義的例子:int * p1; /*定義一個(gè)指向整型變量的指針變量定義一個(gè)指向整型變量的指針變量p1*/char da

25、ta * p3; /*定義一個(gè)指向字符變量的指針變量定義一個(gè)指向字符變量的指針變量p3,該指針訪問(wèn)的數(shù)據(jù)在片內(nèi)數(shù)據(jù)存儲(chǔ)器中,該指針在內(nèi)存中占一該指針訪問(wèn)的數(shù)據(jù)在片內(nèi)數(shù)據(jù)存儲(chǔ)器中,該指針在內(nèi)存中占一個(gè)字節(jié)個(gè)字節(jié)*/float xdata * p4; /*定義一個(gè)指向浮點(diǎn)型變量的指針變量定義一個(gè)指向浮點(diǎn)型變量的指針變量p4,該指針訪問(wèn)的數(shù)據(jù)在片外數(shù)據(jù)存儲(chǔ)器中,該指針在內(nèi)存中,該指針訪問(wèn)的數(shù)據(jù)在片外數(shù)據(jù)存儲(chǔ)器中,該指針在內(nèi)存中占兩個(gè)字節(jié)占兩個(gè)字節(jié)*/Float *xdata p4; /*定義一個(gè)指向浮點(diǎn)型變量的指針變量定義一個(gè)指向浮點(diǎn)型變量的指針變量p4,該指針存放在片外數(shù)據(jù)存儲(chǔ)器中,該指針在內(nèi)存中

26、占三個(gè)字節(jié)該指針存放在片外數(shù)據(jù)存儲(chǔ)器中,該指針在內(nèi)存中占三個(gè)字節(jié)*/三指針變量的引用三指針變量的引用 指針變量是存放另一變量地址的特殊變量,指針變量只能指針變量是存放另一變量地址的特殊變量,指針變量只能存放地址。指針變量使用時(shí)注意兩個(gè)運(yùn)算符:存放地址。指針變量使用時(shí)注意兩個(gè)運(yùn)算符:&和和*。&”是取地址運(yùn)算符,是取地址運(yùn)算符,“*”是指針運(yùn)算符。是指針運(yùn)算符。通過(guò)通過(guò)“&”取地址運(yùn)算符可以把一個(gè)變量的地址送給指針變量,取地址運(yùn)算符可以把一個(gè)變量的地址送給指針變量,使指針變量指向該變量;通過(guò)使指針變量指向該變量;通過(guò)“*”指針運(yùn)算符可以實(shí)現(xiàn)通過(guò)指指針運(yùn)算符可以實(shí)現(xiàn)通過(guò)指針

27、變量訪問(wèn)它所指向的變量的值。針變量訪問(wèn)它所指向的變量的值。 例如:例如:int x,* px,* py;/*變量及指針變量定義變量及指針變量定義*/px=&x; /*將變量將變量x的地址賦給指針變量的地址賦給指針變量px,使,使px指向變量指向變量x*/* px=5; /*等價(jià)于等價(jià)于x=5*/py=px; /*將指針變量將指針變量px中的地址賦給指針變量中的地址賦給指針變量py,使指針變量,使指針變量py也指向也指向x*/2.3.2 C51的運(yùn)算符及表達(dá)式的運(yùn)算符及表達(dá)式1 賦值運(yùn)算符賦值運(yùn)算符 賦值運(yùn)算符賦值運(yùn)算符“=”,在,在C51中,它的功能是將一個(gè)數(shù)據(jù)的值賦中,它的功能是將一

28、個(gè)數(shù)據(jù)的值賦給一個(gè)變量,如給一個(gè)變量,如x=10。一個(gè)賦值語(yǔ)句的格式如下:。一個(gè)賦值語(yǔ)句的格式如下: 變量變量=表達(dá)式表達(dá)式;執(zhí)行時(shí)先計(jì)算出右邊表達(dá)式的值,然后賦給左邊的變量。例如:執(zhí)行時(shí)先計(jì)算出右邊表達(dá)式的值,然后賦給左邊的變量。例如: x=8+9; /*將將8+9的值賦紿變量的值賦紿變量x*/ x=y=5; /*將常數(shù)將常數(shù)5同時(shí)賦給變量同時(shí)賦給變量x和和y*注意:注意: 在賦值運(yùn)算中,當(dāng)在賦值運(yùn)算中,當(dāng)“=”兩側(cè)的類(lèi)型不一致時(shí),要將數(shù)據(jù)轉(zhuǎn)兩側(cè)的類(lèi)型不一致時(shí),要將數(shù)據(jù)轉(zhuǎn)換成同一數(shù)據(jù)類(lèi)型,轉(zhuǎn)換的方式有兩種。換成同一數(shù)據(jù)類(lèi)型,轉(zhuǎn)換的方式有兩種。1系統(tǒng)自動(dòng)轉(zhuǎn)換系統(tǒng)自動(dòng)轉(zhuǎn)換 編譯時(shí),將右邊表達(dá)式的

29、值轉(zhuǎn)換成左側(cè)變量的類(lèi)型,再賦編譯時(shí),將右邊表達(dá)式的值轉(zhuǎn)換成左側(cè)變量的類(lèi)型,再賦給該變量。給該變量。2.強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換 使用強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符轉(zhuǎn)換使用強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符轉(zhuǎn)換: (類(lèi)型名類(lèi)型名) (表達(dá)式),將(表達(dá)式),將表達(dá)式的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為前面要求的類(lèi)型名。表達(dá)式的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為前面要求的類(lèi)型名。 【例【例3-8】類(lèi)型轉(zhuǎn)換應(yīng)用?!款?lèi)型轉(zhuǎn)換應(yīng)用。 unsigned char x,y; unsigned int z,a; x=(float)a; y=(int)(x+y); z=x+(unsigned int)y;2 算術(shù)運(yùn)算符算術(shù)運(yùn)算符+ 加或取正值運(yùn)算符加或取正值運(yùn)算符- 減或取負(fù)值運(yùn)算符減

30、或取負(fù)值運(yùn)算符 * 乘運(yùn)算符乘運(yùn)算符/ 除運(yùn)算符除運(yùn)算符% 取余運(yùn)算符取余運(yùn)算符加、減、乘運(yùn)算相對(duì)比較簡(jiǎn)單,而對(duì)于除運(yùn)算,如相除的兩加、減、乘運(yùn)算相對(duì)比較簡(jiǎn)單,而對(duì)于除運(yùn)算,如相除的兩個(gè)數(shù)為浮點(diǎn)數(shù),則運(yùn)算的結(jié)果也為浮點(diǎn)數(shù),如相除的兩個(gè)數(shù)為個(gè)數(shù)為浮點(diǎn)數(shù),則運(yùn)算的結(jié)果也為浮點(diǎn)數(shù),如相除的兩個(gè)數(shù)為整數(shù),則運(yùn)算的結(jié)果也為整數(shù),即為整除。如整數(shù),則運(yùn)算的結(jié)果也為整數(shù),即為整除。如25.0/20.0結(jié)果為結(jié)果為1.25,而,而25/20結(jié)果為結(jié)果為1。對(duì)于取余運(yùn)算,則要求參加運(yùn)算的兩個(gè)數(shù)必須為整數(shù),運(yùn)算對(duì)于取余運(yùn)算,則要求參加運(yùn)算的兩個(gè)數(shù)必須為整數(shù),運(yùn)算結(jié)果為它們的余數(shù)。例如:結(jié)果為它們的余數(shù)。例如:x=

31、5%3,結(jié)果,結(jié)果x的值為的值為2。3 關(guān)系運(yùn)算符關(guān)系運(yùn)算符C51中有中有6種關(guān)系運(yùn)算符:種關(guān)系運(yùn)算符: 大于大于= 大于等于大于等于3,結(jié)果為真(結(jié)果為真(1),而),而10= =100,結(jié)果為假(,結(jié)果為假(0)。)。 4 邏輯運(yùn)算符邏輯運(yùn)算符C51有有3種邏輯運(yùn)算符:種邏輯運(yùn)算符:| 邏輯或邏輯或& 邏輯與邏輯與! 邏輯非邏輯非邏輯運(yùn)算符用于求條件式的邏輯值,用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯運(yùn)算符用于求條件式的邏輯值,用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子就是邏輯表達(dá)式。邏輯量連接起來(lái)的式子就是邏輯表達(dá)式。 邏輯與,格式:邏輯與,格式: 條件式條件式1 & 條件式條

32、件式2當(dāng)條件式當(dāng)條件式1與條件式與條件式2都為真時(shí)結(jié)果為真(非都為真時(shí)結(jié)果為真(非0),否則為假(),否則為假(0) 邏輯或,格式:邏輯或,格式: 條件式條件式1 | 條件式條件式2 當(dāng)條件式當(dāng)條件式1與條件式與條件式2都為假時(shí)結(jié)果為假(都為假時(shí)結(jié)果為假(0),否則為真(非),否則為真(非0) 邏輯非,格式:邏輯非,格式: !條件式!條件式 當(dāng)條件式原來(lái)為真(非當(dāng)條件式原來(lái)為真(非0),邏輯非后結(jié)果為假(),邏輯非后結(jié)果為假(0)。當(dāng)條件)。當(dāng)條件式原來(lái)為假(式原來(lái)為假(0),邏輯非后結(jié)果為真(非),邏輯非后結(jié)果為真(非0)。)。例如:若例如:若a=8,b=3,c=0,則!,則!a為假,為假,

33、a & b為真,為真,b & c為假。為假。5 位運(yùn)算符位運(yùn)算符位運(yùn)算是按位對(duì)變量進(jìn)行運(yùn)算,但并不改變參與運(yùn)算的變量的位運(yùn)算是按位對(duì)變量進(jìn)行運(yùn)算,但并不改變參與運(yùn)算的變量的值。值。C51中位運(yùn)算符只能對(duì)整數(shù)進(jìn)行操作,不能對(duì)浮點(diǎn)數(shù)進(jìn)行操中位運(yùn)算符只能對(duì)整數(shù)進(jìn)行操作,不能對(duì)浮點(diǎn)數(shù)進(jìn)行操作。作。C51中的位運(yùn)算符有:中的位運(yùn)算符有:& 按位與按位與| 按位或按位或 按位異或按位異或 按位取反按位取反 右移右移【例】設(shè)【例】設(shè)a=0 x45=01000101B,b=0 x3b=00111011B,則,則a&b、a|b、ab、a、a2分別為多少?分別為多少?a&b

34、=00000001b=0 x01。a|b=01111111B=0 x7f。ab=01111110B=0 x7e。a=10111010B=0 xba。a2=00001110B=0 x0e。6 復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符C51中支持的復(fù)合賦值運(yùn)算符:中支持的復(fù)合賦值運(yùn)算符:+= 加法賦值加法賦值 - = 減法賦值減法賦值*= 乘法賦值乘法賦值 /= 除法賦值除法賦值 %= 取模賦值取模賦值 &= 邏輯與賦值邏輯與賦值 |= 邏輯或賦值邏輯或賦值 = 邏輯異或賦值邏輯異或賦值 = 邏輯非賦值邏輯非賦值 = 右移位賦值右移位賦值 b)?a:b的執(zhí)行結(jié)果是將的執(zhí)行結(jié)果是將a和和b中較中較大的數(shù)

35、賦值給變量大的數(shù)賦值給變量max。9 指針與地址運(yùn)算符指針與地址運(yùn)算符* 指針運(yùn)算符指針運(yùn)算符& 取地址運(yùn)算符取地址運(yùn)算符指針運(yùn)算符指針運(yùn)算符“*”放在指針變量前面,通過(guò)它實(shí)現(xiàn)訪問(wèn)以指針變放在指針變量前面,通過(guò)它實(shí)現(xiàn)訪問(wèn)以指針變量的內(nèi)容為地址所指向的存儲(chǔ)單元。例如:指針變量量的內(nèi)容為地址所指向的存儲(chǔ)單元。例如:指針變量p中的地址中的地址為為2000H,則,則*p所訪問(wèn)的是地址為所訪問(wèn)的是地址為2000H的存儲(chǔ)單元,的存儲(chǔ)單元,x=*p,實(shí),實(shí)現(xiàn)把地址為現(xiàn)把地址為2000H的存儲(chǔ)單元的內(nèi)容送給變量的存儲(chǔ)單元的內(nèi)容送給變量x。取地址運(yùn)算符取地址運(yùn)算符“&”放在變量的前面,通過(guò)它取得

36、變量的地址,放在變量的前面,通過(guò)它取得變量的地址,變量的地址通常送給指針變量。例如:設(shè)變量變量的地址通常送給指針變量。例如:設(shè)變量x的內(nèi)容為的內(nèi)容為12H,地址為地址為2000H,則,則&x的值為的值為2000H,如有一指針變量,如有一指針變量p,則通常,則通常用用p=&x,實(shí)現(xiàn)將,實(shí)現(xiàn)將x變量的地址送給指針變量變量的地址送給指針變量p,指針變量,指針變量p指向指向變量變量x,以后可以通過(guò),以后可以通過(guò)*p訪問(wèn)變量訪問(wèn)變量x。2.3.3.2 選擇控制語(yǔ)句選擇控制語(yǔ)句一、一、if語(yǔ)句語(yǔ)句if語(yǔ)句是語(yǔ)句是C51中的一個(gè)基本條件選擇語(yǔ)句,它通常有三種格式:中的一個(gè)基本條件選擇語(yǔ)句,它

37、通常有三種格式:(1)if (表達(dá)式)(表達(dá)式) 語(yǔ)句;語(yǔ)句;(2)if (表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句1; else 語(yǔ)句語(yǔ)句2;(3)if (表達(dá)式(表達(dá)式1) 語(yǔ)句語(yǔ)句1;else if (表達(dá)式(表達(dá)式2) 語(yǔ)句語(yǔ)句2;else if (表達(dá)式(表達(dá)式3) 語(yǔ)句語(yǔ)句3;else if (表達(dá)式(表達(dá)式n-1) 語(yǔ)句語(yǔ)句n-1;else 語(yǔ)句語(yǔ)句n二、二、switch/case語(yǔ)句語(yǔ)句if語(yǔ)句通過(guò)嵌套可以實(shí)現(xiàn)多分支結(jié)構(gòu),但結(jié)構(gòu)復(fù)雜。語(yǔ)句通過(guò)嵌套可以實(shí)現(xiàn)多分支結(jié)構(gòu),但結(jié)構(gòu)復(fù)雜。switch是是C51中提供的專(zhuān)門(mén)處理多分支結(jié)構(gòu)的多分支選擇語(yǔ)句。它的中提供的專(zhuān)門(mén)處理多分支結(jié)構(gòu)的多分支選擇語(yǔ)句。

38、它的格式如下:格式如下:switch (表達(dá)式)(表達(dá)式)case 常量表達(dá)式常量表達(dá)式1:語(yǔ)句語(yǔ)句1;break;case 常量表達(dá)式常量表達(dá)式2:語(yǔ)句語(yǔ)句2;break;case 常量表達(dá)式常量表達(dá)式n:語(yǔ)句語(yǔ)句n;break;default:語(yǔ)句語(yǔ)句n+1;【例【例2-12】 STC89C51 單片機(jī)的單片機(jī)的P1.0 和和P1.1 引腳接有兩只按鍵,其引腳接有兩只按鍵,其4 種種邏輯組合分別點(diǎn)亮由邏輯組合分別點(diǎn)亮由P2.0P2.3 控制的控制的4 只只LED(高電平點(diǎn)亮),試編程(高電平點(diǎn)亮),試編程實(shí)現(xiàn)此功能。實(shí)現(xiàn)此功能。解:解: #include void main()data u

39、nsigned char a;doa=P1;a=a&0 x03; /,讀低,讀低2位位 P2=P2&0 xf0;switch (a)case 0:P2=P2|0 x01;break;case 1:P2=P2|0 x02;break;case 2:P2=P2|0 x04;break;case 3:P2=P2|0 x08;while(1);2.3.3.3 循環(huán)語(yǔ)句循環(huán)語(yǔ)句一、一、 基于基于 if if 和和goto goto 構(gòu)成的循環(huán)構(gòu)成的循環(huán)采用采用if if 和和goto goto 可以構(gòu)成可以構(gòu)成“當(dāng)型當(dāng)型”循環(huán)程序,其格式如下:循環(huán)程序,其格式如下:looploop:if

40、if(表達(dá)式)(表達(dá)式) 語(yǔ)句;語(yǔ)句;goto loopgoto loop; 采用采用if if 和和goto goto 也可以構(gòu)成也可以構(gòu)成“直到型直到型”循環(huán)程序,其格式如循環(huán)程序,其格式如下:下:looploop: 語(yǔ)句;語(yǔ)句;ifif(表達(dá)式)(表達(dá)式)goto loopgoto loop; goto goto 語(yǔ)句為無(wú)條件轉(zhuǎn)向語(yǔ)句,它的一般形式是:語(yǔ)句為無(wú)條件轉(zhuǎn)向語(yǔ)句,它的一般形式是:goto goto 語(yǔ)句標(biāo)號(hào);語(yǔ)句標(biāo)號(hào);二、二、while語(yǔ)句語(yǔ)句while語(yǔ)句在語(yǔ)句在C51中用于實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu),它的格式如下:中用于實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu),它的格式如下: while(表達(dá)式)(表達(dá)式)

41、 語(yǔ)句;語(yǔ)句; /*循環(huán)體循環(huán)體*/當(dāng)表達(dá)式為非當(dāng)表達(dá)式為非0(真)時(shí),就重復(fù)執(zhí)行循環(huán)體內(nèi)的語(yǔ)句;當(dāng)(真)時(shí),就重復(fù)執(zhí)行循環(huán)體內(nèi)的語(yǔ)句;當(dāng)表達(dá)式為表達(dá)式為0(假),則中止(假),則中止while循環(huán),程序?qū)?zhí)行循環(huán)結(jié)構(gòu)之循環(huán),程序?qū)?zhí)行循環(huán)結(jié)構(gòu)之外的下一條語(yǔ)句。外的下一條語(yǔ)句。三、三、 基于基于do-while 語(yǔ)句構(gòu)成的循環(huán)語(yǔ)句構(gòu)成的循環(huán)do-while 語(yǔ)句只能用來(lái)實(shí)現(xiàn)語(yǔ)句只能用來(lái)實(shí)現(xiàn)“直到型直到型”循環(huán),其一循環(huán),其一般格式是:般格式是:do語(yǔ)句;語(yǔ)句;/可以是復(fù)合語(yǔ)句可以是復(fù)合語(yǔ)句 while (表達(dá)式);(表達(dá)式);do-while 語(yǔ)句的特點(diǎn)是先執(zhí)行內(nèi)嵌的語(yǔ)句;再計(jì)算語(yǔ)句的特點(diǎn)是先

42、執(zhí)行內(nèi)嵌的語(yǔ)句;再計(jì)算表達(dá)式,如果表達(dá)式的值為非表達(dá)式,如果表達(dá)式的值為非0,則繼續(xù)執(zhí)行內(nèi)嵌的語(yǔ),則繼續(xù)執(zhí)行內(nèi)嵌的語(yǔ)句,直到表達(dá)式的值為句,直到表達(dá)式的值為0 時(shí)結(jié)束循環(huán)。時(shí)結(jié)束循環(huán)。 四、基于四、基于for 語(yǔ)句構(gòu)成的循環(huán)語(yǔ)句構(gòu)成的循環(huán)for 語(yǔ)句的一般形式為:語(yǔ)句的一般形式為:for (表達(dá)式(表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3)語(yǔ)句;語(yǔ)句;它的執(zhí)行過(guò)程是:它的執(zhí)行過(guò)程是:首先求解初始化表達(dá)式首先求解初始化表達(dá)式1;其次求解表達(dá)式;其次求解表達(dá)式2,判斷是否滿,判斷是否滿足循環(huán)條件,若其值非足循環(huán)條件,若其值非0,則執(zhí)行內(nèi)嵌語(yǔ)句;否則退出循環(huán);,則執(zhí)行內(nèi)嵌語(yǔ)句;否則退出循環(huán);最后

43、求解尺度增量表達(dá)式最后求解尺度增量表達(dá)式3,并回到第,并回到第2 步。步。在在for 語(yǔ)句中,可以沒(méi)有表達(dá)式語(yǔ)句中,可以沒(méi)有表達(dá)式1、表達(dá)式、表達(dá)式2 或表達(dá)式或表達(dá)式3,若,若三個(gè)表達(dá)式都沒(méi)有,則相當(dāng)于一個(gè)死循環(huán)。如果其后緊跟一三個(gè)表達(dá)式都沒(méi)有,則相當(dāng)于一個(gè)死循環(huán)。如果其后緊跟一個(gè)個(gè)“;”,則為空循環(huán),常用于延時(shí);,則為空循環(huán),常用于延時(shí);1break語(yǔ)句語(yǔ)句使用使用break語(yǔ)句可以從循環(huán)體中跳出循環(huán),提前結(jié)束循環(huán)而接語(yǔ)句可以從循環(huán)體中跳出循環(huán),提前結(jié)束循環(huán)而接著執(zhí)行循環(huán)結(jié)構(gòu)下面的語(yǔ)句。著執(zhí)行循環(huán)結(jié)構(gòu)下面的語(yǔ)句。它不能用在除了循環(huán)語(yǔ)句和它不能用在除了循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它

44、語(yǔ)句中語(yǔ)句之外的任何其它語(yǔ)句中【例】下面一段程序用于計(jì)算圓的面積,當(dāng)計(jì)算到面積大于【例】下面一段程序用于計(jì)算圓的面積,當(dāng)計(jì)算到面積大于100時(shí),由時(shí),由break語(yǔ)句跳出循環(huán)。語(yǔ)句跳出循環(huán)。for (r=1;r100) break;五、五、break和和continue語(yǔ)句語(yǔ)句continue語(yǔ)句用在循環(huán)結(jié)構(gòu)中,用于結(jié)束本次循環(huán),跳語(yǔ)句用在循環(huán)結(jié)構(gòu)中,用于結(jié)束本次循環(huán),跳過(guò)循環(huán)體中過(guò)循環(huán)體中continue下面尚未執(zhí)行的語(yǔ)句,直接進(jìn)行下一下面尚未執(zhí)行的語(yǔ)句,直接進(jìn)行下一次是否執(zhí)行循環(huán)的判定。次是否執(zhí)行循環(huán)的判定?!纠俊纠?輸出輸出100200間不能被間不能被3整除的數(shù)。整除的數(shù)。for (

45、i=100;i=200;i+)if (i%3= =0) continue;printf(“%d ”;i); 2continue語(yǔ)句語(yǔ)句return語(yǔ)句一般放在函數(shù)的最后位置,用于終止函數(shù)的執(zhí)行,語(yǔ)句一般放在函數(shù)的最后位置,用于終止函數(shù)的執(zhí)行,并控制程序返回調(diào)用該函數(shù)時(shí)所處的位置。返回時(shí)還可以通過(guò)并控制程序返回調(diào)用該函數(shù)時(shí)所處的位置。返回時(shí)還可以通過(guò)return語(yǔ)句帶回返回值。語(yǔ)句帶回返回值。return語(yǔ)句格式有兩種:語(yǔ)句格式有兩種:(1)return;(2)return (表達(dá)式表達(dá)式); 六、六、return語(yǔ)句語(yǔ)句2.3.4 函數(shù)函數(shù)2.3.4.1 函數(shù)的分類(lèi)與定義函數(shù)的分類(lèi)與定義一、函

46、數(shù)的分類(lèi)一、函數(shù)的分類(lèi)C 語(yǔ)言函數(shù)分為語(yǔ)言函數(shù)分為主函數(shù)主函數(shù)main( )和和普通函數(shù)普通函數(shù)兩種,而對(duì)于普通兩種,而對(duì)于普通函數(shù),又可以分為函數(shù),又可以分為標(biāo)準(zhǔn)庫(kù)函數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)和和用戶自定義函數(shù)用戶自定義函數(shù)。1)標(biāo)準(zhǔn)庫(kù)函數(shù))標(biāo)準(zhǔn)庫(kù)函數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)是由標(biāo)準(zhǔn)庫(kù)函數(shù)是由C 編譯系統(tǒng)提供的,在編譯系統(tǒng)提供的,在C 編譯系統(tǒng)中將一些編譯系統(tǒng)中將一些獨(dú)立的功能模塊編寫(xiě)成公用函數(shù),并將它們集中存放在系統(tǒng)的獨(dú)立的功能模塊編寫(xiě)成公用函數(shù),并將它們集中存放在系統(tǒng)的函數(shù)庫(kù)中,供程序設(shè)計(jì)時(shí)使用,稱(chēng)之為標(biāo)準(zhǔn)庫(kù)函數(shù)。函數(shù)庫(kù)中,供程序設(shè)計(jì)時(shí)使用,稱(chēng)之為標(biāo)準(zhǔn)庫(kù)函數(shù)。字符串操作函數(shù)位于字符串操作函數(shù)位于“string.h”

47、中。中。包括拷貝、比較、移動(dòng)等包括拷貝、比較、移動(dòng)等函數(shù)如函數(shù)如memcpy、memcmp、memmove、memset,這些函數(shù),這些函數(shù)對(duì)緩沖區(qū)進(jìn)行處理很方便。對(duì)緩沖區(qū)進(jìn)行處理很方便。流函數(shù)輸入輸出,位于流函數(shù)輸入輸出,位于“stdio.h”中中。流函數(shù)缺省為。流函數(shù)缺省為8051串口。串口。2)用戶自定義函數(shù))用戶自定義函數(shù)用戶自定義函數(shù)是用戶根據(jù)自己的需要而編寫(xiě)的函數(shù)。從函用戶自定義函數(shù)是用戶根據(jù)自己的需要而編寫(xiě)的函數(shù)。從函數(shù)定義的形式上可以將其劃分無(wú)參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)定義的形式上可以將其劃分無(wú)參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)。數(shù)。二、函數(shù)的定義二、函數(shù)的定義函數(shù)定義的完整形式如

48、下:函數(shù)定義的完整形式如下:返回?cái)?shù)據(jù)類(lèi)型返回?cái)?shù)據(jù)類(lèi)型 函數(shù)名函數(shù)名(形式參數(shù)列表形式參數(shù)列表) reentrant interrupt n using m 局部變量定義;局部變量定義; 函數(shù)體;函數(shù)體;1)函數(shù)返回值與數(shù)據(jù)類(lèi)型)函數(shù)返回值與數(shù)據(jù)類(lèi)型如果返回?cái)?shù)據(jù),進(jìn)行說(shuō)明;如果不返回,一般用如果返回?cái)?shù)據(jù),進(jìn)行說(shuō)明;如果不返回,一般用void說(shuō)明,說(shuō)明,也可以不說(shuō)明。函數(shù)返回值通過(guò)也可以不說(shuō)明。函數(shù)返回值通過(guò)return x返回,返回值是通過(guò)返回,返回值是通過(guò)函數(shù)名帶回的,一個(gè)函數(shù)只能有一個(gè)返回值。函數(shù)名帶回的,一個(gè)函數(shù)只能有一個(gè)返回值。2) reentrant修飾符修飾符 這個(gè)修飾符用于把函數(shù)定

49、義為可重入函數(shù)。所謂可這個(gè)修飾符用于把函數(shù)定義為可重入函數(shù)。所謂可重入函數(shù)就是允許被遞歸調(diào)用的函數(shù)。函數(shù)的遞歸調(diào)用重入函數(shù)就是允許被遞歸調(diào)用的函數(shù)。函數(shù)的遞歸調(diào)用是指當(dāng)一個(gè)函數(shù)正被調(diào)用尚未返回時(shí),又直接或間接調(diào)是指當(dāng)一個(gè)函數(shù)正被調(diào)用尚未返回時(shí),又直接或間接調(diào)用函數(shù)本身。用函數(shù)本身。3) interrupt m修飾符修飾符在在C51程序設(shè)計(jì)中,當(dāng)函數(shù)定義時(shí)用了程序設(shè)計(jì)中,當(dāng)函數(shù)定義時(shí)用了interrupt m修飾符,系修飾符,系統(tǒng)編譯時(shí)把對(duì)應(yīng)函數(shù)轉(zhuǎn)化為中斷函數(shù),按統(tǒng)編譯時(shí)把對(duì)應(yīng)函數(shù)轉(zhuǎn)化為中斷函數(shù),按MCS-51系統(tǒng)中斷的系統(tǒng)中斷的處理方式自動(dòng)把它安排在程序存儲(chǔ)器中的相應(yīng)位置。處理方式自動(dòng)把它安排

50、在程序存儲(chǔ)器中的相應(yīng)位置。 在該修飾符中,在該修飾符中,m的取值為的取值為031,對(duì)應(yīng)的中斷情況如下:,對(duì)應(yīng)的中斷情況如下:0外部中斷外部中斷01定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T02外部中斷外部中斷13定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T14串行口中斷串行口中斷5定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2其它值預(yù)留。其它值預(yù)留。4) using n修飾符修飾符修飾符修飾符using n用于指定本函數(shù)內(nèi)部使用的工作寄存器組,用于指定本函數(shù)內(nèi)部使用的工作寄存器組,其中其中n的取值為的取值為03,表示寄存器組號(hào)。,表示寄存器組號(hào)。對(duì)于對(duì)于using n修飾符的使用,注意以下幾點(diǎn):修飾符的使用,注意以下幾點(diǎn):(1)加入)加入using

51、n后,后,C51在編譯時(shí)自動(dòng)的在函數(shù)的開(kāi)始處在編譯時(shí)自動(dòng)的在函數(shù)的開(kāi)始處和結(jié)束處加入以下指令。和結(jié)束處加入以下指令。PUSH PSW ;標(biāo)志寄存器入棧;標(biāo)志寄存器入棧MOV PSW,#與寄存器組號(hào)相關(guān)的常量與寄存器組號(hào)相關(guān)的常量POP PSW ;標(biāo)志寄存器出棧;標(biāo)志寄存器出棧(2)using n修飾符不能用于有返回值的函數(shù),因?yàn)樾揎椃荒苡糜谟蟹祷刂档暮瘮?shù),因?yàn)镃51函函數(shù)的返回值是放在寄存器中的。如寄存器組改變了,返回值就數(shù)的返回值是放在寄存器中的。如寄存器組改變了,返回值就會(huì)出錯(cuò)。會(huì)出錯(cuò)。3.5 絕對(duì)地址的訪問(wèn)絕對(duì)地址的訪問(wèn)一使用一使用C51運(yùn)行庫(kù)中預(yù)定義宏運(yùn)行庫(kù)中預(yù)定義宏C51編譯器提供了一組宏定義來(lái)對(duì)編譯器提供了一組宏定義來(lái)對(duì)51系列單片機(jī)的系列單片機(jī)的code、data、pdata和和xdata空間進(jìn)行絕對(duì)尋址。空間進(jìn)行絕對(duì)尋址。這些函數(shù)原型放在這些函數(shù)原型放在absacc.h文件中。使用時(shí)須用預(yù)處理命令把該文件中。使用時(shí)須用預(yù)處理命令把該頭文件包含到文件中,形式為:頭文件包含到文件中,形式為:#include CBYTE以字節(jié)形式對(duì)以字節(jié)形式對(duì)code區(qū)尋址,區(qū)尋址,DBYTE以字節(jié)形式對(duì)以字節(jié)形式對(duì)data區(qū)尋址,區(qū)尋址,PBYTE

溫馨提示

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

評(píng)論

0/150

提交評(píng)論