微機(jī)控制系統(tǒng)與應(yīng)用5_第1頁
微機(jī)控制系統(tǒng)與應(yīng)用5_第2頁
微機(jī)控制系統(tǒng)與應(yīng)用5_第3頁
微機(jī)控制系統(tǒng)與應(yīng)用5_第4頁
微機(jī)控制系統(tǒng)與應(yīng)用5_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第五章 單片機(jī)的C語言程序設(shè)計(jì)5.1 C5.1 C語言的基本知識語言的基本知識5.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法5.3 5.3 函數(shù)函數(shù)5.4 5.4 數(shù)組和指針數(shù)組和指針5.5 5.5 程序設(shè)計(jì)舉例程序設(shè)計(jì)舉例15.1 C5.1 C語言的基本知識語言的基本知識5.1.1 C5.1.1 C語言的特點(diǎn)及其程序結(jié)構(gòu)語言的特點(diǎn)及其程序結(jié)構(gòu)匯編語言的優(yōu)點(diǎn):匯編語言的優(yōu)點(diǎn):1.1.程序代碼效率高,占用存儲空間小,運(yùn)行速度快程序代碼效率高,占用存儲空間小,運(yùn)行速度快2.2.匯編語言程序可以直接管理和控制硬件設(shè)備匯編語言程序可以直接管理和控制硬件設(shè)備匯編語言的缺點(diǎn):匯編語言的缺

2、點(diǎn):1.1.可讀性和可移植性較差可讀性和可移植性較差2.2.編寫單片機(jī)應(yīng)用系統(tǒng)程序的周期長編寫單片機(jī)應(yīng)用系統(tǒng)程序的周期長3.3.調(diào)試和排錯也比較因難調(diào)試和排錯也比較因難2C C語言的優(yōu)點(diǎn):語言的優(yōu)點(diǎn):1.1.語言簡潔,使用方便靈活語言簡潔,使用方便靈活2.2.可移植性好可移植性好3.3.表達(dá)能力強(qiáng)表達(dá)能力強(qiáng)4.4.表達(dá)方式靈活表達(dá)方式靈活5.5.可進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)可進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)6.6.可以直接操作計(jì)算機(jī)硬件可以直接操作計(jì)算機(jī)硬件7.7.生成的目標(biāo)代碼質(zhì)量高生成的目標(biāo)代碼質(zhì)量高35.1 C5.1 C語言的基本知識語言的基本知識C C語言程序結(jié)構(gòu):語言程序結(jié)構(gòu):例例1.1.巳知巳知x x1

3、010,y y 2020,計(jì)算,計(jì)算z zx xy y的結(jié)果的結(jié)果main( )main( )* *主函數(shù)名主函數(shù)名* * * *主函數(shù)體開始主函數(shù)體開始* *int x, y, z;int x, y, z;* *主函數(shù)的內(nèi)部變量類型說明主函數(shù)的內(nèi)部變量類型說明* *x=10;y=20;x=10;y=20;* *變量賦值變量賦值* *z=x+yz=x+y ; ;* *計(jì)算計(jì)算z zx+yx+y的值的值* * * *程序結(jié)束程序結(jié)束* *45.1 C5.1 C語言的基本知識語言的基本知識例例2.2.求最大值求最大值#include#includestdio.hstdio.h#include#in

4、cludemain( )main( )/ /* *主函數(shù)名主函數(shù)名* */ / / /* *主函數(shù)體開始主函數(shù)體開始* */ /int a, A, c;int a, A, c;/ /* * 主函數(shù)的內(nèi)部變量類型說明主函數(shù)的內(nèi)部變量類型說明* */ /int max(int x, int y); int max(int x, int y); / /* * 功能函數(shù)功能函數(shù)maxmax及具形式參數(shù)說明及具形式參數(shù)說明* */ /SCON=Ox52;SCON=Ox52;/ /* * 8051 8051單片機(jī)中串行口初始化單片機(jī)中串行口初始化* */ /TMOD=0 x20;TMOD=0 x20;/

5、/* *單片機(jī)定時器工作方式控制字設(shè)定單片機(jī)定時器工作方式控制字設(shè)定* */ /TCON=0 x69;TCON=0 x69;TH1=0 x0F3;TH1=0 x0F3;scanf(%d %d”,&a,&A);scanf(%d %d”,&a,&A);/ /* *輸入變量輸入變量a a和和A A的值的值* */ /c=max(a,A) c=max(a,A) / /* *調(diào)用調(diào)用max max 函數(shù)函數(shù)* */ /printf(“max=%d”,c);printf(“max=%d”,c);/ /* *輸出變量輸出變量c c的值的值* */ / / /* *主程序結(jié)束主

6、程序結(jié)束* */ /int max(int x, int y)int max(int x, int y)/ /* *定義定義maxmax函數(shù)函數(shù)x x、y y為形式參數(shù)為形式參數(shù)* */ / / /* *maxmax函數(shù)數(shù)體開始函數(shù)數(shù)體開始* */ /int z;int z;/ /* *maxmax函數(shù)內(nèi)部變員類型說明函數(shù)內(nèi)部變員類型說明* */ /if (xy) z=x;if (xy) z=x;/ /* *計(jì)算最大值計(jì)算最大值* */ /else z=y;else z=y;return(z); return(z); / /* *將計(jì)算得到的最大值將計(jì)算得到的最大值* */ / / /* *m

7、axmax函數(shù)結(jié)束函數(shù)結(jié)束* */ /55.1 C5.1 C語言的基本知識語言的基本知識6預(yù)處理命令預(yù)處理命令#include#include函數(shù)說明函數(shù)說明long fun2(long fun2(形參表形參表) )全局變量全局變量int i, j;int i, j;功能函數(shù)功能函數(shù)1 1fun1(fun1(形參表形參表) )形參說明形參說明 局部變量說明局部變量說明執(zhí)行語句執(zhí)行語句函數(shù)體函數(shù)體 主函數(shù)主函數(shù) main( )main( ) 局部變量說明局部變量說明 執(zhí)行語句執(zhí)行語句主函數(shù)體主函數(shù)體 功能函數(shù)功能函數(shù)2 2fun2(fun2(形參表形參表) )形參說明形參說明 局部變量說明局部變

8、量說明執(zhí)行語句執(zhí)行語句函數(shù)體函數(shù)體 5.1 C5.1 C語言的基本知識語言的基本知識75.1.2 C5.1.2 C語言的標(biāo)識符和關(guān)鍵字語言的標(biāo)識符和關(guān)鍵字【標(biāo)識符】【標(biāo)識符】用來標(biāo)識源程序中某個對象的名字。這些對象可以用來標(biāo)識源程序中某個對象的名字。這些對象可以是函數(shù)、變量、常量、數(shù)組、數(shù)據(jù)類型、存儲方式、語句等。是函數(shù)、變量、常量、數(shù)組、數(shù)據(jù)類型、存儲方式、語句等。標(biāo)識符的組成:標(biāo)識符的組成:n由字符串、數(shù)字和下劃線等組成由字符串、數(shù)字和下劃線等組成n第一個字符必須是字母或下劃線,通常以下劃線開頭的標(biāo)識符第一個字符必須是字母或下劃線,通常以下劃線開頭的標(biāo)識符是編譯系統(tǒng)專用的是編譯系統(tǒng)專用的n

