車用單片機原理 課件 第三章 C51程序設計_第1頁
車用單片機原理 課件 第三章 C51程序設計_第2頁
車用單片機原理 課件 第三章 C51程序設計_第3頁
車用單片機原理 課件 第三章 C51程序設計_第4頁
車用單片機原理 課件 第三章 C51程序設計_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

車用單片機原理(含實驗與實訓)12C51語言基礎C51的語言的函數(shù)單擊此處添加標題單擊此處添加標題01C51語言基礎第一節(jié)C51語言基礎一、數(shù)據(jù)類型數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型,C51編譯器所支持的數(shù)據(jù)類型與標準C語言中所使用的數(shù)據(jù)類型基本相同,見表3-1,其中bit,sbit,sfr以及sfr16不是標準C中所具有的,是C51根據(jù)51單片機的結構特點,增加的特殊數(shù)據(jù)類型。第一節(jié)C51語言基礎第一節(jié)C51語言基礎(1)bit位類型。利用bit可以定義一個在RAM位尋址區(qū)的位變量,但不能定義位指針和位數(shù)組,它的值域是0或者1。(2)特殊功能寄存器sfr。8051單片機的特殊功能寄存器分布在片內(nèi)數(shù)據(jù)存儲區(qū)的地址單元80H~FFH之間,“sfr”數(shù)據(jù)類型占用一個內(nèi)存單元。利用它可訪問8051單片機內(nèi)部的所有特殊功能寄存器。例如:sfrP1=0x90這一語句定義了P1端口在片內(nèi)的寄存器,在程序后續(xù)的語句中可以用“P1=0xff”,使P1的所有引腳輸出為高電平的語句來操作特殊功能寄存器。第一節(jié)C51語言基礎(3)特殊功能寄存器sfr16。“sfr16”數(shù)據(jù)類型占用兩個內(nèi)存單元,用于操作占兩個字節(jié)的特殊功能寄存器。例如:“sfr16DPTR=0x82”語句定義了片內(nèi)16位數(shù)據(jù)指針寄存器DPTR,其低8位字節(jié)地址為82H,高8位字節(jié)地址為83H。在程序的后續(xù)語句中就可對DPTR進行操作。(4)特殊功能位sbit。

sbit是指AT89S51片內(nèi)特殊功能寄存器的可尋址位。例如:

sfr PSW=0xd0; //定義PSW寄存器地址為0xd0 sbit OV=PSW^2; //定義OV位為PSW.2符號“^”前是特殊功能寄存器名字,“^”后的數(shù)字定義特殊功能寄存器可尋址位在寄存器中的位置,取值必須是0~7。第一節(jié)C51語言基礎二、

數(shù)據(jù)存儲類型與存儲模式

(一)存儲類型

在討論C51數(shù)據(jù)類型時,須同時提及它的存儲類型,以及它與8051單片機存儲器結構的關系,因為C51定義的任何數(shù)據(jù)類型必須以一定的方式,定位在8051單片機的某一存儲區(qū)中,否則沒有任何實際意義。

在51單片機中,數(shù)據(jù)存儲區(qū)域較多,有片內(nèi)程序存儲器,片外程序存儲器,片外數(shù)據(jù)存儲器、片內(nèi)數(shù)據(jù)存儲器、片內(nèi)數(shù)據(jù)存儲器又分為SFR區(qū)、位尋址區(qū)、字節(jié)尋址區(qū)、工作寄存器區(qū)等,為了能夠將數(shù)據(jù)存儲在單片機實際的區(qū)域中,C51編譯器將變量、常量定義成不同存儲類型,與MCS-51的實際存儲空間的進行對應,見表3-2。第一節(jié)C51語言基礎表3-2

