




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
KEILC編譯器所支持的數(shù)據(jù)類型數(shù)據(jù)類型長度值域unsignedchar單字節(jié)0~255signedchar單字節(jié)-128~+127unsignedint雙字節(jié)0~65535signedint雙字節(jié)-32768~+32767unsignedlong四字節(jié)0~4294967295signedlong四字節(jié)-2147483648~+2147483647float四字節(jié)±1.175494E-38~±3.402823E+38*1~3字節(jié)對象的地址bit位0或1sfr單字節(jié)0~255sfr16雙字節(jié)0~65535sbit位0或12.3.1.2數(shù)據(jù)類型一.字符型char有signedchar和unsignedchar之分,默認(rèn)為signedchar。它們的長度均為一個(gè)字節(jié),用于存放一個(gè)單字節(jié)的數(shù)據(jù)。對于signedchar,它用于定義帶符號字節(jié)數(shù)據(jù),其字節(jié)的最高位為符號位,“0”表示正數(shù),“1”表示負(fù)數(shù),補(bǔ)碼表示,所能表示的數(shù)值范圍是-128~+127;對于unsignedchar,它用于定義無符號字節(jié)數(shù)據(jù)或字符,可以存放一個(gè)字節(jié)的無符號數(shù),其取值范圍為0~255。unsignedchar可以用來存放無符號數(shù),也可以存放西文字符,一個(gè)西文字符占一個(gè)字節(jié),在計(jì)算機(jī)內(nèi)部用ASCII碼存放。二.int整型分singedint和unsignedint。默認(rèn)為signedint。它們的長度均為兩個(gè)字節(jié),用于存放一個(gè)雙字節(jié)數(shù)據(jù)。對于signedint,用于存放兩字節(jié)帶符號數(shù),補(bǔ)碼表示,數(shù)的范疇為-32768~+32767。對于unsignedint,用于存放兩字節(jié)無符號數(shù),數(shù)的范圍為0~65535。三.long長整型分singedlong和unsignedlong。默認(rèn)為signedlong。它們的長度均為四個(gè)字節(jié),用于存放一個(gè)四字節(jié)數(shù)據(jù)。對于signedlong,用于存放四字節(jié)帶符號數(shù),補(bǔ)碼表示,數(shù)的范疇為-2147483648~+2147483647。對于unsignedlong,用于存放四字節(jié)無符號數(shù),數(shù)的范圍為0~4294967295。四.float浮點(diǎn)型float型數(shù)據(jù)的長度為四個(gè)字節(jié),包含指數(shù)和尾數(shù)兩部分,最高位為符號位,“1”表示負(fù)數(shù),“0”表示正數(shù),其次的8位為階碼,最后的23位為尾數(shù)的有效數(shù)位。五.*指針型指針型變量中存放的是指向另一個(gè)數(shù)據(jù)的地址。這個(gè)指針變量要占用一定的內(nèi)存單元,一般為1~3個(gè)字節(jié)。六.位類型是C51中擴(kuò)充的數(shù)據(jù)類型,用于訪問51單片機(jī)中的可尋址的位單元。在C51中,支持兩種位類型:bit型和sbit型。它們在內(nèi)存中都只占一個(gè)二進(jìn)制位,其值可以是“1”或“0”。其中用bit定義的位變量在C51編譯器編譯時(shí),在不同的時(shí)候位地址是可以變化的,而用sbit定義的位變量必須與51單片機(jī)的一個(gè)可以位尋址的字節(jié)單元中的某一位聯(lián)系在一起,在C51編譯器編譯時(shí),其對應(yīng)的位地址是不可變化的。bit位類型符用于定義一般的位變量。它的格式如下:bit位變量名;在格式中可以加上各種修飾,但注意存儲器類型只能是bdata、data、idata。只能是片內(nèi)RAM的可位尋址區(qū),嚴(yán)格來說只能是bdata。七.特殊功能寄存器型這是C51擴(kuò)充的數(shù)據(jù)類型,用于訪問51單片機(jī)中的特殊功能寄存器數(shù)據(jù),它分sfr和sfr16兩種類型,其中sfr為字節(jié)型特殊功能寄存器類型,占一個(gè)內(nèi)存單元,利用它可以訪問51內(nèi)部的所有特殊功能寄存器;sfr16為雙字節(jié)型特殊功能寄存器類型,占用兩個(gè)字節(jié)單元,利用它可以訪問51內(nèi)部的所有兩個(gè)字節(jié)的特殊功能寄存器。在C51中對特殊功能寄存器的訪問必須先用sfr或sfr16進(jìn)行聲明。2.3.1.4變量及其存儲模式變量是在程序運(yùn)行過程中其值可以改變的量。一個(gè)變量由兩部分組成:變量名和變量值。在C51中,變量在使用前必須對變量進(jìn)行定義,定義的格式如下:
[存儲種類]數(shù)據(jù)類型[存儲器類型]變量名表;一.?dāng)?shù)據(jù)類型說明符在定義變量時(shí),必須通過數(shù)據(jù)類型說明符指明變量的數(shù)據(jù)類型,指明變量在存儲器中占用的字節(jié)數(shù)??梢允腔緮?shù)據(jù)類型說明符,也可以是組合數(shù)據(jù)類型說明符,還可以是用typedef定義的類型別名。
在C51中,為了增加程序的可讀性,允許用戶為系統(tǒng)固有的數(shù)據(jù)類型說明符用typedef起別名,格式如下:
typedefc51固有的數(shù)據(jù)類型說明符別名;【例3-2】typedef的使用。 typedefunsignedintWORD; typedefunsignedcharBYTE; BYTEa1=0x12; WORDa2=0x1234;三、存儲器類型存儲器類型是用于指明變量所處的單片機(jī)的存儲器區(qū)域情況存儲器類型與存儲種類完全不同。C51編譯器能識別的存儲器類型有:存儲器類型說明data直接訪問內(nèi)部數(shù)據(jù)存儲器(128字節(jié)),訪問速度最快bdata可位尋址內(nèi)部數(shù)據(jù)存儲器(16字節(jié)),允許位與字節(jié)混合訪問idata間接訪問內(nèi)部數(shù)據(jù)存儲器(256字節(jié)),對于51子系列,只允許訪問低128B,對于52子系列,允許訪問全部256B地址pdata分頁訪問外部數(shù)據(jù)存儲器(256字節(jié)),相當(dāng)于用MOVX@Ri指令訪問xdata外部數(shù)據(jù)存儲器(64KB),相當(dāng)于用MOVX@DPTR指令訪問code程序存儲器(64KB),相當(dāng)于用MOVC@A+DPTR指令訪問例:數(shù)據(jù)類型存儲器類型變量char data var1;bit bdata flags;unsignedchar xdata vextor;定義變量時(shí)如果省略存儲器類型,系統(tǒng)則會(huì)按編譯模式SMALL、COMPACT或LARGE所規(guī)定的默認(rèn)存儲器類型去指定變量的存儲區(qū)域。2.3.1.5C51定義特殊功能寄存器對SFR的操作,只能采用直接尋址方式。為了能直接訪問這些特殊功能寄存器,KeilC51擴(kuò)充了兩個(gè)關(guān)鍵字“sfr”、“sfr16”,可以直接對51單片機(jī)的特殊寄存器進(jìn)行定義。一、使用關(guān)鍵字sfr、sfr16定義特殊功能寄存器
sfr特殊功能寄存器名=特殊功能寄存器地址常數(shù);如:對于8051片內(nèi)I/O口,定義方法如下:sfrP1=0x90;//定義P1口,地址90Hsfr后面是一個(gè)要定義的名字,要符合標(biāo)識符的命名規(guī)則,名字最好有一定的含義等號后面必須是常數(shù),不允許有帶運(yùn)算符的表達(dá)式,而且該常數(shù)必須在特殊功能寄存器的地址范圍之內(nèi)(80H-FFH)。Sfr16特殊功能寄存器名=特殊功能寄存器地址常數(shù);如:數(shù)據(jù)指針DPTR,可以定義為:sfr16DPTR=0x82;//這里定義數(shù)據(jù)指針DPTR,地址為DPL=82H,DPH=83H用sfr16定義16位特殊功能寄存器時(shí),等號后面是它的低位地址,高位地址一定要位于物理低位地址之上。二、用sbit定義特殊功能寄存器的特殊位1)sbit位變量名=位地址sbitP1_1=0x91;這樣是把位的絕對地址賦給位變量。同sfr一樣,sbit的位地址必須位于80H~FFH之間。2)Sbit位變量名=特殊功能寄存器名^位地址sfrP3=0xB0;sbitP3_1=P3^1;//先定義一個(gè)特殊功能寄存器名,再指定位變量名所在的位置。當(dāng)可尋址位位于特殊功能寄存器中時(shí)可采用這種方法。3)sbit位變量名=字節(jié)地址^位地址 sbitP3_1=0xB0^1;
三、通過頭文件訪問SFR編譯器給出的頭文件已經(jīng)給出了常用51單片機(jī)中的SFR及其可位尋址位的定義。比如KeilC將這些頭文件按單片機(jī)的不同生產(chǎn)公司、不同型號分別存在KeilC的INC子目錄下,在程序中只需直接引用這些頭文件即可實(shí)現(xiàn)對SFR的訪問和控制?!纠?-3】頭文件引用實(shí)例。#include<AT89X51.h>//單片機(jī)為atmel公司的AT89C51main(){TL0=0xb0;//訪問定時(shí)器0,設(shè)置時(shí)間常數(shù)TH0=0x3c;TR0=1;//啟動(dòng)定時(shí)器0??}C51包含的頭文件reg51.h,reg52.h,Reg51.h定義51子系列單片機(jī)的特殊功能寄存器和部分位寄存器Reg52.h定義52子系列單片機(jī)的特殊功能寄存器和部分位寄存器在程序開始部分使用語句#include<reg51.h>即可直接使用特殊功能寄存器及其部分位單元,不需要再作定義。2.3.1.5指針一.指針的概念在C語言中,數(shù)據(jù)通常是以變量的形式進(jìn)行存放和訪問的。變量在使用時(shí)分清兩個(gè)概念:變量名和變量的值。變量名是數(shù)據(jù)的標(biāo)識符,相當(dāng)于內(nèi)存單元的地址變量的值是數(shù)據(jù)的內(nèi)容,變量的值相當(dāng)于內(nèi)存單元的內(nèi)容。對于變量有兩種訪問方式:直接訪問方式和間接訪問方式。直接訪問方式。對于變量的訪問,我們大多數(shù)時(shí)候是直接給出變量名。間接訪問方式。例如要存取變量a中的值時(shí),可以先將變量a的地址放在另一個(gè)變量b中,訪問時(shí)先找到變量b,從變量b中取出變量a的地址,然后根據(jù)這個(gè)地址從內(nèi)存單元中取出變量a的值。這就是間接訪問。在這里,從變量b中取出的不是所訪問的數(shù)據(jù),而是訪問的數(shù)據(jù)(變量a的值)的地址,這就是指針,變量b稱為指針變量。
變量的指針和指向變量的指針變量。變量的指針就是變量的地址。對于變量a,如果它所對應(yīng)的內(nèi)存單元地址為2000H,它的指針就是2000H。指針變量是指一個(gè)專門用來存放另一個(gè)變量地址的變量,它的值是指針。上面變量b中存放的是變量a的地址,變量b中的值是變量a的指針,變量b就是一個(gè)指向變量a的指針變量。二.指針變量的定義指針變量的定義與一般變量的定義類似,定義的一般形式為:數(shù)據(jù)類型說明符[存儲器類型1]*【存儲器類型2
】指針變量名;其中:“數(shù)據(jù)類型說明符”說明了該指針變量所指向的變量的類型?!按鎯ζ黝愋汀笔强蛇x項(xiàng),如果帶有此選項(xiàng),指針被定義為基于存儲器的指針。無此選項(xiàng)時(shí),被定義為一般指針。下面是幾個(gè)指針變量定義的例子:int*p1;/*定義一個(gè)指向整型變量的指針變量p1*/chardata*p3;/*定義一個(gè)指向字符變量的指針變量p3,該指針訪問的數(shù)據(jù)在片內(nèi)數(shù)據(jù)存儲器中,該指針在內(nèi)存中占一個(gè)字節(jié)*/floatxdata*p4;/*定義一個(gè)指向浮點(diǎn)型變量的指針變量p4,該指針訪問的數(shù)據(jù)在片外數(shù)據(jù)存儲器中,該指針在內(nèi)存中占兩個(gè)字節(jié)*/Float*xdatap4;/*定義一個(gè)指向浮點(diǎn)型變量的指針變量p4,該指針存放在片外數(shù)據(jù)存儲器中,該指針在內(nèi)存中占三個(gè)字節(jié)*/三.指針變量的引用指針變量是存放另一變量地址的特殊變量,指針變量只能存放地址。指針變量使用時(shí)注意兩個(gè)運(yùn)算符:&和*。&”是取地址運(yùn)算符,“*”是指針運(yùn)算符。通過“&”取地址運(yùn)算符可以把一個(gè)變量的地址送給指針變量,使指針變量指向該變量;通過“*”指針運(yùn)算符可以實(shí)現(xiàn)通過指針變量訪問它所指向的變量的值。例如:intx,*px,*py;/*變量及指針變量定義*/px=&x;/*將變量x的地址賦給指針變量px,使px指向變量x*/*px=5;/*等價(jià)于x=5*/py=px;/*將指針變量px中的地址賦給指針變量py,使指針變量py也指向x*/2.3.2C51的運(yùn)算符及表達(dá)式1賦值運(yùn)算符賦值運(yùn)算符“=”,在C51中,它的功能是將一個(gè)數(shù)據(jù)的值賦給一個(gè)變量,如x=10。一個(gè)賦值語句的格式如下:
變量=表達(dá)式;執(zhí)行時(shí)先計(jì)算出右邊表達(dá)式的值,然后賦給左邊的變量。例如:x=8+9;/*將8+9的值賦紿變量x*/x=y=5;/*將常數(shù)5同時(shí)賦給變量x和y*注意:在賦值運(yùn)算中,當(dāng)“=”兩側(cè)的類型不一致時(shí),要將數(shù)據(jù)轉(zhuǎn)換成同一數(shù)據(jù)類型,轉(zhuǎn)換的方式有兩種。1.系統(tǒng)自動(dòng)轉(zhuǎn)換編譯時(shí),將右邊表達(dá)式的值轉(zhuǎn)換成左側(cè)變量的類型,再賦給該變量。2.強(qiáng)制轉(zhuǎn)換使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符轉(zhuǎn)換:(類型名)(表達(dá)式),將表達(dá)式的數(shù)據(jù)類型轉(zhuǎn)換為前面要求的類型名?!纠?-8】類型轉(zhuǎn)換應(yīng)用。unsignedcharx,y;unsignedintz,a;x=(float)a;
y=(int)(x+y);z=x+(unsignedint)y;2算術(shù)運(yùn)算符
+加或取正值運(yùn)算符 -減或取負(fù)值運(yùn)算符*乘運(yùn)算符 /除運(yùn)算符 %取余運(yùn)算符加、減、乘運(yùn)算相對比較簡單,而對于除運(yùn)算,如相除的兩個(gè)數(shù)為浮點(diǎn)數(shù),則運(yùn)算的結(jié)果也為浮點(diǎn)數(shù),如相除的兩個(gè)數(shù)為整數(shù),則運(yùn)算的結(jié)果也為整數(shù),即為整除。如25.0/20.0結(jié)果為1.25,而25/20結(jié)果為1。對于取余運(yùn)算,則要求參加運(yùn)算的兩個(gè)數(shù)必須為整數(shù),運(yùn)算結(jié)果為它們的余數(shù)。例如:x=5%3,結(jié)果x的值為2。3關(guān)系運(yùn)算符C51中有6種關(guān)系運(yùn)算符: >大于 <小于 >=大于等于 <=小于等于 ==等于 !=不等于關(guān)系表達(dá)式通常用來作為判別條件構(gòu)造分支或循環(huán)程序。關(guān)系表達(dá)式的一般形式如下:表達(dá)式1關(guān)系運(yùn)算符表達(dá)式2關(guān)系運(yùn)算的結(jié)果為邏輯量,成立為真(1),不成立為假(0)。其結(jié)果可以作為一個(gè)邏輯量參與邏輯運(yùn)算。例如:5>3,結(jié)果為真(1),而10==100,結(jié)果為假(0)。
4邏輯運(yùn)算符C51有3種邏輯運(yùn)算符:
||邏輯或 &&邏輯與 !邏輯非邏輯運(yùn)算符用于求條件式的邏輯值,用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式。邏輯與,格式:條件式1&&條件式2當(dāng)條件式1與條件式2都為真時(shí)結(jié)果為真(非0),否則為假(0)邏輯或,格式:條件式1||條件式2當(dāng)條件式1與條件式2都為假時(shí)結(jié)果為假(0),否則為真(非0)邏輯非,格式:!條件式當(dāng)條件式原來為真(非0),邏輯非后結(jié)果為假(0)。當(dāng)條件式原來為假(0),邏輯非后結(jié)果為真(非0)。例如:若a=8,b=3,c=0,則!a為假,a&&b為真,b&&c為假。5位運(yùn)算符位運(yùn)算是按位對變量進(jìn)行運(yùn)算,但并不改變參與運(yùn)算的變量的值。C51中位運(yùn)算符只能對整數(shù)進(jìn)行操作,不能對浮點(diǎn)數(shù)進(jìn)行操作。C51中的位運(yùn)算符有:&按位與|按位或^按位異或~按位取反<<左移>>右移【例】設(shè)a=0x45=01000101B,b=0x3b=00111011B,則a&b、a|b、a^b、~a、a<<2、b>>2分別為多少?a&b=00000001b=0x01。a|b=01111111B=0x7f。a^b=01111110B=0x7e。~a=10111010B=0xba。a<<2=00010100B=0x14。b>>2=00001110B=0x0e。6復(fù)合賦值運(yùn)算符C51中支持的復(fù)合賦值運(yùn)算符:+=加法賦值-=減法賦值*=乘法賦值/=除法賦值%=取模賦值&=邏輯與賦值|=邏輯或賦值^=邏輯異或賦值~=邏輯非賦值>>=右移位賦值<<=左移位賦值復(fù)合賦值運(yùn)算的一般格式如下:變量復(fù)合運(yùn)算賦值符表達(dá)式它的處理過程:先把變量與后面的表達(dá)式進(jìn)行某種運(yùn)算,然后將運(yùn)算的結(jié)果賦給前面的變量。7逗號運(yùn)算符在C51語言中,逗號“,”是一個(gè)特殊的運(yùn)算符,可以用它將兩個(gè)或兩個(gè)以上的表達(dá)式連接起來,稱為逗號表達(dá)式。逗號表達(dá)式的一般格式為:
表達(dá)式1,表達(dá)式2,……,表達(dá)式n程序執(zhí)行時(shí)對逗號表達(dá)式的處理:按從左至右的順序依次計(jì)算出各個(gè)表達(dá)式的值,而整個(gè)逗號表達(dá)式的值是最右邊的表達(dá)式(表達(dá)式n)的值。例如:x=(a=3,6*3)結(jié)果x的值為18。8條件運(yùn)算符條件運(yùn)算符“?:”是C51語言中唯一的一個(gè)三目運(yùn)算符,它要求有三個(gè)運(yùn)算對象,用它可以將三個(gè)表達(dá)式連接在一起構(gòu)成一個(gè)條件表達(dá)式。條件表達(dá)式的一般格式為:
邏輯表達(dá)式?表達(dá)式1:表達(dá)式2功能是先計(jì)算邏輯表達(dá)式的值,當(dāng)邏輯表達(dá)式的值為真(非0值)時(shí),將計(jì)算的表達(dá)式1的值作為整個(gè)條件表達(dá)式的值;當(dāng)邏輯表達(dá)式的值為假(0值)時(shí),將計(jì)算的表達(dá)式2的值作為整個(gè)條件表達(dá)式的值。例如:條件表達(dá)式max=(a>b)?a:b的執(zhí)行結(jié)果是將a和b中較大的數(shù)賦值給變量max。9指針與地址運(yùn)算符
*指針運(yùn)算符 &取地址運(yùn)算符指針運(yùn)算符“*”放在指針變量前面,通過它實(shí)現(xiàn)訪問以指針變量的內(nèi)容為地址所指向的存儲單元。例如:指針變量p中的地址為2000H,則*p所訪問的是地址為2000H的存儲單元,x=*p,實(shí)現(xiàn)把地址為2000H的存儲單元的內(nèi)容送給變量x。取地址運(yùn)算符“&”放在變量的前面,通過它取得變量的地址,變量的地址通常送給指針變量。例如:設(shè)變量x的內(nèi)容為12H,地址為2000H,則&x的值為2000H,如有一指針變量p,則通常用p=&x,實(shí)現(xiàn)將x變量的地址送給指針變量p,指針變量p指向變量x,以后可以通過*p訪問變量x。2.3.3.2選擇控制語句一、if語句if語句是C51中的一個(gè)基本條件選擇語句,它通常有三種格式:(1)if(表達(dá)式){語句;}(2)if(表達(dá)式){語句1;}else{語句2;}(3)if(表達(dá)式1){語句1;}elseif(表達(dá)式2){語句2;}elseif(表達(dá)式3){語句3;}……elseif(表達(dá)式n-1){語句n-1;}else{語句n}二、switch/case語句if語句通過嵌套可以實(shí)現(xiàn)多分支結(jié)構(gòu),但結(jié)構(gòu)復(fù)雜。switch是C51中提供的專門處理多分支結(jié)構(gòu)的多分支選擇語句。它的格式如下:switch(表達(dá)式){case常量表達(dá)式1:{語句1;}break;case常量表達(dá)式2:{語句2;}break;……case常量表達(dá)式n:{語句n;}break;default:{語句n+1;}}【例2-12】STC89C51單片機(jī)的P1.0和P1.1引腳接有兩只按鍵,其4種邏輯組合分別點(diǎn)亮由P2.0~P2.3控制的4只LED(高電平點(diǎn)亮),試編程實(shí)現(xiàn)此功能。解:#include<at89x51.h>voidmain(){ dataunsignedchara; do { a=P1; a=a&0x03;//,讀低2位 P2=P2&0xf0; switch(a) { case0:P2=P2|0x01;break; case1:P2=P2|0x02;break; case2:P2=P2|0x04;break; case3:P2=P2|0x08; } }while(1);}2.3.3.3循環(huán)語句一、基于if和goto構(gòu)成的循環(huán)采用if和goto可以構(gòu)成“當(dāng)型”循環(huán)程序,其格式如下:loop:if(表達(dá)式){語句;gotoloop;}采用if和goto也可以構(gòu)成“直到型”循環(huán)程序,其格式如下:loop:{語句;if(表達(dá)式)gotoloop;}goto語句為無條件轉(zhuǎn)向語句,它的一般形式是:goto語句標(biāo)號;二、while語句while語句在C51中用于實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu),它的格式如下:while(表達(dá)式){語句;}/*循環(huán)體*/當(dāng)表達(dá)式為非0(真)時(shí),就重復(fù)執(zhí)行循環(huán)體內(nèi)的語句;當(dāng)表達(dá)式為0(假),則中止while循環(huán),程序?qū)?zhí)行循環(huán)結(jié)構(gòu)之外的下一條語句。三、基于do-while語句構(gòu)成的循環(huán)do-while語句只能用來實(shí)現(xiàn)“直到型”循環(huán),其一般格式是:do{語句;//可以是復(fù)合語句}while(表達(dá)式);do-while語句的特點(diǎn)是先執(zhí)行內(nèi)嵌的語句;再計(jì)算表達(dá)式,如果表達(dá)式的值為非0,則繼續(xù)執(zhí)行內(nèi)嵌的語句,直到表達(dá)式的值為0時(shí)結(jié)束循環(huán)。四、基于for語句構(gòu)成的循環(huán)for語句的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句;}它的執(zhí)行過程是:首先求解初始化表達(dá)式1;其次求解表達(dá)式2,判斷是否滿足循環(huán)條件,若其值非0,則執(zhí)行內(nèi)嵌語句;否則退出循環(huán);最后求解尺度增量表達(dá)式3,并回到第2步。在for語句中,可以沒有表達(dá)式1、表達(dá)式2或表達(dá)式3,若三個(gè)表達(dá)式都沒有,則相當(dāng)于一個(gè)死循環(huán)。如果其后緊跟一個(gè)“;”,則為空循環(huán),常用于延時(shí);1.break語句使用break語句可以從循環(huán)體中跳出循環(huán),提前結(jié)束循環(huán)而接著執(zhí)行循環(huán)結(jié)構(gòu)下面的語句。它不能用在除了循環(huán)語句和switch語句之外的任何其它語句中【例】下面一段程序用于計(jì)算圓的面積,當(dāng)計(jì)算到面積大于100時(shí),由break語句跳出循環(huán)。for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;}五、break和continue語句continue語句用在循環(huán)結(jié)構(gòu)中,用于結(jié)束本次循環(huán),跳過循環(huán)體中continue下面尚未執(zhí)行的語句,直接進(jìn)行下一次是否執(zhí)行循環(huán)的判定?!纠枯敵?00~200間不能被3整除的數(shù)。for(i=100;i<=200;i++){if(i%3==0)continue;printf(“%d”;i);}
2.continue語句return語句一般放在函數(shù)的最后位置,用于終止函數(shù)的執(zhí)行,并控制程序返回調(diào)用該函數(shù)時(shí)所處的位置。返回時(shí)還可以通過return語句帶回返回值。return語句格式有兩種:(1)return;(2)return(表達(dá)式);
六、return語句2.3.4函數(shù)2.3.4.1函數(shù)的分類與定義一、函數(shù)的分類C語言函數(shù)分為主函數(shù)main()和普通函數(shù)兩種,而對于普通函數(shù),又可以分為標(biāo)準(zhǔn)庫函數(shù)和用戶自定義函數(shù)。1)標(biāo)準(zhǔn)庫函數(shù)標(biāo)準(zhǔn)庫函數(shù)是由C編譯系統(tǒng)提供的,在C編譯系統(tǒng)中將一些獨(dú)立的功能模塊編寫成公用函數(shù),并將它們集中存放在系統(tǒng)的函數(shù)庫中,供程序設(shè)計(jì)時(shí)使用,稱之為標(biāo)準(zhǔn)庫函數(shù)。①字符串操作函數(shù)位于“string.h”中。包括拷貝、比較、移動(dòng)等函數(shù)如memcpy、memcmp、memmove、memset,這些函數(shù)對緩沖區(qū)進(jìn)行處理很方便。②流函數(shù)輸入輸出,位于“stdio.h”中。流函數(shù)缺省為8051串口。2)用戶自定義函數(shù)用戶自定義函數(shù)是用戶根據(jù)自己的需要而編寫的函數(shù)。從函數(shù)定義的形式上可以將其劃分無參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)。二、函數(shù)的定義函數(shù)定義的完整形式如下:返回?cái)?shù)據(jù)類型函數(shù)名(形式參數(shù)列表)[reentrant][interruptn][usingm]
{局部變量定義;函數(shù)體;}1)函數(shù)返回值與數(shù)據(jù)類型如果返回?cái)?shù)據(jù),進(jìn)行說明;如果不返回,一般用void說明,也可以不說明。函數(shù)返回值通過returnx返回,返回值是通過函數(shù)名帶回的,一個(gè)函數(shù)只能有一個(gè)返回值。2)reentrant修飾符這個(gè)修飾符用于把函數(shù)定義為可重入函數(shù)。所謂可重入函數(shù)就是允許被遞歸調(diào)用的函數(shù)。函數(shù)的遞歸調(diào)用是指當(dāng)一個(gè)函數(shù)正被調(diào)用尚未返回時(shí),又直接或間接調(diào)用函數(shù)本身。3)interruptm修飾符在C51程序設(shè)計(jì)中,當(dāng)函數(shù)定義時(shí)用了interruptm修飾符,系統(tǒng)編譯時(shí)把對應(yīng)函數(shù)轉(zhuǎn)化為中斷函數(shù),按MCS-51系統(tǒng)中斷的處理方式自動(dòng)把它安排在程序存儲器中的相應(yīng)位置。在該修飾符中,m的取值為0~31,對應(yīng)的中斷情況如下:0——外部中斷01——定時(shí)/計(jì)數(shù)器T02——外部中斷13——定時(shí)/計(jì)數(shù)器T14——串行口中斷5——定時(shí)/計(jì)數(shù)器T2其它值預(yù)留。4)usingn修飾符修飾符usingn用于指定本函數(shù)內(nèi)部使用的工作寄存器組,其中n的取值為0~3,表示寄存器組號。對于usingn修飾符的使用,注意以下幾點(diǎn):(1)加入usingn后,C51在編譯時(shí)自動(dòng)的在函數(shù)的開始處和結(jié)束處加入以下指令。{PUSHPSW;標(biāo)志寄存器入棧MOVPSW,#與寄存器組號相關(guān)的常量……POPPSW;標(biāo)志寄存器出棧}(2)usingn修飾符不能用于有返回值的函數(shù),因?yàn)镃51函數(shù)的返回值是放在寄存器中的。如寄存器組改變了,返回值就會(huì)出錯(cuò)。3.5絕對地址的訪問一.使用C51運(yùn)行庫中預(yù)定義宏C51編譯器提供了一組宏定義來對51系列單片機(jī)的code、data、pdata和xdata空間進(jìn)行絕對尋址。這些函數(shù)原型放在absacc.h文件中。使用時(shí)須用預(yù)處理命令把該頭文件包含到文件中,形式為:#include<absacc.h>CBYTE以字節(jié)形式對code區(qū)尋址,DBYTE以字節(jié)形式對data區(qū)尋址,PBYTE以字節(jié)形式對pdata區(qū)尋址,XBYTE以字節(jié)形式對xdata區(qū)尋址,CWORD以字形式對code區(qū)尋址,DWORD以字形式對data區(qū)尋址,PWORD以字形式對pdata區(qū)尋址,XWORD以字形式對xdata區(qū)尋址。
宏名[地址]地址為存儲單元的絕對地址,一般用十六進(jìn)制形式表示?!纠拷^對地址對存儲單元的訪問#include<absacc.h>/*將絕對地址頭文件包含在文件中*/#include<reg52.h>/*將寄
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園區(qū)角設(shè)計(jì)教研實(shí)施框架
- 偏癱并發(fā)癥肩痛
- 譫妄的評估和護(hù)理
- 嗜酸細(xì)胞性肺炎臨床診療解析
- 心理健康為人之道
- 幼師職業(yè)護(hù)眼健康管理
- 火炬?zhèn)鬟f健康教案大班
- 2025年殯葬服務(wù)項(xiàng)目規(guī)劃申請報(bào)告
- 【臺州】2025年浙江臺州市交通工程試驗(yàn)檢測中心招聘22人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 整活班會(huì)課件
- 倉儲式物流產(chǎn)業(yè)園建設(shè)項(xiàng)目可行性研究報(bào)告
- 國開電大《親子關(guān)系與親子溝通》形考+大作業(yè)
- 勞務(wù)派遣服務(wù)投標(biāo)文件(技術(shù)方案)
- 2024年變電設(shè)備檢修工(高級)技能鑒定理論考試題庫-上(選擇題)
- 酒店前臺案例分析
- 消防應(yīng)急通信培訓(xùn)
- 消防應(yīng)急通信保障
- 中醫(yī)診所負(fù)責(zé)人合作協(xié)議書范文
- 四年級數(shù)學(xué)下冊 典型例題系列之第一單元:平移、旋轉(zhuǎn)和軸對稱的綜合作圖專項(xiàng)練習(xí) 帶解析(蘇教版)
- 科技助力鴨養(yǎng)殖提效
- 蝶閥試水方案
評論
0/150
提交評論