9、C5lC5l編譯器規(guī)定標(biāo)識符最多可達(dá)編譯器規(guī)定標(biāo)識符最多可達(dá)255255個字符,但只有前面?zhèn)€字符,但只有前面3232個個字符在編譯時有效字符在編譯時有效nC C語言對大小寫字母敏感語言對大小寫字母敏感5.1 C5.1 C語言的基本知識語言的基本知識8【關(guān)鍵字】【關(guān)鍵字】一類具有固定名稱和特定含義的特殊標(biāo)識符,有時又稱為一類具有固定名稱和特定含義的特殊標(biāo)識符,有時又稱為保留字。保留字。5.1 C5.1 C語言的基本知識語言的基本知識95.1 C5.1 C語言的基本知識語言的基本知識105.1 C5.1 C語言的基本知識語言的基本知識115.1 C5.1 C語言的基本知識語言的基本知識125.1.

10、3 5.1.3 單片機(jī)單片機(jī)C5lC5l程序的編譯與連接程序的編譯與連接C C語言程序的執(zhí)行:語言程序的執(zhí)行: 用用c c語言編寫的程序必須通過編譯和連接之后,才能夠生產(chǎn)語言編寫的程序必須通過編譯和連接之后,才能夠生產(chǎn)可執(zhí)行代碼。可執(zhí)行代碼。5.1 C5.1 C語言的基本知識語言的基本知識編譯過程:編譯過程:編譯預(yù)處理和正式編譯編譯預(yù)處理和正式編譯13一、一、 預(yù)處理命令預(yù)處理命令 1. 1. 宏定義:宏定義: 宏定義作用是用一個字符串來進(jìn)行替換,而這個字符串既可以替換宏定義作用是用一個字符串來進(jìn)行替換,而這個字符串既可以替換常數(shù),也可以替換其它任何字符串,甚至還可以替換帶參數(shù)的宏。常數(shù),也可

11、以替換其它任何字符串,甚至還可以替換帶參數(shù)的宏。n不帶參數(shù)的宏定義不帶參數(shù)的宏定義 格式:格式:define define 標(biāo)識符標(biāo)識符 常量表達(dá)式常量表達(dá)式 標(biāo)識符:所定義的宏符號名標(biāo)識符:所定義的宏符號名( (也稱宏名也稱宏名) )。它的作用是在程序中。它的作用是在程序中 使用所指定的標(biāo)識符來代替所指定的常量表達(dá)式。使用所指定的標(biāo)識符來代替所指定的常量表達(dá)式。5.1 C5.1 C語言的基本知識語言的基本知識145.1 C5.1 C語言的基本知識語言的基本知識155.1 C5.1 C語言的基本知識語言的基本知識16n帶參數(shù)的宏定義帶參數(shù)的宏定義 格式:格式:define define 宏符號

12、名(參數(shù)表)宏符號名(參數(shù)表) 表達(dá)式表達(dá)式 表達(dá)式內(nèi)包含了在括號中所指定的參數(shù),這些參數(shù)稱為形式參表達(dá)式內(nèi)包含了在括號中所指定的參數(shù),這些參數(shù)稱為形式參數(shù),在以后的程序中它們將被實(shí)際參數(shù)所替換。數(shù),在以后的程序中它們將被實(shí)際參數(shù)所替換。例如:例如:5.1 C5.1 C語言的基本知識語言的基本知識在程序中就可以用這個宏而不用函數(shù)在程序中就可以用這個宏而不用函數(shù)min( )min( )。語句。語句m=MIN(um=MIN(u,v)v);經(jīng);經(jīng)宏展開后成為:宏展開后成為:mm(u)(u)(v)?(u)(v)?(u):(v)(v);172. 2. 文件包含:文件包含: 一個程序文件將另一個指定文件的

13、全部內(nèi)容包含進(jìn)來一個程序文件將另一個指定文件的全部內(nèi)容包含進(jìn)來 一般格式為:一般格式為:#include #include 文件名文件名 或者或者 #include “#include “文件名文件名” 文件包含命令文件包含命令#include#include的功能是用指定文件的全部內(nèi)容替換該的功能是用指定文件的全部內(nèi)容替換該 預(yù)處理行。預(yù)處理行。n用尖括號的頭文件,稱為標(biāo)準(zhǔn)頭文件用尖括號的頭文件,稱為標(biāo)準(zhǔn)頭文件n用雙引號的頭文件名為用戶自定義的頭文件名用雙引號的頭文件名為用戶自定義的頭文件名5.1 C5.1 C語言的基本知識語言的基本知識183. 3. 條件編譯:條件編譯: C51C51編譯

14、器的預(yù)處理器提供以下條件編譯命令:編譯器的預(yù)處理器提供以下條件編譯命令:#if#if、#elif#elif、#else#else、#endif#endif、#ifdef#ifdef、ifndefifndef,這些命令有三種使用格式:,這些命令有三種使用格式:1 1)5.1 C5.1 C語言的基本知識語言的基本知識功能是:如果指定的標(biāo)識符已被定義,則程序段功能是:如果指定的標(biāo)識符已被定義,則程序段1 1參加編譯并產(chǎn)生有效代碼,而忽略掉程序段參加編譯并產(chǎn)生有效代碼,而忽略掉程序段2 2,否則程序段否則程序段2 2參加編譯并產(chǎn)生有效代碼而忽略掉參加編譯并產(chǎn)生有效代碼而忽略掉程序段程序段1 1。其中。

15、其中elseelse和程序段和程序段2 2可以沒有??梢詻]有。例如對于工作于例如對于工作于6MHz6MHz和和12MHz12MHz晶振頻率下的晶振頻率下的80518051和和80528052單片單片機(jī),可以用如下的條件編譯使編機(jī),可以用如下的條件編譯使編寫的程序具有通用性:寫的程序具有通用性:192 2)5.1 C5.1 C語言的基本知識語言的基本知識功能是:同第一一種定義正好相反,如果指定功能是:同第一一種定義正好相反,如果指定的標(biāo)識符沒有被定義,則程序段的標(biāo)識符沒有被定義,則程序段1 1參加編譯并產(chǎn)參加編譯并產(chǎn)生有效代碼,而忽略掉程序段生有效代碼,而忽略掉程序段2 2,否則程序段,否則程序