C51的存儲類型與存儲空間對應關系存儲類型存儲空間位置字節(jié)地址data片內(nèi)RAM直接尋址區(qū),片內(nèi)低128B00H~7FHbdata片內(nèi)可位尋址區(qū)20H~2FHidata片內(nèi)RAM的256B存儲區(qū),要間接尋址00H~FFHpdata片外數(shù)據(jù)存儲區(qū)的256B00H~FFHxdata片外RAM64KB空間0000H~FFFFHcode程序ROM0000H~FFFFH第一節(jié)C51語言基礎

訪問片外數(shù)據(jù)存儲區(qū)比訪問片內(nèi)數(shù)據(jù)存儲區(qū)慢,因為訪問片外數(shù)據(jù)存儲區(qū)要通過對數(shù)據(jù)指針加載地址來間接尋址訪問。C51提供兩種不同的數(shù)據(jù)存儲類型xdata和pdata來訪問片外數(shù)據(jù)存儲區(qū)

程序存儲區(qū)只能讀不能寫,可能在8051單片機內(nèi)部或者外部,或外部和內(nèi)部都有,由8051單片機硬件決定,C51提供了code存儲類型來訪問程序存儲區(qū)

單片機訪問片內(nèi)RAM比訪問片外RAM相對快一些,所以應盡量把頻繁使用的變量置于片內(nèi)RAM。即采用data、bdata或idata存儲類型,而將容量較大或使用不太頻繁的那些變量置于片外RAM,即采用pdata或xdata存儲類型。常量只能采用code存儲類型。第一節(jié)C51語言基礎(二)存儲模式

如果在變量定義時略去存儲類型標識符,編譯器會自動默認存儲類型。

進一步由SMALL、COMPACT和LARGE存儲模式指令限制。例如,若聲明charvar1,則在使用SMALL存儲模式下,var1被定位在data存儲區(qū),在使用COMPACT模式下,var1被定位在idata存儲區(qū);在LARGE模式下,var1被定位在xdata存儲區(qū)中。第一節(jié)C51語言基礎SMALL模式。該模式下,所有變量都默認位于8051單片機內(nèi)部的數(shù)據(jù)存儲器,與使用data指定存儲器類型的方式一樣。在此模式下,變量訪問的效率高,但是所有數(shù)據(jù)對象和堆棧必須使用內(nèi)部RAM。COMPACT模式。本模式下所有變量都默認在外部數(shù)據(jù)存儲器的1頁(256字節(jié))內(nèi),這與使用pdata指定存儲器類型是一樣的。該類型適用于變量不超過256字節(jié)的情況,此限制是由尋址方式?jīng)Q定的,相當于使用數(shù)據(jù)指針@Ri尋址。與SMALL模式相比,該存儲模式的效率比較低,對變量訪問的速度也慢一些,但比LARGE模式快。LARGE模式。本模式下所有變量都默認位于外部數(shù)據(jù)存儲器,相當于用@DPTR尋址。通過數(shù)據(jù)指針訪問外部數(shù)據(jù)存儲器的效率較低,特別是當變量為2字節(jié)或更多字節(jié)時,該模式要比SMALL和COMPACT產(chǎn)生更多的代碼。

在固定的存儲器地址上進行變量傳遞,是C51的標準特征之一。第一節(jié)C51語言基礎表3-3存儲模式及其說明存儲模式說明SMALL變量定義在片內(nèi)數(shù)據(jù)存儲器中,與data定義的存儲空間一一致,訪問速度最快。COMPACT變量定義在分頁尋址的片外數(shù)據(jù)存儲器中(默認存儲類型是pdata),每頁片外數(shù)據(jù)存儲器的長度為256字節(jié),通過寄存器R0和R1(MOVX@Ri)進行間接尋址訪問,堆棧位于片內(nèi)數(shù)據(jù)存儲器中。LARGE變量定義在片外數(shù)據(jù)存儲器中(最大64KB,默認存儲類型是xdata),使用數(shù)據(jù)指針DPTR來間接訪問變量(MOVX@DPTR)。第一節(jié)C51語言基礎三、C51的基本運算6

C語言表達式是由操作數(shù)和運算符組成的序列,運算符是表示特定的算術或邏輯操作的符號,也稱為操作符。根據(jù)所用運算符的不同,表達式也有很多種類。(1)算術運算符運算符號功能舉例(設x=10,y=3)運算符號功能舉例(設x=10,y=3)+加法z=x+y;//z=13%余數(shù)運算z=x%y;//z=1-減法z=x-y;//z=7++遞增(增1)

*乘法z=x*y;//z=30--遞減(減1)

/除法(或求模運算)z=x/y;//z=3

第一節(jié)C51語言基礎6運算符號說明舉例(設x初值為4)x++先用x的值,再讓x加1y=x++;//y為4,x為5++x先讓x加1,再用x的值y=++x;//y為5,x為5x--先用x的值,再讓x減1y=x--;//y為4,x為3--x先讓x減1,再用x的值y=--x;//y為3,x為3(3)關系運算符運算符號說明舉例(設a=2,b=3)運算符號說明舉例(設a=2,b=3)>

大于a>b;//返回值為0<=小于等于a<=b;//返回值為1<

小于a<b;//返回值為1==等于a==b;//返回值為0>=大于等于a>=b;//返回值為0!=不等于a!=b;//返回值為1(2)自增和自減運算第一節(jié)C51語言基礎67(4)邏輯運算符運算符號說明舉例(設a=2,b=3)&&邏輯與a&&b;//返回值為1||邏輯或a||b;//返回值為1!邏輯非!a;//返回值為0邏輯運算符表邏輯運算符的邏輯真值表ABA&&BA||B!A00001010111001011110第一節(jié)C51語言基礎(5)位運算符運算符號說明舉例(a=0x38、b=0x25、x=0x0f、y=0x3a、z=0x0f)&邏輯與a&b=0x380&0x25=0x20|按位邏輯或a|b=00111000|00100101=00111101=0x3d^按位邏輯異或a^b;a|b=0x1d(00011101)~按位按位取反~x=0xf0<<

按位左移(高位丟棄,低位補0)若y<<2則y=0xe8>>

按位右移(高位補0,低位丟棄)若z>>3則w=0x01第一節(jié)C51語言基礎6(6)算術運算符的優(yōu)先級算術運算符的優(yōu)先級由高到低依次為自增自減(++、--)和取負(-)、乘法除法(*、/)和取模(%)、加和減(+、-)。對同級運算符一般按從左到右的順序進行計算,但是,由于括號優(yōu)先級最高,所以括號會改變計算順序。2.關系運算符和邏輯運算符的優(yōu)先級關系運算符和邏輯運算符的相對優(yōu)先級最高的是“!”,其次是“>”、“<”、“>=”和“<=”,是“==”和“!=”,后面是“&”、“^”、“〡”、“&&”,最后是“||”。關系和邏輯運算符的優(yōu)先級比算術運算符低,像表達式10>1+12和表達式10>(1+12)計算的結果是一樣的。在關系或邏輯表達式中可以使用括號來修改計算原來的優(yōu)先級順序。第一節(jié)C51語言基礎四、絕對地址的訪問6

(1)絕對宏:

在程序中,用“#include

<absacc.h>

”即可使用其中聲明的宏來訪問絕對地址。包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE和DWORD等,如:xval=XBYTE[0x0002];XWORD[0x0002]=0x2000;#defineDAC0832XBYTE[0xffff];DAC0832=0x80;第一節(jié)C51語言基礎

(2)_at_關鍵字:

該關鍵字用法較簡單,直接在數(shù)據(jù)聲明后加上_at_地址常數(shù)即可。但需要注意以下問題:

(1)絕對變量不能被初始化。

(2)bit型數(shù)據(jù)及變量不能用_at_指定。例如:structdat{structdatidata*next;charcode*test;};idatastructdatnum_at_0x42;xdataintval_at_0x8000;第一節(jié)C51語言基礎五、C51控制語句與程序設計(一)C51的基本結構