16、段2 2參加編譯并產(chǎn)生有效代碼而忽略掉程序段參加編譯并產(chǎn)生有效代碼而忽略掉程序段1 1。其。其中中elseelse和程序段和程序段2 2可以沒有。可以沒有。例如對于工作于例如對于工作于6MHz6MHz和和12MHz12MHz晶振頻率下的晶振頻率下的80518051和和80528052單片單片機(jī),可以來如下的條件編譯使編機(jī),可以來如下的條件編譯使編寫的程序具有通用性:寫的程序具有通用性:203 3)5.1 C5.1 C語言的基本知識語言的基本知識功能是:如果常量表達(dá)式功能是:如果常量表達(dá)式1 1的值為真的值為真( (非非0)0),則程序段,則程序段1 1參加編譯,然后參加編譯,然后將控制傳遞給匹

17、配的將控制傳遞給匹配的#endif#endif命令,命令,結(jié)束本次條件編譯,繼續(xù)下面的編結(jié)束本次條件編譯,繼續(xù)下面的編譯處理。否則,如果常量表達(dá)式譯處理。否則,如果常量表達(dá)式1 1的的值為假值為假(0)(0),則忽略掉程序段,則忽略掉程序段1(1(不參不參加編譯加編譯) )而將控制傳遞給下面的一個而將控制傳遞給下面的一個#elif#elif命令,對常量表達(dá)式命令,對常量表達(dá)式2 2的值進(jìn)行的值進(jìn)行判斷。如果常量表達(dá)式判斷。如果常量表達(dá)式2 2的值為假的值為假(0)(0),則將控制再傳遞給下一個,則將控制再傳遞給下一個#elif#elif命令。如此進(jìn)行直到遇到命令。如此進(jìn)行直到遇到#else#e

18、lse或或#endif#endif命令為止。命令為止。214. 4. 其他預(yù)編譯指令:其他預(yù)編譯指令:#error#error: 通常嵌入在條件編譯之中,以便捕捉到一些不可預(yù)料的編譯條件通常嵌入在條件編譯之中,以便捕捉到一些不可預(yù)料的編譯條件5.1 C5.1 C語言的基本知識語言的基本知識例如,如果定義例如,如果定義#define #define MYVALMYVAL,它的值必須為,它的值必須為0 0或或1 1,為了測試,為了測試MYVALMYVAL的值是否正確,可以在程的值是否正確,可以在程序中安排如下一段條件編序中安排如下一段條件編譯:譯:當(dāng)當(dāng)MYVALMYVAL的值出錯時將輸出出錯信息的

19、值出錯時將輸出出錯信息“MYVAL must be defined to either MYVAL must be defined to either 0 or 1”0 or 1”并停止編譯并停止編譯22#pragma#pragma: 通常用在源程序中向編譯器傳送各種編譯控制命令通常用在源程序中向編譯器傳送各種編譯控制命令 使用格式為:使用格式為:#pragma #pragma 編譯命令名序列編譯命令名序列5.1 C5.1 C語言的基本知識語言的基本知識23二、編譯命令(正式編譯)二、編譯命令(正式編譯)對前面例對前面例2 2程序的編譯命令如下:程序的編譯命令如下: C5l EX2C5l EX

20、2C CODE DEBUG (C CODE DEBUG (回車回車) )n C51C51是編譯器啟動命令是編譯器啟動命令nEX2EX2C C是程序文件名是程序文件名nCODECODE和和DEBUGDEBUG是編譯控制指令是編譯控制指令如果編譯過程中未發(fā)現(xiàn)錯誤:如果編譯過程中未發(fā)現(xiàn)錯誤:nC51 COMPILATION COMPLETEC51 COMPILATION COMPLETE,0 WARING(S)0 WARING(S),0 ERROR(S)0 ERROR(S)n并產(chǎn)生列表文件并產(chǎn)生列表文件EX2.LSTEX2.LST和目標(biāo)文件和目標(biāo)文件EX2EX2OBJOBJ。如果編譯中發(fā)現(xiàn)任何錯誤如

21、果編譯中發(fā)現(xiàn)任何錯誤: :n不產(chǎn)生目標(biāo)文件不產(chǎn)生目標(biāo)文件n所有的錯誤信息都在列表文件中表示出來。所有的錯誤信息都在列表文件中表示出來。5.1 C5.1 C語言的基本知識語言的基本知識24編譯控制指令編譯控制指令CODE:CODE:使列表文件的后面附加一個匯編語言文件。使列表文件的后面附加一個匯編語言文件。編譯控制指令編譯控制指令DEBUG:DEBUG:使目標(biāo)文件中包含有進(jìn)行源程序調(diào)試時需要的各種符號信息。使目標(biāo)文件中包含有進(jìn)行源程序調(diào)試時需要的各種符號信息。5.1 C5.1 C語言的基本知識語言的基本知識25三、連接三、連接編譯完成之后的目標(biāo)文件要經(jīng)過連接才能夠生成可執(zhí)行的目編譯完成之后的目標(biāo)

22、文件要經(jīng)過連接才能夠生成可執(zhí)行的目標(biāo)代碼。連接是通過連接程序標(biāo)代碼。連接是通過連接程序L51L51來完成的。來完成的。對例對例2 2程序的連接命令如下:程序的連接命令如下: L5l EX2L5l EX20BJ (0BJ (回車回車) )nL51L51是連接命令是連接命令nEX2EX2OBJOBJ是編譯產(chǎn)生的目標(biāo)文件,注意目標(biāo)文件的擴(kuò)展是編譯產(chǎn)生的目標(biāo)文件,注意目標(biāo)文件的擴(kuò)展名名OBJOBJ不能省略。不能省略。n如果是多模塊程序,應(yīng)將各個模塊程序逐個編譯,連接時依次如果是多模塊程序,應(yīng)將各個模塊程序逐個編譯,連接時依次輸入各個模塊的目標(biāo)文件,各個目標(biāo)文件之間用逗號輸入各個模塊的目標(biāo)文件,各個目標(biāo)

23、文件之間用逗號“,”隔開。隔開。輸入完命令后,即進(jìn)入連接過程。輸入完命令后,即進(jìn)入連接過程。5.1 C5.1 C語言的基本知識語言的基本知識26如果連接過程中沒有錯誤:如果連接過程中沒有錯誤:n將產(chǎn)生一個映象文件將產(chǎn)生一個映象文件EX2EX2M5lM5l和一個可執(zhí)行的絕對目標(biāo)代碼和一個可執(zhí)行的絕對目標(biāo)代碼文件文件EX2.ABSEX2.ABS。映象文件中包含有各種連接信息;目標(biāo)代碼文。映象文件中包含有各種連接信息;目標(biāo)代碼文件可裝入與件可裝入與IntelIntel兼容的仿真器內(nèi)進(jìn)行調(diào)試,也可用符號轉(zhuǎn)換器兼容的仿真器內(nèi)進(jìn)行調(diào)試,也可用符號轉(zhuǎn)換器OHS51OHS51程序?qū)⑵滢D(zhuǎn)換為程序?qū)⑵滢D(zhuǎn)換為INT