1.順序結構順序結構是指程序按照自上而下的順序執(zhí)行各個代碼及程序模塊,程序只有一條路可走,沒有語句的跳轉。順序結構最常用,也比較簡單和理解。

2.選擇結構—if、switch語句選擇結構一般用于有選擇地執(zhí)行操作,通過判斷表達式條件是否成立,來有選擇性執(zhí)行相應程序。選擇結構的程序一般由if條件語句、switch開關語句等來構成。分支控制語句有:if語句和switch語句。第一節(jié)C51語言基礎(1)if語句if語句是用來判定所給定的條件是否成立,并根據(jù)判定條件的結果,決定執(zhí)行哪種操作。C51提供3種形式的if語句:1)形式1:

if(表達式){語句}形式1的流程圖如圖3-1所示,先判斷括號中所給定表達式是否成立,如果表達式成立執(zhí)行大括號中的語句,否則跳過大括號中的語句,直接執(zhí)行后面的語句。圖3-1單分支選擇結構圖第一節(jié)C51語言基礎2)形式2:

if(表達式){語句1;}else{語句2;}形式2的流程圖如圖3-2所示,先判斷括號中的表達式是否成立,如果括號中的表達式成立就執(zhí)行第一個大括號中的語句1,否則執(zhí)行第二個大括號中的語句2,相當于雙分支選擇結構。

圖3-2雙分支選擇結構圖第一節(jié)C51語言基礎3)形式3:

if(表達式1){語句1;}elseif(表達式2){語句2;}elseif(表達式3){語句3;}...elseif(表達式m){語句m;}else{語句n;}形式3的流程圖如圖3-3所示,本形式相當于串行多分支選擇結構。先判斷表達式1是否成立,如果表達式1成立就則執(zhí)行語句1,如果表達式條件1不成立,則判斷表達式2是否成立,如果表達式2成立,就執(zhí)行語句2,否則判斷表達式3是否成立,直至判斷到表達式m是否成立,如果都沒有表達式成立,執(zhí)行最后的語句n。在if語句中含有一個或多個if語句,稱為if語句的嵌套。if總是與它后面最近的一個else語句相對應,不會與相隔if的else對應。圖3-3多分支選擇結構圖第一節(jié)C51語言基礎圖3-3多分支選擇結構圖第一節(jié)C51語言基礎(2)switch/case語句。根據(jù)表達式的值決定要執(zhí)行的語句組,常用于實現(xiàn)多選一功能。switch(表達式){

case常量表達式1:{語句組1};break;case常量表達式2:{語句組2};break;…case常量表達式m:{語句組m};break;default:

{語句組n};}第一節(jié)C51語言基礎switch語句的說明如下:1)switch后面括號內(nèi)的表達式,可以是整型或字符型表達式。2)當switch括號內(nèi)表達式的值與某一“case”后面常量表達式的值相等時,就執(zhí)行該“case”后面的語句,然后遇到break語句就會退出switch選擇結構,若表達式的值與所有case后的常量表達式的值都不相同,就執(zhí)行default后面的語句,然后退出switch選擇結構。3)每一個case后面常量表達式的值必須互不相同。4)case語句和default語句的出現(xiàn)次序不會影響程序執(zhí)行的結果。5)當case語句后面沒有break語句時,即使執(zhí)行了相應的case語句,也不會退出當前switch結構,會繼續(xù)依次執(zhí)行后面的語句,直到遇到break或結束。6)當所有case后的常量表達式都與switch中的表達式不等時,就執(zhí)行default語句。第一節(jié)C51語言基礎在程序執(zhí)行過程中,很多時候需要循環(huán)結構來實現(xiàn)某段程序的重復執(zhí)行,在C51中有3種語句可以實現(xiàn)循環(huán),分別是:while語句、do-while語句和for語句。