24、EL HEXINTEL HEX文件,以寫入文件,以寫入EPROMEPROM之之中。中。如果連接過程中發(fā)現(xiàn)錯誤如果連接過程中發(fā)現(xiàn)錯誤: :n顯示錯誤信息并且不產(chǎn)生絕對目標(biāo)文件。顯示錯誤信息并且不產(chǎn)生絕對目標(biāo)文件。5.1 C5.1 C語言的基本知識語言的基本知識【啟動程序】:【啟動程序】:L51L51的另外一個重要功能是在的另外一個重要功能是在C C語言源程序的前面加上一段語言源程序的前面加上一段稱為稱為”啟動程序啟動程序”的代碼,啟動程序的任務(wù)是在進(jìn)入的代碼,啟動程序的任務(wù)是在進(jìn)入main( )main( )函數(shù)之函數(shù)之前,完成前,完成80518051單片機(jī)中堆棧的開設(shè)、全局變量的初始化等工作。

25、單片機(jī)中堆棧的開設(shè)、全局變量的初始化等工作。5.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法275.2.1 5.2.1 數(shù)據(jù)類型數(shù)據(jù)類型5.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法28295.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法數(shù)據(jù)類型轉(zhuǎn)換:數(shù)據(jù)類型轉(zhuǎn)換:隱形轉(zhuǎn)換:隱形轉(zhuǎn)換: 數(shù)據(jù)類型按照一定的規(guī)則自動地進(jìn)行轉(zhuǎn)換數(shù)據(jù)類型按照一定的規(guī)則自動地進(jìn)行轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換:強(qiáng)制轉(zhuǎn)換: 采用強(qiáng)制類型轉(zhuǎn)換符采用強(qiáng)制類型轉(zhuǎn)換符“( )”( )”對數(shù)據(jù)類型作顯式的人為對數(shù)據(jù)類型作顯式的人為轉(zhuǎn)換轉(zhuǎn)換305.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基

26、本語法5.2.2 5.2.2 常量常量整型常量:整型常量:十進(jìn)制整數(shù)(十進(jìn)制整數(shù)(12341234)、十六進(jìn)制整數(shù)()、十六進(jìn)制整數(shù)(0 x12340 x1234)和長整數(shù))和長整數(shù)(1234L1234L)浮點(diǎn)數(shù)常量:浮點(diǎn)數(shù)常量:十進(jìn)制表示形式和指數(shù)表示形式十進(jìn)制表示形式和指數(shù)表示形式十進(jìn)制表示形式又稱定點(diǎn)表示形式,由數(shù)字和小數(shù)點(diǎn)組成。十進(jìn)制表示形式又稱定點(diǎn)表示形式,由數(shù)字和小數(shù)點(diǎn)組成。指數(shù)表示形式為:指數(shù)表示形式為: 數(shù)字?jǐn)?shù)字 . .數(shù)字?jǐn)?shù)字 e e 數(shù)字?jǐn)?shù)字字符型常量:字符型常量:單引號內(nèi)的字符,如單引號內(nèi)的字符,如a,ba,b。對于不可顯示的控制字。對于不可顯示的控制字符,在其前面加一個

27、反斜杠符,在其前面加一個反斜杠”組成專用的轉(zhuǎn)義字符。組成專用的轉(zhuǎn)義字符。315.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法325.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法字符串型常量:字符串型常量:由雙引號由雙引號“”“”內(nèi)的字符組成,如內(nèi)的字符組成,如“ABcD”ABcD”、“91234”91234”等。等。位標(biāo)量:位標(biāo)量:擴(kuò)充數(shù)據(jù)類型。用關(guān)鍵字?jǐn)U充數(shù)據(jù)類型。用關(guān)鍵字“bit”bit”來定義,它的值是一個二來定義,它的值是一個二進(jìn)制位。一個函數(shù)中可以包含進(jìn)制位。一個函數(shù)中可以包含bitbit類型的參數(shù),函數(shù)的返回值也可以類型的參數(shù),函數(shù)的返回值也可以為為

28、“bit”bit”型。型。335.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法5.2.3 5.2.3 變量及其存儲模式變量及其存儲模式【變量】【變量】: :在程序執(zhí)行過程中其值能不斷變化的量。在程序執(zhí)行過程中其值能不斷變化的量。定義的格式:定義的格式: 存儲種類存儲種類 數(shù)據(jù)類型數(shù)據(jù)類型 存儲器類型存儲器類型 變量名表變量名表存儲種類:存儲種類: 自動自動(auto)(auto)、外部、外部(extern)(extern)、靜態(tài)、靜態(tài)(static)(static)和寄存器和寄存器(register)(register)345.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)

29、的基本語法355.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法C5lC5l編譯器的三種存儲器模式編譯器的三種存儲器模式( (默認(rèn)的存儲器類型默認(rèn)的存儲器類型) )對變量的影響如下:對變量的影響如下:1.SMALL1.SMALL 變量被定義在變量被定義在80518051單片機(jī)的內(nèi)部數(shù)據(jù)存儲器中,因此對這種變單片機(jī)的內(nèi)部數(shù)據(jù)存儲器中,因此對這種變量的訪問速度最快。所有的對象,包括堆棧,都必須嵌入內(nèi)部數(shù)據(jù)存儲器。量的訪問速度最快。所有的對象,包括堆棧,都必須嵌入內(nèi)部數(shù)據(jù)存儲器。2.COMPACT2.COMPACT 變量被定義在分頁外部數(shù)據(jù)存儲器中,外部數(shù)據(jù)段的長度可變量被定義在分頁外

30、部數(shù)據(jù)存儲器中,外部數(shù)據(jù)段的長度可達(dá)達(dá)256256字節(jié)。這時對變量的訪問是通過寄存器問接尋址字節(jié)。這時對變量的訪問是通過寄存器問接尋址(Movx(MovxRi)Ri)進(jìn)行的,進(jìn)行的,堆棧位于堆棧位于80518051單片機(jī)內(nèi)部數(shù)據(jù)存儲器中。采用這種編譯模式時,變量的高單片機(jī)內(nèi)部數(shù)據(jù)存儲器中。采用這種編譯模式時,變量的高8 8位地址由位地址由P2P2口確定??诖_定。3.LARGE3.LARGE 變量被定義在外部數(shù)據(jù)存儲器中變量被定義在外部數(shù)據(jù)存儲器中( (最大可達(dá)最大可達(dá)64K64K字節(jié)字節(jié)) ),使用數(shù)據(jù),使用數(shù)據(jù)指針指針DPTRDPTR來間接訪問變量。這種訪問數(shù)據(jù)的方法效率是不高的。來間接訪問

31、變量。這種訪問數(shù)據(jù)的方法效率是不高的。需要特別指出的是,變量的存儲種類與存儲器類型是完全無關(guān)的。需要特別指出的是,變量的存儲種類與存儲器類型是完全無關(guān)的。365.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法定義特殊功能寄存器定義特殊功能寄存器: :n sfr sfr 特殊功能寄存器名地址常數(shù)特殊功能寄存器名地址常數(shù) 例例 sft P0sft P00 x800 x80,/ /* * 定義定義I/OI/O口口P0P0,其地址為,其地址為80H 80H * */ /n sfr16 sfr16 特殊功能寄存器名地址常數(shù)特殊功能寄存器名地址常數(shù) 例例 sfrl6 T2sfrl6 T2Ox

32、CCOxCC, / /* * 定義定義TIMER2TIMER2:其地址為:其地址為T2LT2L0CCH0CCH,T2HT2H0CDH 0CDH * */ /定義可尋址的位:定義可尋址的位:n sbit sbit 位變量名位地址位變量名位地址 例例 sbit OVsbit OV0 xD20 xD2n sbit sbit 位變量名特殊功能寄存器名位變量名特殊功能寄存器名 位位置位位置 例例 sfr PSWsfr PSW0 xD00 xD0; sbit OV=PSW2sbit OV=PSW2n sbit sbit 位變量名字節(jié)地址位變量名字節(jié)地址 位位置位位置 例例 sbit OVsbit OV0

33、xD020 xD02375.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法5.2.4 5.2.4 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式n賦值運(yùn)算符賦值運(yùn)算符 “ “=”=” 變量表達(dá)式變量表達(dá)式n算術(shù)運(yùn)算符算術(shù)運(yùn)算符“+” +” 加或取正值運(yùn)算符加或取正值運(yùn)算符“-” -” 減或取負(fù)值運(yùn)算符減或取負(fù)值運(yùn)算符“* *” ” 乘運(yùn)算符乘運(yùn)算符“/” /” 除運(yùn)算符除運(yùn)算符“%” %” 取余運(yùn)算符取余運(yùn)算符算術(shù)表達(dá)式的一般形式為:表達(dá)式算術(shù)表達(dá)式的一般形式為:表達(dá)式1 1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 表達(dá)式表達(dá)式2 2n增量與減量運(yùn)算符增量與減量運(yùn)算符“+” +” 增量運(yùn)算符增量運(yùn)算符 i+ +ii

34、+ +i“-” “-” 減量運(yùn)算符減量運(yùn)算符 i- -ii- -i385.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n關(guān)系運(yùn)算符關(guān)系運(yùn)算符“” ” 大于大于“” =” =” 大于等于大于等于“=” =” 小于等于小于等于“=” =” 等于等于“!=” !=” 不等于不等于關(guān)系表達(dá)式的一般形式為:表達(dá)式關(guān)系表達(dá)式的一般形式為:表達(dá)式1 1 關(guān)系運(yùn)算符關(guān)系運(yùn)算符 表達(dá)式表達(dá)式2 2n邏輯運(yùn)算符邏輯運(yùn)算符“|” |” 邏輯或邏輯或 條件式條件式1 | 1 | 條件式條件式2 2“&” “&” 邏輯與邏輯與 條件式條件式1 & 1 & 條件式條件式2

35、2“!” “!” 邏輯非邏輯非 ! !條件式條件式395.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n位運(yùn)算符位運(yùn)算符“” ” 按位取反按位取反 “ “&” &” 按位與按位與“|” |” 按位或按位或 “ “” ” 按位異或按位異或“” ” ” 右移右移 位運(yùn)算的一般形式:變量位運(yùn)算的一般形式:變量1 1 位運(yùn)算符位運(yùn)算符 變量變量2 2405.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符“+=” +=” 加法賦值加法賦值 “=” =” 右移位賦值右移位賦值 “ “-=” -=” 減法賦值減法賦值 “ “&

36、;=” &=” 邏輯與賦值邏輯與賦值 “ “* *=” =” 乘法賦值乘法賦值 “|=” |=” 邏輯或賦值邏輯或賦值 “ “/=” /=” 除法賦值除法賦值 “=” =” 邏輯異或賦值邏輯異或賦值 “ “%=” %=” 取模賦值取模賦值 “=” =” 邏輯非賦值邏輯非賦值 “ “=”=”左移位賦值左移位賦值復(fù)合賦值運(yùn)算的一般形式為:變量復(fù)合賦值運(yùn)算的一般形式為:變量 復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符 表達(dá)式表達(dá)式n逗號運(yùn)算符逗號運(yùn)算符 “ “,”,”逗號表達(dá)式的一般形式為:表達(dá)式逗號表達(dá)式的一般形式為:表達(dá)式1 1,表達(dá)式,表達(dá)式2 2,表達(dá)式表達(dá)式n n例例 w = ( x =5, y

37、 = x+6, z = 7, y+z ) w = ( x =5, y = x+6, z = 7, y+z ) 結(jié)果為結(jié)果為1818415.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n條件運(yùn)算符條件運(yùn)算符 “ “?”?”條件表達(dá)式一般形式:邏輯表達(dá)式條件表達(dá)式一般形式:邏輯表達(dá)式? ?表達(dá)式表達(dá)式1 1:表達(dá)式:表達(dá)式2 2n指針和地址運(yùn)算符指針和地址運(yùn)算符“* *” ” 取內(nèi)容取內(nèi)容變量變量 = = * * 指針變量指針變量“” ” 取地址取地址指針變量指針變量 = & = & 目標(biāo)變量目標(biāo)變量n強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 “ “( )”( )”隱式

38、轉(zhuǎn)換:在對程序進(jìn)行編譯時由編譯器自動處理的。隱式轉(zhuǎn)換:在對程序進(jìn)行編譯時由編譯器自動處理的。隱式轉(zhuǎn)換遵循以下規(guī)則:隱式轉(zhuǎn)換遵循以下規(guī)則: 1 1所有所有charchar型的操作數(shù)轉(zhuǎn)換成型的操作數(shù)轉(zhuǎn)換成intint型;型; 2 2用運(yùn)算符連接的兩個操作數(shù)如果具有不同的數(shù)據(jù)類型,按以下次用運(yùn)算符連接的兩個操作數(shù)如果具有不同的數(shù)據(jù)類型,按以下次 序進(jìn)行轉(zhuǎn)換:如果一個操作數(shù)是序進(jìn)行轉(zhuǎn)換:如果一個操作數(shù)是floatfloat類型,則另一個操作數(shù)也類型,則另一個操作數(shù)也轉(zhuǎn)轉(zhuǎn) 換成換成floatfloat類型;如果一個操作數(shù)是類型;如果一個操作數(shù)是longlong類型,則另一個操作數(shù)類型,則另一個操作數(shù) 也