(1)while語句while語句的一般形式如下:while(表達式){循環(huán)體語句;}while語句的結構流程圖如圖3-4所示。3.循環(huán)結構第一節(jié)C51語言基礎圖3-4

while語句循環(huán)結構圖while語句特點是:先判斷條件,再執(zhí)行循環(huán)體語句,在循環(huán)體語句中對條件進行更新,然后再判斷條件是否成立,如條件成立,則繼續(xù)執(zhí)行循環(huán)體,如條件不成立,則退出循環(huán),如條件第一次就不成立,則循環(huán)體一次也不執(zhí)行。第一節(jié)C51語言基礎(2)do-while語句do-while語句的格式如下:do{循環(huán)體語句;}while(表達式)do-while的結構流程圖如圖3-5所示。先執(zhí)行一次大括號內(nèi)的循環(huán)體語句,再判斷表達式是否成立,當表達式成立時,再重復執(zhí)行大括號內(nèi)的循環(huán)體語句,直到表達式不成立時,直接跳出dowhile循環(huán)體執(zhí)行后面的語句。

第一節(jié)C51語言基礎圖3-5do-while循環(huán)結構圖while語句首先判斷表達式是否成立,再決定是否執(zhí)行循環(huán)體語句,而do-while語句要先執(zhí)行一次循環(huán)體語句,再去判斷表達式是否成立,因此無論表達式是否成立,在do-while語句中循環(huán)體至少已經(jīng)被執(zhí)行過一次。第一節(jié)C51語言基礎

(3)for語句for語句經(jīng)常使用在循環(huán)次數(shù)已知的循環(huán)體中,也可用于循環(huán)次數(shù)不確定而只給出循環(huán)條件情況的循環(huán)體中。for語句的格式如下:for(表達式1;表達式2;表達式3){循環(huán)體語句;}在for語句中,for括號中的表達式1為初值賦值語句,用于把初值賦值給循環(huán)變量;表達式2為條件表達式,一般是一個邏輯或者關系表達式,用來判斷循環(huán)變量的真假;表達式3為循環(huán)變量更新表達式,用于更新循環(huán)變量。第一節(jié)C51語言基礎6for語句后面帶三個表達式,它的執(zhí)行過程如下:第一步:先執(zhí)行表達式1的賦值。第二步:判斷表達式2是否成立,如果表達式2成立,則執(zhí)行一次循環(huán)體中的語句,然后再執(zhí)行下一步(第三步)的操作,如果表達式2不成立,直接執(zhí)行第四步。第三步:執(zhí)行求解表達式3,對循環(huán)變量的值進行更新,然后跳轉到第二步繼續(xù)執(zhí)行。第四步:退出for循環(huán),執(zhí)行循體結構后面的語句,第一節(jié)C51語言基礎圖3-6for語句程序流程圖for語句中3個表達式都是可選項,可以任意省略,但“;”不能省。省1是不對循環(huán)變量賦初值;省2是不判斷循環(huán)條件的真假;省3是不對循環(huán)變量操作。for(;;)表示無限循環(huán),相當于while(1)或者do-while(1)。第一節(jié)C51語言基礎

4.break語句、continue語句、return語句在循環(huán)語句執(zhí)行過程中,可以用break和continue語句用來跳出循環(huán)結構,但是二者又有所不同,下面分別介紹。(1)break語句break語句只能在switch開關語句或者循環(huán)語句中使用,一般用來跳出循環(huán)體或者switch語句,直接執(zhí)行循環(huán)結構后面或者switch語句之后的語句。(2)continue語句continue語句用于結束本次循環(huán),不再執(zhí)行當前本輪循環(huán),即continue后面的語句不再執(zhí)行,直接從下一輪循環(huán)入口開始執(zhí)行,直到判斷條件不滿足為止。(3)return返回語句return返回語句有兩種格式:1)return。2)return(表達式)。如果return語句后面帶有表達式,則要計算表達式的值,并將表達式的值作為函數(shù)的返回值;如果return語句不帶表達式,則函數(shù)不返回任何值。第一節(jié)C51語言基礎六、數(shù)組簡介

數(shù)組是同類數(shù)據(jù)的一個有序結合,用數(shù)組名來標識。整型變量的有序結合稱為整型數(shù)組,字符型變量的有序結合稱為字符型數(shù)組。數(shù)組中的數(shù)據(jù),稱為數(shù)組元素。

數(shù)組中各元素的順序用下標表示,下標為n的元素可以表示為數(shù)組名[n]。改變[]中的下標就可以訪問數(shù)組中的所有的元素。

數(shù)組有一維、二維、三維和多維數(shù)組之分。C51語言中常用的一維、二維數(shù)組和字符數(shù)組。第一節(jié)C51語言基礎(1)一維數(shù)組具有一個下標的數(shù)組元素組成的數(shù)組成為一維數(shù)組,一維數(shù)組形式如下:類型說明符數(shù)組名[元素個數(shù)];其中,數(shù)組名是一個標識符,元素個數(shù)是一個常量表達式,不能是含有變量的表達式:例如:intarray1[8]第一節(jié)C51語言基礎定義名為array1的數(shù)組,包含8個整型元素,在定義數(shù)組時,可對數(shù)組進行整體初始化,若定義后對數(shù)組賦值,則只能對每個元素分別賦值。例如:inta[3]={2,4,6};

/*給全部元素賦值,a[0]=2,a[1]=4,a[2]=6*/intb[4]={5,4,3,2};/*給全部元素賦值,b[0]=5,b[1]=4,b[2]=3,b[3]=2*/第一節(jié)C51語言基礎(2)二維數(shù)組或多維數(shù)組具有兩個或兩個以上下標的數(shù)組,稱為二維數(shù)組或多維數(shù)組。定義二維數(shù)組的一般形式如下:類型說明符數(shù)組名[行數(shù)][列數(shù)];其中,數(shù)組名是一個標識符,行數(shù)和列數(shù)都是常量表達式。例如:floatarray2[4][3]/*array2數(shù)組,4行3列共12個浮點型元素*/第一節(jié)C51語言基礎6二維數(shù)組可以在定義時進行整體初始化,也可在定義后單個地進行賦值。例如:inta[3][4]={1,2,3,4},{5,6,7,8},{9,10,11,12};/*a數(shù)組全部初始化*/intb[3][4]={1,3,5,7},{2,4,6,8},{};/*b數(shù)組部分初始化,未初始化的元素為0*/第一節(jié)C51語言基礎(3)字符數(shù)組 若一個數(shù)組的元素是字符型的,則該數(shù)組就是一個字符數(shù)組。例如:定義了一個字符型數(shù)組a[],有10個數(shù)組元素,并且將9個字符(其中包括一個字符串結束標志‘\0’

)分別賦給了a[0]~a[8],剩余的a[9]被系統(tǒng)自動賦予空格字符。chara[10]={‘B’,‘E’,‘I’,‘’,‘J’,‘I’,‘N’,‘G’,‘\0’};/*字符串數(shù)組*/第一節(jié)C51語言基礎(4)字符串數(shù)組

字符串數(shù)組有別于字符數(shù)組。字符數(shù)組是一個一維數(shù)組,而字符串數(shù)組是以字符串作為數(shù)組元素的數(shù)組,可以將其看成一個二維字符數(shù)組,字符串數(shù)組中各字符串在結束時,自動添加一個結束符'\0',下面定義一個簡單的字符串數(shù)組。charname[5][20]={"Li","Wang","Zhao","Chen","Chao"}第一節(jié)C51語言基礎用雙引號括起來的一串字符,成為字符串常量,C51編譯器會自動地在字符串末尾加上結束符‘\0’。用單引號括起來的字符為字符的ASCII碼值,而不是字符串。例如‘a(chǎn)’表示a的ASCII碼值61H,而“a”表示一個字符串,由兩個字符a和\0組成。字符串數(shù)組name中含有5個字符串元素,每個字符串的長度要小于20,在計算字符串長度時,字符串后面的'\0'也要考慮在內(nèi)。02C51語言的函數(shù)第二節(jié)C51語言的函數(shù)一、函數(shù)的定義與分類