39、轉(zhuǎn)換戊也轉(zhuǎn)換戊longlong類型;如果一個操作數(shù)是類型;如果一個操作數(shù)是unsignedunsigned類型,則另一類型,則另一 個操作數(shù)也轉(zhuǎn)換成個操作數(shù)也轉(zhuǎn)換成unsignedunsigned類型。類型。 425.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法3 3在對變量賦值時發(fā)生的隱式轉(zhuǎn)換,將賦值號在對變量賦值時發(fā)生的隱式轉(zhuǎn)換,將賦值號“=”=”右邊的表達(dá)式右邊的表達(dá)式類類 型轉(zhuǎn)換成賦值號左邊變量的類型。型轉(zhuǎn)換成賦值號左邊變量的類型。注:在注:在C C語言中只有基本數(shù)據(jù)類型語言中只有基本數(shù)據(jù)類型( (即即charchar、intint、longlong和和float)fl

40、oat)可以可以 進(jìn)行隱式轉(zhuǎn)換。其余的數(shù)據(jù)類型不能進(jìn)行隱式轉(zhuǎn)換。進(jìn)行隱式轉(zhuǎn)換。其余的數(shù)據(jù)類型不能進(jìn)行隱式轉(zhuǎn)換。強(qiáng)制轉(zhuǎn)換:使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制轉(zhuǎn)換:使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的一般形式為:強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的一般形式為: ( (類型名類型名)( )(表達(dá)式表達(dá)式) )nsizeofsizeof運(yùn)算符運(yùn)算符使用形式為:使用形式為:sizeof(sizeof(表達(dá)式表達(dá)式) )或或sizeof(sizeof(數(shù)據(jù)類型數(shù)據(jù)類型) )435.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法5.2.5 C515.2.5 C51基本語句基本語句: :1. 1. 表達(dá)式語句表達(dá)

41、式語句 表達(dá)式語句是最基本的表達(dá)式語句是最基本的種語句。在表達(dá)式的后邊加一個分號種語句。在表達(dá)式的后邊加一個分號“;”就構(gòu)成了表達(dá)式語句。例如就構(gòu)成了表達(dá)式語句。例如a=+ba=+b* *9; 9; 空語句空語句 ;2.2. 復(fù)合語句復(fù)合語句 復(fù)合語句是由若干條語句組合而成的一種語復(fù)合語句是由若干條語句組合而成的一種語句,它是用一個大括號句,它是用一個大括號“ ” ”將若干條語句組合將若干條語句組合在一起而形成的一種功能塊。在一起而形成的一種功能塊。 復(fù)合語句的一般形式為:復(fù)合語句的一般形式為:445.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法3. 3. 條件語句條件語句(

42、(分支語句分支語句) )nif (if (條件表達(dá)式條件表達(dá)式) ) 語句語句nif (if (條件表達(dá)式條件表達(dá)式) ) 語句語句1 1 else else 語句語句2 2455.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法nif (if (條件表達(dá)式條件表達(dá)式1) 1) 語句語句1 1 else if ( else if (條件式表達(dá)條件式表達(dá)2) 2) 語句語句2 2 else if ( else if (條件式表達(dá)條件式表達(dá)3) 3) 語句語句3 3 else if ( else if (條件表達(dá)式條件表達(dá)式m) m) 語句語句mm else else 語句語句n n4

43、65.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法4. 4. 開關(guān)語句開關(guān)語句 switchswitch(表達(dá)式)(表達(dá)式) case case 常量表達(dá)式常量表達(dá)式1 1: 語句語句1 1 break; break;case case 常量表達(dá)式常量表達(dá)式2 2: 語句語句2 2 break; break;case case 常量表達(dá)式常量表達(dá)式n n: 語句語句n n break; break;default: default: 語句語句d d 475.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法5. 5. 循環(huán)語句循環(huán)語句nwhilewhile語句語句wh

44、ile (while (條件表達(dá)式條件表達(dá)式) ) 語句;語句;ndo-whiledo-while語句語句do do 語句語句 while (while (條件表達(dá)式條件表達(dá)式) );485.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法nfor for 語句語句for (for (初值設(shè)定表達(dá)式初值設(shè)定表達(dá)式;循環(huán)條件表達(dá)式循環(huán)條件表達(dá)式;更新表達(dá)式更新表達(dá)式) ) 語句語句; ;495.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法ngoto goto 語句語句goto goto 語句標(biāo)號語句標(biāo)號; ;ncontinue continue 語句語句continu

45、e;continue;6. 6. 返回語句返回語句返回語句用于終止函數(shù)的執(zhí)行,并控制程序返回到調(diào)用該函數(shù)時返回語句用于終止函數(shù)的執(zhí)行,并控制程序返回到調(diào)用該函數(shù)時所處的位置。返回語句的格式有兩種:所處的位置。返回語句的格式有兩種:nreturnreturn(表達(dá)式)(表達(dá)式)nreturnreturn505.3 5.3 函數(shù)函數(shù)5.3.1 5.3.1 函數(shù)的定義函數(shù)的定義: :n標(biāo)準(zhǔn)庫函數(shù):標(biāo)準(zhǔn)庫函數(shù): C51C51編譯器提供的,不需要用戶進(jìn)行定義,可以直接調(diào)用的函數(shù)。編譯器提供的,不需要用戶進(jìn)行定義,可以直接調(diào)用的函數(shù)。n用戶自定義函數(shù):用戶自定義函數(shù): 用戶根據(jù)自己的需要編寫的能實(shí)現(xiàn)特定功

46、能的函數(shù),它必須先進(jìn)行定用戶根據(jù)自己的需要編寫的能實(shí)現(xiàn)特定功能的函數(shù),它必須先進(jìn)行定義之后才能調(diào)用。義之后才能調(diào)用。 函數(shù)定義的一般形式:函數(shù)定義的一般形式:515.3 5.3 函數(shù)函數(shù)525.3 5.3 函數(shù)函數(shù)535.3 5.3 函數(shù)函數(shù)5.3.2 5.3.2 函數(shù)的調(diào)用函數(shù)的調(diào)用: :n函數(shù)調(diào)用:函數(shù)調(diào)用: 在一個函數(shù)體中引用另外一個已經(jīng)定義了的函數(shù),前者稱為主調(diào)用函在一個函數(shù)體中引用另外一個已經(jīng)定義了的函數(shù),前者稱為主調(diào)用函數(shù),后者稱為被調(diào)用函數(shù)。數(shù),后者稱為被調(diào)用函數(shù)。n主調(diào)用函數(shù)調(diào)用被調(diào)用函數(shù)的一般形式為:主調(diào)用函數(shù)調(diào)用被調(diào)用函數(shù)的一般形式為: 函數(shù)名函數(shù)名( (實(shí)際參數(shù)表實(shí)際參數(shù)

47、表) ) 1.1.函數(shù)語句:函數(shù)語句:在主調(diào)函數(shù)中將函數(shù)調(diào)用作為一條語句,例如:在主調(diào)函數(shù)中將函數(shù)調(diào)用作為一條語句,例如:funl( )funl( ); 2.2.函數(shù)表達(dá)式:函數(shù)表達(dá)式:在主調(diào)函數(shù)中將函數(shù)調(diào)用作為一個運(yùn)算對象直接出現(xiàn)在主調(diào)函數(shù)中將函數(shù)調(diào)用作為一個運(yùn)算對象直接出現(xiàn)在表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。例如:在表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。例如: c c maxint(x, y) + maxint(ymaxint(x, y) + maxint(y,z) z); 3.3.函數(shù)參數(shù):函數(shù)參數(shù):在主調(diào)函數(shù)中將函數(shù)調(diào)用作為另一個函數(shù)調(diào)用的實(shí)際參在主調(diào)函數(shù)中將函數(shù)調(diào)用作為另一個函數(shù)調(diào)用

48、的實(shí)際參數(shù)。例如:數(shù)。例如: c c maxint(maxint(xmaxint(maxint(x,y)y),z);z);545.3 5.3 函數(shù)函數(shù)n對被調(diào)用函數(shù)的說明:對被調(diào)用函數(shù)的說明: “先說明,后調(diào)用先說明,后調(diào)用” 1. 1. 標(biāo)準(zhǔn)庫函數(shù)或不在同一文件中的用戶自定義函數(shù):標(biāo)準(zhǔn)庫函數(shù)或不在同一文件中的用戶自定義函數(shù):應(yīng)在程序的應(yīng)在程序的開始處用預(yù)處理命令開始處用預(yù)處理命令includeinclude將有關(guān)函數(shù)信息的頭文件包含進(jìn)來。將有關(guān)函數(shù)信息的頭文件包含進(jìn)來。例如例如#include#includestdio.hstdio.h,就是將與庫輸出函數(shù),就是將與庫輸出函數(shù)printfpr

49、intf( )和庫輸)和庫輸入函數(shù)入函數(shù)scanfscanf( )有關(guān)的頭文件)有關(guān)的頭文件stdio.hstdio.h包含到程序文件中來。包含到程序文件中來。 2.2.同一文件中的用戶自定義函數(shù):同一文件中的用戶自定義函數(shù):應(yīng)該在主調(diào)函數(shù)中對被調(diào)函數(shù)應(yīng)該在主調(diào)函數(shù)中對被調(diào)函數(shù)的返回值的類型進(jìn)行說明。的返回值的類型進(jìn)行說明。 函數(shù)說明的一般形式為:函數(shù)說明的一般形式為: 類型標(biāo)識符類型標(biāo)識符 被調(diào)用的函數(shù)名被調(diào)用的函數(shù)名( (形式參數(shù)表形式參數(shù)表) );555.3 5.3 函數(shù)函數(shù) 下列情況下被調(diào)用函數(shù)不需要作類型說明:下列情況下被調(diào)用函數(shù)不需要作類型說明: 1.1. 如果被調(diào)用的函數(shù)的定義出

50、現(xiàn)在主調(diào)函數(shù)之前,可以不必加以如果被調(diào)用的函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前,可以不必加以說明。因?yàn)榫幾g系統(tǒng)已經(jīng)先知道了已定義的函數(shù)類型,會自動處理。說明。因?yàn)榫幾g系統(tǒng)已經(jīng)先知道了已定義的函數(shù)類型,會自動處理。 2.2.如果已在所有函數(shù)定義之前,在文件的開頭說明了函數(shù)類型,如果已在所有函數(shù)定義之前,在文件的開頭說明了函數(shù)類型,則在各個主調(diào)函數(shù)中不必對所調(diào)用的函數(shù)再作類型說明。則在各個主調(diào)函數(shù)中不必對所調(diào)用的函數(shù)再作類型說明。565.3 5.3 函數(shù)函數(shù)575.3 5.3 函數(shù)函數(shù)n函數(shù)的參數(shù)和函數(shù)的返回值:函數(shù)的參數(shù)和函數(shù)的返回值: 形式參數(shù):形式參數(shù):函數(shù)定義的時候,位于函數(shù)名后面圓括號中的變量名

51、函數(shù)定義的時候,位于函數(shù)名后面圓括號中的變量名 實(shí)際參數(shù):實(shí)際參數(shù):調(diào)用函數(shù)的時候,位于函數(shù)名后面圓括號中的表達(dá)式調(diào)用函數(shù)的時候,位于函數(shù)名后面圓括號中的表達(dá)式 返回值:返回值:通過函數(shù)調(diào)用使主調(diào)用函數(shù)獲得的一個確定的值,通過通過函數(shù)調(diào)用使主調(diào)用函數(shù)獲得的一個確定的值,通過 returnreturn函數(shù)獲得。函數(shù)獲得。n實(shí)際參數(shù)的傳遞形式:實(shí)際參數(shù)的傳遞形式: 1.1.基本類型的實(shí)際參數(shù)傳遞基本類型的實(shí)際參數(shù)傳遞 2.2.數(shù)組類型的實(shí)際參數(shù)傳遞數(shù)組類型的實(shí)際參數(shù)傳遞 3.3.指針類型的實(shí)際參數(shù)傳遞指針類型的實(shí)際參數(shù)傳遞585.3 5.3 函數(shù)函數(shù)5.3.3 5.3.3 函數(shù)的嵌套與遞歸調(diào)用函數(shù)

52、的嵌套與遞歸調(diào)用: :函數(shù)的嵌套調(diào)用:函數(shù)的嵌套調(diào)用:在調(diào)用一個函數(shù)的過程中允許調(diào)用另一個函數(shù)。在調(diào)用一個函數(shù)的過程中允許調(diào)用另一個函數(shù)。函數(shù)的遞歸調(diào)用:函數(shù)的遞歸調(diào)用:在調(diào)用一個函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用函在調(diào)用一個函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用函數(shù)本身。數(shù)本身。再入函數(shù)再入函數(shù)(reentrant):(reentrant):可以在函數(shù)體內(nèi)直接或可以在函數(shù)體內(nèi)直接或間接地調(diào)用其自身的一間接地調(diào)用其自身的一種函數(shù)。種函數(shù)。595.3 5.3 函數(shù)函數(shù)5.3.4 5.3.4 中斷服務(wù)函數(shù)與寄存器組定義中斷服務(wù)函數(shù)與寄存器組定義 定義中斷服務(wù)函數(shù)的一般形式為:定義中斷服務(wù)函數(shù)的一般形式