(一)函數(shù)的定義

在C51中函數(shù)定義的格式如下:函數(shù)值類型函數(shù)名稱(形式參數(shù)表){函數(shù)體;}第二節(jié)C51語言的函數(shù)1.函數(shù)值類型

函數(shù)類型用來說明函數(shù)返回值的數(shù)據(jù)類型。函數(shù)值類型在編程時可以省略,若省略,則系統(tǒng)默認函數(shù)返回值的數(shù)據(jù)類型是int。如果函數(shù)只執(zhí)行操作,不需要返回函數(shù)值,該函數(shù)類型就是空類型或者無類型,用void表示,它表示本函數(shù)是沒有返回值的。2.函數(shù)名稱

由用戶命名的,可以是任意的字母、數(shù)字和下劃線組成,但開頭不能使用數(shù)字。在同一個文件中,函數(shù)是不允許與其他變量或者函數(shù)重名的,也不能是關鍵字,比如int,if,else,for等。第二節(jié)C51語言的函數(shù)3.形式參數(shù)列表形式參數(shù)列表是函數(shù)調(diào)用時相互傳遞數(shù)據(jù)用的。有的函數(shù)不需要傳遞參數(shù)給它,則可以用void來替代,void也可以省略,但是無參函數(shù)的函數(shù)名后面的()不能省略。4.函數(shù)體函數(shù)體包含了聲明語句和執(zhí)行語句兩個部分。聲明語句部分要放在執(zhí)行語句之前,主要用于聲明函數(shù)內(nèi)部所使用的變量,執(zhí)行語句部分主要是一些函數(shù)需要執(zhí)行的語句。第二節(jié)C51語言的函數(shù)例如定義一個用戶函數(shù),用于求三個整數(shù)中的最大值,并返回其值,程序如下:intmax(intx,inty,intz){intmax1;if(x>y)max1=x;elsemax1=y;if(z>max1)max1=z;return(max1);}說明:由上面用戶函數(shù)的定義可知,該函數(shù)返回值的類型為int,函數(shù)名為max,三個形式參數(shù)x、y、z都是int類型。另外,該函數(shù)體中還定義了int變量max1,其他語句為求三個整數(shù)中最大值的程序段。注意:該用戶函數(shù)不能單獨運行,只有在主函數(shù)調(diào)用后,才可實際運行。第二節(jié)C51語言的函數(shù)(二)函數(shù)分類C51函數(shù)分為主函數(shù)、標準庫函數(shù)、自定義函數(shù)。

1.主函數(shù)主函數(shù)的標準寫法是intmain(void)前面的int是main函數(shù)的返回值類型,用于向操作系統(tǒng)說明程序的退出狀態(tài)。返回值為0代表正常退出,1代表異常。形式參數(shù)void用于說明主函數(shù)main()不需要傳遞參數(shù)2.標準庫函數(shù)C51編譯器提供了豐富的庫函數(shù),使得C51語言編程效率高、功能強大。庫函數(shù)是已經(jīng)編寫好的功能函數(shù),可完成數(shù)學計算、輸入輸出等常用功能。如果在C51編程中需要使用庫函數(shù),則應該在程序的開頭處使用預處理命令#include包含語句,將所用的庫函數(shù)頭文件包含到程序中來。例如:#include<reg51.h>專用寄存器SFR定義#include<absacc.h>絕對地址定義第二節(jié)C51語言的函數(shù)3.自定義函數(shù)可根據(jù)用戶需要編寫自定義

溫馨提示

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

評論

0/150

提交評論