53、為: 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名( (形式參數(shù)表形式參數(shù)表) interrupt n using n) interrupt n using n InterruptInterrupt:關(guān)鍵字關(guān)鍵字 n n:中斷號,中斷號,n n的取值范圍為的取值范圍為0 03131。編譯器從。編譯器從8n+38n+3處產(chǎn)生中斷向量,處產(chǎn)生中斷向量, 具體的中斷號具體的中斷號n n和中斷向量取決于不同的和中斷向量取決于不同的80518051系列單片機(jī)芯片。系列單片機(jī)芯片。605.3 5.3 函數(shù)函數(shù) 關(guān)鍵字關(guān)鍵字interruptinterrupt對中斷函數(shù)目標(biāo)代碼的影響如下:對中斷函數(shù)目標(biāo)代碼的影響如下:

54、在進(jìn)人中斷函數(shù)時,特殊功能寄存器在進(jìn)人中斷函數(shù)時,特殊功能寄存器ACCACC、B B、DPHDPH、DPLDPL、PSWPSW將將被保存入棧;如果不使用寄存組切換,則將中斷函數(shù)中所用到的全部工作被保存入棧;如果不使用寄存組切換,則將中斷函數(shù)中所用到的全部工作寄存器都入棧;函數(shù)返回之前,所有的寄存器內(nèi)容出棧;中斷函數(shù)由寄存器都入棧;函數(shù)返回之前,所有的寄存器內(nèi)容出棧;中斷函數(shù)由805l805l單片機(jī)指令單片機(jī)指令RETIRETI結(jié)束。結(jié)束。usingusing:關(guān)鍵字。專門用來選取關(guān)鍵字。專門用來選取805l805l單片機(jī)中不同的工作寄存器組。單片機(jī)中不同的工作寄存器組。n n:一個一個0 03

55、 3的常整數(shù),分別選中的常整數(shù),分別選中4 4個不同的工作寄存器組。個不同的工作寄存器組。 關(guān)鍵字關(guān)鍵字usingusing對函數(shù)目標(biāo)代碼的影響如下:對函數(shù)目標(biāo)代碼的影響如下: 在函數(shù)的入口處將當(dāng)前工作寄存器組保護(hù)到堆棧中;指定的工作寄存器在函數(shù)的入口處將當(dāng)前工作寄存器組保護(hù)到堆棧中;指定的工作寄存器組內(nèi)容不會改變;函數(shù)返回之前將被保護(hù)的工作寄存器組從堆棧中恢復(fù)。組內(nèi)容不會改變;函數(shù)返回之前將被保護(hù)的工作寄存器組從堆棧中恢復(fù)。615.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n變量的作用范圍變量的作用范圍全局變量:全局變量: 指在程序開始處或各個功能函數(shù)的外面所定義的變量。在

56、程指在程序開始處或各個功能函數(shù)的外面所定義的變量。在程序開始處定義的全局變量在整個程序中有效,可供程序中所序開始處定義的全局變量在整個程序中有效,可供程序中所有的函數(shù)共同使用;而在各功能函數(shù)外而定義的全局變量只有的函數(shù)共同使用;而在各功能函數(shù)外而定義的全局變量只有從定義開始處往后的各個函數(shù)可以使用,定義處前面的函有從定義開始處往后的各個函數(shù)可以使用,定義處前面的函數(shù)不能使用。數(shù)不能使用。局部變量:局部變量: 指在函數(shù)內(nèi)部或以花括號指在函數(shù)內(nèi)部或以花括號 圍起來的功能塊內(nèi)部所定義的變圍起來的功能塊內(nèi)部所定義的變量。局部變量只在定義它的函數(shù)或功能塊以內(nèi)有效,而該函量。局部變量只在定義它的函數(shù)或功能

57、塊以內(nèi)有效,而該函數(shù)或功能塊以外則不能使用它。數(shù)或功能塊以外則不能使用它。n 變量的存在時間變量的存在時間靜態(tài)存儲變量:靜態(tài)存儲變量:指該變量在程序運(yùn)行期間其存儲空間固定不變。指該變量在程序運(yùn)行期間其存儲空間固定不變。動態(tài)存儲變量:動態(tài)存儲變量:指該變量的存儲空間不確定,在程序運(yùn)行期間根據(jù)需要指該變量的存儲空間不確定,在程序運(yùn)行期間根據(jù)需要動動 態(tài)地為該變量分配存儲空間。態(tài)地為該變量分配存儲空間。5.3.5 5.3.5 變量變量: :625.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法變量的存儲種類:變量的存儲種類:自動自動(auto)(auto)、外部、外部(extern)(

58、extern)、靜態(tài)、靜態(tài)(static)(static)和寄存器和寄存器(register)(register)n自動變量自動變量 (auto)(auto) 定義一個變量時,在變量名前面加上存儲種類說明符定義一個變量時,在變量名前面加上存儲種類說明符“auto”auto”,即將該變量定義為自動變量。按照缺省規(guī)則,在函數(shù)體內(nèi)部或復(fù)合語即將該變量定義為自動變量。按照缺省規(guī)則,在函數(shù)體內(nèi)部或復(fù)合語句內(nèi)部定義的變量,如果省略存儲種類說明,該變量即為自動變量。句內(nèi)部定義的變量,如果省略存儲種類說明,該變量即為自動變量。635.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n外部變量外部變

59、量 (extern)(extern) 使用存儲種類說明符使用存儲種類說明符“extern”extern”定義的變量稱為外部變量。按照定義的變量稱為外部變量。按照缺省規(guī)則,凡是在所有函數(shù)之前,在函數(shù)外部定義的變量都是外部變量。缺省規(guī)則,凡是在所有函數(shù)之前,在函數(shù)外部定義的變量都是外部變量。說明一個已在別的程序模塊文件中定義過的外部變量時,則必須要使用說明一個已在別的程序模塊文件中定義過的外部變量時,則必須要使用externextern說明符。說明符。645.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法655.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n靜態(tài)變量靜

60、態(tài)變量 (static)(static) 使用存儲種類說明符使用存儲種類說明符“static”static”定義的變量稱為靜態(tài)變量。定義的變量稱為靜態(tài)變量。665.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法n寄存器變量寄存器變量 (register)(register) 675.2 C515.2 C51程序設(shè)計(jì)的基本語法程序設(shè)計(jì)的基本語法685.3 5.3 函數(shù)函數(shù)函數(shù)的參數(shù)和局部變量的存儲器模式函數(shù)的參數(shù)和局部變量的存儲器模式 C51C51編譯器允許三種存儲器模式:編譯器允許三種存儲器模式:SMALLSMALL、COMPACTCOMPACT和和LARGELARGE。一個函數(shù)的存儲器模式確定了函數(shù)的參數(shù)和局部變量。一個函數(shù)的存儲器模式確定了函數(shù)的參數(shù)和局部變量在內(nèi)存中的地址空間。定義函數(shù)時可以明確指定該

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論