編程語(yǔ)言基礎(chǔ)知識(shí)案例_第1頁(yè)
編程語(yǔ)言基礎(chǔ)知識(shí)案例_第2頁(yè)
編程語(yǔ)言基礎(chǔ)知識(shí)案例_第3頁(yè)
編程語(yǔ)言基礎(chǔ)知識(shí)案例_第4頁(yè)
編程語(yǔ)言基礎(chǔ)知識(shí)案例_第5頁(yè)
已閱讀5頁(yè),還剩439頁(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)介

C10H10C編程語(yǔ)言C10H10C編程語(yǔ)言基礎(chǔ)知嵌入式C語(yǔ)言編程系作者Rob1?2009MicrochipTechnologyIncorporated.AllRights課程安第1天——在嵌入課程安第1天——在嵌入式環(huán)境中使用C注符號(hào)常2?2009MicrochipTechnologyIncorporated.AllRights課程安第1天——表課程安第1天——表達(dá)式和語(yǔ)函多文件項(xiàng)目和存儲(chǔ)類別說(shuō)3?2009MicrochipTechnologyIncorporated.AllRights課程安第2數(shù)課程安第2數(shù)枚使用#define4?2009MicrochipTechnologyIncorporated.AllRights在嵌入式環(huán)在嵌入式環(huán)境使用C5?2009MicrochipTechnologyIncorporated.AllRights關(guān)于C語(yǔ)言的事關(guān)于C語(yǔ)言的事用于多種MCU架構(gòu)的編譯器都支持C6?2009MicrochipTechnologyIncorporated.AllRights打破神真相讓你自由在不同打破神真相讓你自由在不同架構(gòu)或編譯器之間,C語(yǔ)言的移植性不象每個(gè)人所聲稱的那樣強(qiáng)ANSI語(yǔ)言特性是可移植特定于處理器的庫(kù)不可移I/O、中斷和特殊特定于處理器的代碼(外設(shè)能)不可移C語(yǔ)言程序的效率不如匯編語(yǔ)言程優(yōu)秀的匯編程序編程人員通常可以做得比編譯好,無(wú)論使用何種優(yōu)化級(jí)別語(yǔ)言程序?qū)?huì)用更多的存儲(chǔ)空間7?2009MicrochipTechnologyIncorporated.AllRights打破神真相讓你打破神真相讓你自由不存在自文檔化代碼這回事——雖然許多C言支持者會(huì)這么告訴使用C語(yǔ)言,可以寫(xiě)出極其令人困惑的代碼——只(w.icccr)就會(huì)了解……不是每一行代碼都需要注釋,但大部分代碼塊都應(yīng)進(jìn)行注釋因?yàn)橛性S多快捷方式可供使用,所以C語(yǔ)言對(duì)于新用戶并不總是那么友好——這就是需要注8?2009MicrochipTechnologyIncorporated.AllRights開(kāi)發(fā)工具數(shù)據(jù)C編譯C匯編源文(.asm或開(kāi)發(fā)工具數(shù)據(jù)C編譯C匯編源文(.asm或匯編匯編源文(.asm或目標(biāo)文可執(zhí)行文歸檔(庫(kù)管理器目標(biāo)文件(歸檔文件(.lib或鏈接存儲(chǔ)器映調(diào)試文鏈接描述文(.lkr或9?2009MicrochipTechnologyIncorporated.AllRights開(kāi)發(fā)工具數(shù)據(jù)C編譯預(yù)處開(kāi)發(fā)工具數(shù)據(jù)C編譯預(yù)處CC編譯匯編源文10?2009MicrochipTechnologyIncorporated.AllRightsC運(yùn)行時(shí)C編譯器設(shè)置運(yùn)C運(yùn)行時(shí)C編譯器設(shè)置運(yùn)行時(shí)環(huán)為堆棧分配空間初始化堆棧指針調(diào)用main()函數(shù)(代碼從這里開(kāi)始11?2009MicrochipTechnologyIncorporated.AllRightsC運(yùn)行時(shí)大部分PIC?C運(yùn)行時(shí)大部分PIC?MCU編譯器套件都會(huì)自動(dòng)將運(yùn)行通常來(lái)源于C30:crt0.s/crt0.o(crt=CRunTime)C18:c018.c/c018.o如果確實(shí)需要,用戶可進(jìn)行詳細(xì)信息將在特定于編譯器的課程中12?2009MicrochipTechnologyIncorporated.AllRightsC語(yǔ)言基礎(chǔ)一個(gè)簡(jiǎn)單的C示預(yù)處偽指C語(yǔ)言基礎(chǔ)一個(gè)簡(jiǎn)單的C示預(yù)處偽指頭文#include常量(文本替換宏#definePIint{floatradius,變量注//Calculatearearadius=函area=PI*radius*printf("Area=%f",}13?2009MicrochipTechnologyIncorporated.AllRights注注14?2009MicrochipTechnologyIncorporated.AllRights注定注釋用于描述程序的功能,并說(shuō)明特定代碼塊或代碼行執(zhí)行的操作。編譯器會(huì)忽略注釋,所以可以在其中輸入希望加入可以使用兩種注釋塊注注定注釋用于描述程序的功能,并說(shuō)明特定代碼塊或代碼行執(zhí)行的操作。編譯器會(huì)忽略注釋,所以可以在其中輸入希望加入可以使用兩種注釋塊注is單行注isalso15?2009MicrochipTechnologyIncorporated.AllRights注使用塊注塊注釋以/*開(kāi)始,注使用塊注塊注釋以/*開(kāi)始,以*/可以跨越多*Program:*R.#include/*Function:main()*/intmain(void){printf(“Hello,world!\n”);/*Display“Hello,world!”}16?2009MicrochipTechnologyIncorporated.AllRights注使用單行注釋以//開(kāi)始,直注使用單行注釋以//開(kāi)始,直至行不能跨越多//Program://R.#include//Function:main()intmain(void){}//Display“Hello,17?2009MicrochipTechnologyIncorporated.AllRights注嵌套塊注釋不能嵌套在其他定界注單行注注嵌套塊注釋不能嵌套在其他定界注單行注釋可以進(jìn)行嵌示例:?jiǎn)涡凶⑨屘幱诙ń鏲ode//a示例:定界注釋處于定界定界符不會(huì)按期望匹配aa…/*Comment/*Comment孤懸定界符會(huì)導(dǎo)致編譯錯(cuò)18?2009MicrochipTechnologyIncorporated.AllRights注最佳*Program:*R.#include注最佳*Program:*R.#include*Function:intmain(void){inti;char*p;Loopcounttoworld!\n”);}19?2009MicrochipTechnologyIncorporated.AllRights變量、標(biāo)識(shí)變量、標(biāo)識(shí)和數(shù)據(jù)類20?2009MicrochipTechnologyIncorporated.AllRights變量和數(shù)據(jù)類一個(gè)簡(jiǎn)單的C示#include#definePI變量和數(shù)據(jù)類一個(gè)簡(jiǎn)單的C示#include#definePI數(shù)類{變量;of=areaPI;使用的變printf("Area=%f",}21?2009MicrochipTechnologyIncorporated.AllRightsradius*radius,變定變量是用于保存程序數(shù)據(jù)的一個(gè)變定變量是用于保存程序數(shù)據(jù)的一個(gè)或多個(gè)存儲(chǔ)單元的指變量可以看作是一個(gè)容器,可保存程序中使用的數(shù)5=22?2009MicrochipTechnologyIncorporated.AllRights變數(shù)據(jù)存儲(chǔ)器0變數(shù)據(jù)存儲(chǔ)器023?2009MicrochipTechnologyIncorporated.AllRights×10-變變量聲明包含唯一標(biāo)識(shí)(名稱數(shù)據(jù)存儲(chǔ)器0變變量聲明包含唯一標(biāo)識(shí)(名稱數(shù)據(jù)存儲(chǔ)器024?2009MicrochipTechnologyIncorporated.AllRights×10-變…和數(shù)據(jù)類數(shù)據(jù)存儲(chǔ)器025?2009變…和數(shù)據(jù)類數(shù)據(jù)存儲(chǔ)器025?2009MicrochipTechnologyIncorporated.AllRights×10-標(biāo)識(shí)對(duì)程序元素的命名變量、函數(shù)、標(biāo)識(shí)對(duì)程序元素的命名變量、函數(shù)、數(shù)組和其他程序中標(biāo)識(shí)符的示#include#definePI{floatradius,//Calculatearearadius=area=PI*radius*printf("Area=%f",}26?2009MicrochipTechnologyIncorporated.AllRights標(biāo)識(shí)標(biāo)識(shí)符中的有效字符第一個(gè)字標(biāo)識(shí)標(biāo)識(shí)符中的有效字符第一個(gè)字“a”到區(qū)分大小寫(xiě)只有前31個(gè)字符有效“a”到“0”到27?2009MicrochipTechnologyIncorporated.AllRightsIdentifierANSIC關(guān)鍵ANSIC關(guān)鍵一些編譯器實(shí)現(xiàn)中可能定義了額外的關(guān)鍵28?2009MicrochipTechnologyIncorporated.AllRights數(shù)據(jù)類基本類說(shuō)位單個(gè)8整單精數(shù)據(jù)類基本類說(shuō)位單個(gè)8整單精雙精度浮點(diǎn)int的長(zhǎng)度因編譯器MPLAB?C30的int為16MPLABC18的int為16PCB、PCM和PCH的int為8HI-PICC?編譯器的int為1629?2009MicrochipTechnologyIncorporated.AllRights數(shù)據(jù)類型限定受修限定符:unsigned、signed、short和限定的類最小最大位08-80-0-02數(shù)據(jù)類型限定受修限定符:unsigned、signed、short和限定的類最小最大位08-80-0-0232--231-0264--263-30?2009MicrochipTechnologyIncorporated.AllRights數(shù)據(jù)類型限定受修飾的浮限定的類絕對(duì)最小絕對(duì)最大數(shù)據(jù)類型限定受修飾的浮限定的類絕對(duì)最小絕對(duì)最大位±~10-±±~10-±long±~10-± 如果使用–fno-short-doubledouble等價(jià)于long31?2009MicrochipTechnologyIncorporated.AllRights變?nèi)绾握Z(yǔ)變量必須先聲明變?nèi)绾握Z(yǔ)變量必須先聲明、后使示32?2009MicrochipTechnologyIncorporated.AllRights變?nèi)绾巫兞坑幸韵聨追N聲明方語(yǔ)一行包含一變?nèi)绾巫兞坑幸韵聨追N聲明方語(yǔ)一行包含一一行包含一個(gè)聲明,并帶=一行包含多個(gè)相同類型的一行包含多個(gè)相同類型的聲明,并帶有初始值identifier1Value1,=33?2009MicrochipTechnologyIncorporated.AllRights變?nèi)绾问緔===變?nèi)绾问緔=====gme34?2009MicrochipTechnologyIncorporated.AllRights變?nèi)绾斡袝r(shí),變量(以及其他程序變?nèi)绾斡袝r(shí),變量(以及其他程序元素)在稱為頭件的獨(dú)立文件中聲頭文件名稱習(xí)慣上以.h頭文件通過(guò)#include偽指與程序關(guān)35?2009MicrochipTechnologyIncorporated.AllRights#include偽指使用#include偽指令的三種方式#include偽指使用#include偽指令的三種方式語(yǔ)在編譯器搜索路徑中查找例如:C:\ProgramFiles\Microchip\MPLABC30\*.*僅在項(xiàng)目目錄中查使用特定路徑來(lái)查36?2009MicrochipTechnologyIncorporated.AllRights#include偽指main.h頭文件和main.c{===#include偽指main.h頭文件和main.c{===main.h的內(nèi)容實(shí)際上會(huì)被粘貼到main.c中,從}37?2009MicrochipTechnologyIncorporated.AllRights#include偽指等價(jià)的main.c在預(yù)處理程序運(yùn)行#include偽指等價(jià)的main.c在預(yù)處理程序運(yùn)行真正地被復(fù)制到主程們被復(fù)制到其{===}不含#include的等價(jià)main.c38?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課練習(xí)實(shí)驗(yàn)課練習(xí)變量和數(shù)據(jù)類39?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課變量和數(shù)據(jù)打?qū)嶒?yàn)課變量和數(shù)據(jù)打開(kāi)項(xiàng)目的工作區(qū)位于實(shí)驗(yàn)課PC打開(kāi)MPLAB?IDE,并從File菜單中選擇OpenWorkspace……。如果已經(jīng)在MPLAB中打開(kāi)了一個(gè)項(xiàng)目,請(qǐng)先通過(guò)從File菜單中選擇140?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課變量和數(shù)據(jù)編譯并運(yùn)行代碼Compile(Build3422單擊All(編譯實(shí)驗(yàn)課變量和數(shù)據(jù)編譯并運(yùn)行代碼Compile(Build3422單擊All(編譯全部)按鈕3單擊Run(運(yùn)行)4單擊Halt(暫停)41?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課變量和數(shù)據(jù)實(shí)驗(yàn)課變量和數(shù)據(jù)期望結(jié)果5SIMUart1窗口將顯示程序輸出的文本,以字節(jié)為單位42?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課變量和數(shù)據(jù)實(shí)驗(yàn)課變量和數(shù)據(jù)期望結(jié)果6Watch(觀察)窗口將顯示變量中存儲(chǔ)的值,并讓()中需要多少空間。43?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課變量和數(shù)據(jù)16位數(shù)據(jù)存儲(chǔ)存儲(chǔ)器中的變7實(shí)驗(yàn)課變量和數(shù)據(jù)16位數(shù)據(jù)存儲(chǔ)存儲(chǔ)器中的變744?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課變量和數(shù)據(jù)代碼執(zhí)行什么操作開(kāi)實(shí)驗(yàn)課變量和數(shù)據(jù)代碼執(zhí)行什么操作開(kāi)來(lái)自演示程序的示例代碼printf("\nAnintegervariablerequires%dbytes.",無(wú)限循45?2009MicrochipTechnologyIncorporated.AllRights打印變量長(zhǎng)intintVariable=初始化變聲明變聲明常實(shí)驗(yàn)課結(jié)變量必須先聲實(shí)驗(yàn)課結(jié)變量必須先聲明、后變量必須具有數(shù)據(jù)類16位架構(gòu)中的8位架構(gòu)中的char(如果int為16位46?2009MicrochipTechnologyIncorporated.AllRights字面常字面常47?2009MicrochipTechnologyIncorporated.AllRights一個(gè)簡(jiǎn)單的C字面示b2{一個(gè)簡(jiǎn)單的C字面示b2{==a+}48?2009MicrochipTechnologyIncorporated.AllRights字面常定字面值或字面常量是指可以賦給變量或常量的值(例如數(shù)字、字符或字符串)字面常定字面值或字面常量是指可以賦給變量或常量的值(例如數(shù)字、字符或字符串)。它也可以直接用作函數(shù)參數(shù)或表達(dá)式中的字面是“硬編碼”可以是數(shù)字、字符或字符總是表示相同值(5總是表示數(shù)量五49?2009MicrochipTechnologyIncorporated.AllRights常量與字面有何區(qū)別大多數(shù)編程文獻(xiàn)中都常量與字面有何區(qū)別大多數(shù)編程文獻(xiàn)中都互換使用這兩個(gè)字面值是常量,但常量不是字=就本演示課件而言常量指一些表示字面值的字面值指一些通常賦給符號(hào)常量和變量的50?2009MicrochipTechnologyIncorporated.AllRights字面常有4種基本的字面值類字面常有4種基本的字面值類型整型和浮點(diǎn)型是數(shù)值型常量不允許有逗號(hào)和空51?2009MicrochipTechnologyIncorporated.AllRights整型字面十進(jìn)制(基數(shù)不能以0開(kāi)頭(0整型字面十進(jìn)制(基數(shù)不能以0開(kāi)頭(0值本身除外不能包含小數(shù)有效的十進(jìn)制整型05無(wú)效的十進(jìn)制整型152?2009MicrochipTechnologyIncorporated.AllRights整型字面十六進(jìn)制(基數(shù)必須以0x或(即整型字面十六進(jìn)制(基數(shù)必須以0x或(即零-X)開(kāi)可包含數(shù)字0-9和A-F/a-有效的十六進(jìn)制整型無(wú)效的十六進(jìn)制整型53?2009MicrochipTechnologyIncorporated.AllRights整型字面八進(jìn)制(基數(shù)必須以0(零)開(kāi)整型字面八進(jìn)制(基數(shù)必須以0(零)開(kāi)可包含數(shù)字0-有效的八進(jìn)制整型0無(wú)效的八進(jìn)制整型雖然八進(jìn)制仍然屬于ANSI規(guī)范的一部分,但幾乎沒(méi)有人再使用它54?2009MicrochipTechnologyIncorporated.AllRights整型字面二進(jìn)制(基數(shù)必須以0b或0B(整型字面二進(jìn)制(基數(shù)必須以0b或0B(即零-b)開(kāi)可包含數(shù)字0和有效的二進(jìn)制整型無(wú)效的二進(jìn)制整型ANSIC規(guī)范未規(guī)定二進(jìn)制整型字面值的格式。55?2009MicrochipTechnologyIncorporated.AllRights整型字面限定與變量一樣整型字面限定與變量一樣,可以對(duì)字面值進(jìn)行“L”或“l(fā)”表示長(zhǎng)整型“F”或“f”表示單精度浮點(diǎn)型:10f或后綴可以進(jìn)行組合注:U必須在L的前無(wú)后綴數(shù)字會(huì)被認(rèn)定為有符號(hào)短56?2009MicrochipTechnologyIncorporated.AllRights浮點(diǎn)字面十進(jìn)制(基數(shù)與十進(jìn)制整型浮點(diǎn)字面十進(jìn)制(基數(shù)與十進(jìn)制整型字面值一樣,但允許數(shù)使用“e”表示法來(lái)指定指(ke±n有效的浮點(diǎn)字面值無(wú)效的浮點(diǎn)字面值57?2009MicrochipTechnologyIncorporated.AllRights字符字面在單引號(hào)(')中字符字面在單引號(hào)(')中指可包含單個(gè)任意可打印個(gè)任意非打印字符(例如'\0=NULL)有效字符:'a'、'T'、'\n'、'5'、'@'''(空格無(wú)效字符:'me'、'23'、58?2009MicrochipTechnologyIncorporated.AllRights字符串字面在雙引號(hào)(")字符串字面在雙引號(hào)(")中指通常使用空字符“\0”終"Hesaid,\"Hi\""無(wú)效的字符串59?2009MicrochipTechnologyIncorporated.AllRights字符串字面聲字符串是數(shù)組的特字符串字面聲字符串是數(shù)組的特示例1——示例2——==存儲(chǔ)為存儲(chǔ)為=======非完整字符串——末尾沒(méi)有60?2009MicrochipTechnologyIncorporated.AllRights字符串字面如何在字符串中包含特殊轉(zhuǎn)義字ASCII7響鈴(報(bào)警8退格9水平制表字符串字面如何在字符串中包含特殊轉(zhuǎn)義字ASCII7響鈴(報(bào)警8退格9水平制表?yè)Q行垂直制表分頁(yè)回車雙引號(hào)撇號(hào)/單引號(hào)問(wèn)號(hào)反斜杠0空字61?2009MicrochipTechnologyIncorporated.AllRights字符串字面如何在字符串中包含特殊字符串字面如何在字符串中包含特殊示=a該字符串中包含了一個(gè)換62?2009MicrochipTechnologyIncorporated.AllRights符號(hào)常符號(hào)常63?2009MicrochipTechnologyIncorporated.AllRights符號(hào)常定常量或符號(hào)常量是代表一個(gè)字面值的標(biāo)簽。在代碼任意位置符號(hào)常定常量或符號(hào)常量是代表一個(gè)字面值的標(biāo)簽。在代碼任意位置常可變常量64?2009MicrochipTechnologyIncorporated.AllRights符號(hào)常使用const聲明常量變一些C符號(hào)常使用const聲明常量變一些C語(yǔ)言教科書(shū)用以下方式聲明常示=器中分配了一個(gè)變量,但由于使用了const鍵字,它的值無(wú)法更改這不是極大多數(shù)情況下,對(duì)于常量最好使用65?2009MicrochipTechnologyIncorporated.AllRights符號(hào)常使用#define定義文本替定義文本替換標(biāo)語(yǔ)符號(hào)常使用#define定義文本替定義文本替換標(biāo)語(yǔ)預(yù)處理程序會(huì)將出現(xiàn)的每一處label替換為串內(nèi)部的label,處于字示2*66?2009MicrochipTechnologyIncorporated.AllRights符號(hào)常#define注:除非要將分號(hào)(;)作為文本符號(hào)常#define注:除非要將分號(hào)(;)作為文本替換內(nèi)容的示c=+c=+67?2009MicrochipTechnologyIncorporated.AllRights符號(hào)常在聲明時(shí)初在聲明全局或靜態(tài)變量時(shí),不能符號(hào)常在聲明時(shí)初在聲明全局或靜態(tài)變量時(shí),不能使用const聲明的常量對(duì)其進(jìn)行初始化(用于初始化局部變量)示5===68?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課練習(xí)實(shí)驗(yàn)課練習(xí)69?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課符號(hào)打開(kāi)項(xiàng)目實(shí)驗(yàn)課符號(hào)打開(kāi)項(xiàng)目的工作區(qū)位于實(shí)驗(yàn)課PC打開(kāi)MPLAB?IDE,并從File菜單中選擇OpenWorkspace…。如果已經(jīng)在MPLAB中打開(kāi)了一個(gè)項(xiàng)目,請(qǐng)先通過(guò)從File菜單中選擇170?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課符號(hào)編譯并運(yùn)行代碼Compile(Build3422單擊All(編譯全部)實(shí)驗(yàn)課符號(hào)編譯并運(yùn)行代碼Compile(Build3422單擊All(編譯全部)按鈕3單擊Run(運(yùn)行)4單擊Halt(暫停)71?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課符號(hào)期望結(jié)果實(shí)驗(yàn)課符號(hào)期望結(jié)果5Uart172?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課符號(hào)期望結(jié)果實(shí)驗(yàn)課符號(hào)期望結(jié)果沒(méi)有地CONSTANT2具程序存儲(chǔ)地址)6Watch窗口將顯示在代碼中聲明的兩個(gè)符號(hào)常量。CONSTANT1使用#define聲明,所以不占用任何存儲(chǔ)空間。CONSTANT2使用const聲明,在閃存程存73?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課符號(hào)期望結(jié)實(shí)驗(yàn)課符號(hào)期望結(jié)果7如果查看程序存儲(chǔ)器窗口,可以發(fā)現(xiàn)使用const創(chuàng)建的位于地址0x011D0處(如前面的窗口中所示)。74?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課符號(hào)期望結(jié)果程序存儲(chǔ)器中的外部符實(shí)驗(yàn)課符號(hào)期望結(jié)果程序存儲(chǔ)器中的外部符號(hào)(按名稱排列CONSTANT1未出現(xiàn)在映射文件中的任何8如果打開(kāi)映射文件(在lab02項(xiàng)目目錄中),可以看到為CONSTANT2在地址0x011D0處分配了存儲(chǔ)空間,但75?2009MicrochipTechnologyIncorporated.AllRights 實(shí)驗(yàn)課結(jié)使用常量實(shí)驗(yàn)課結(jié)使用常量可提高代碼可76?2009MicrochipTechnologyIncorporated.AllRightsprintf()printf()77?2009MicrochipTechnologyIncorporated.AllRights標(biāo)準(zhǔn)庫(kù)函用于將文標(biāo)準(zhǔn)庫(kù)函用于將文本寫(xiě)入到“標(biāo)準(zhǔn)輸出在嵌入式系統(tǒng)中通常是MPLAB?IDESIM中的SIMUart178?2009MicrochipTechnologyIncorporated.AllRights標(biāo)準(zhǔn)庫(kù)函語(yǔ)原封不動(dòng)地打印字符串中除之外的所有內(nèi)容,會(huì)被替換為來(lái)自列表中的參數(shù)值示a=標(biāo)準(zhǔn)庫(kù)函語(yǔ)原封不動(dòng)地打印字符串中除之外的所有內(nèi)容,會(huì)被替換為來(lái)自列表中的參數(shù)值示a=b=結(jié)果==注:%d中的“d”是轉(zhuǎn)換字符(詳細(xì)信息參見(jiàn)下一張幻燈片79?2009MicrochipTechnologyIncorporated.AllRightsa=b=控制字符串的轉(zhuǎn)換含轉(zhuǎn)換字符串(直到“\0”之前的所有控制字符串的轉(zhuǎn)換含轉(zhuǎn)換字符串(直到“\0”之前的所有字符有符號(hào)十進(jìn)制無(wú)符號(hào)八進(jìn)制無(wú)符號(hào)十進(jìn)制使用小寫(xiě)數(shù)字的無(wú)符號(hào)十六進(jìn)制整型同x,但使用大寫(xiě)數(shù)字(例有符號(hào)小數(shù)值(浮點(diǎn)型具有指數(shù)的有符號(hào)小數(shù)值(例如,1.26e-同e,但使用E來(lái)表示指數(shù)(例如,1.26E-同e或f,但依賴于值的長(zhǎng)度同g,但使用E來(lái)表示指80?2009MicrochipTechnologyIncorporated.AllRights陷所顯示的值完全根據(jù)格式化字符串進(jìn)行陷所顯示的值完全根據(jù)格式化字符串進(jìn)行解printf("ASCII=將輸出會(huì)出現(xiàn)問(wèn)題的字符串printf("Value=將輸出如果格式類型與參數(shù)的實(shí)際數(shù)據(jù)類型不匹配,則可能會(huì)顯示錯(cuò)誤的結(jié)果81?2009MicrochipTechnologyIncorporated.AllRights對(duì)于調(diào)試很有用的格式字打印16位十對(duì)于調(diào)試很有用的格式字打印16位十六進(jìn)制值,打印時(shí)帶有“0x”x=#指定十六進(jìn)制值前面應(yīng)有0x或0X(對(duì)于不同的轉(zhuǎn)換字符具有其他含義06指定必須輸出6個(gè)字符(包括0x前綴),并根據(jù)需要在左側(cè)填充指定輸出值應(yīng)表示為十六x82?2009MicrochipTechnologyIncorporated.AllRights對(duì)于調(diào)試很有用的格式字與前對(duì)于調(diào)試很有用的格式字與前面相同,但強(qiáng)制十六進(jìn)制字母使用大寫(xiě)式,而“0x”中的“x”保持小寫(xiě)x=04指定必須輸出4個(gè)字符(不再包含0x前綴,因?yàn)樽址忻鞔_包含了該前X指定輸出值應(yīng)表示為使用大寫(xiě)A-F83?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課練習(xí)實(shí)驗(yàn)課練習(xí)printf()庫(kù)函84?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課printf()庫(kù)函打開(kāi)實(shí)驗(yàn)課printf()庫(kù)函打開(kāi)項(xiàng)目的工作區(qū)位于實(shí)驗(yàn)課PC 打開(kāi)MPLAB?IDE,并從File菜單中選擇OpenWorkspace……。如果已經(jīng)在MPLAB中打開(kāi)了一個(gè)項(xiàng)目,請(qǐng)先通過(guò)從File菜單中選擇85?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課printf()庫(kù)函編譯并運(yùn)實(shí)驗(yàn)課printf()庫(kù)函編譯并運(yùn)行代碼位于實(shí)驗(yàn)課PC打開(kāi)MPLAB?IDE,并從File菜單中選擇OpenWorkspace…。如果已經(jīng)在MPLAB中打開(kāi)了一個(gè)項(xiàng)目,請(qǐng)先通過(guò)從File菜單中選擇186?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課printf()庫(kù)函期望結(jié)實(shí)驗(yàn)課printf()庫(kù)函期望結(jié)果5Uart1窗口將顯示程序通過(guò)printf()輸出的文本說(shuō)明這些值是如何根據(jù)控制字符串中使用的格式化字符進(jìn)行打印的。87?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課printf()庫(kù)函期望結(jié)果詳細(xì)分析輸printf實(shí)驗(yàn)課printf()庫(kù)函期望結(jié)果詳細(xì)分析輸printf("'a'asdecimal(d):%d\n",character(c):%c\n",printf("'a'asdecimal(d):%d\n",printf("2.55asfloat(f):%f\n",2.55);printf("2.55asdecimal(d):%d\n",2.55);printf("6.02e23asexponent(e):%e\n",6.02e23);printf("6.02e23asdecimal(d):%d\n",6.02e23);printf("'Microchip'asstringprintf("'Microchip'asdecimal88?2009MicrochipTechnologyIncorporated.AllRights-a實(shí)驗(yàn)課結(jié)printf()在嵌入式應(yīng)用實(shí)驗(yàn)課結(jié)printf()在嵌入式應(yīng)用本身中的用途它作為調(diào)試工具非常配置堆(在包含stdio.h頭文IDE中完成89?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算運(yùn)算90?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算如何為算術(shù)表達(dá)式定運(yùn)算如何為算術(shù)表達(dá)式定算術(shù)表達(dá)式是包含一個(gè)或多個(gè)操作數(shù)和算術(shù)運(yùn)算符的表達(dá)式操作數(shù)可以是變量、常量或返回某個(gè)值的單片機(jī)寄存器通常視為變共有9個(gè)算術(shù)運(yùn)算符可供使二元運(yùn)算符:+、-、*、/和一元運(yùn)算符:+、-、++和91?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算算運(yùn)算運(yùn)示結(jié)乘*x*yx和y的乘/x/y除x和y的取%x%yx除以y+運(yùn)算算運(yùn)算運(yùn)示結(jié)乘*x*yx和y的乘/x/y除x和y的取%x%yx除以y+x+y加x和y的減-x-yx和y的+(一元取x的取-(一元-x注——int除以int會(huì)返回int:10/3=3使用取模運(yùn)算可獲10%3=92?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算除法運(yùn)算如果兩個(gè)操作數(shù)都是整型,則結(jié)果將為整型(int運(yùn)算除法運(yùn)算如果兩個(gè)操作數(shù)都是整型,則結(jié)果將為整型(int示例:浮點(diǎn)示例:整型==/a=/=c=ac=a93?2009MicrochipTechnologyIncorporated.AllRightsc= 因?yàn)椋篺loatintc=2.000000因?yàn)椋篿ntint運(yùn)算隱式運(yùn)算隱式示x=y*=z=xx在運(yùn)算期間,長(zhǎng)度較短的數(shù)據(jù)類型會(huì)被提升為表達(dá)式中最長(zhǎng)的數(shù)據(jù)類型94?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算隱式算術(shù)類型轉(zhuǎn)換longunsignedlonglonglongunsignedunsignedunsignedunsigned95?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算隱式算術(shù)類型轉(zhuǎn)換longunsignedlonglonglongunsignedunsignedunsignedunsigned95?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算算術(shù)表達(dá)式隱式類隱式類型轉(zhuǎn)換示假設(shè)x表達(dá)x=隱式運(yùn)算算術(shù)表達(dá)式隱式類隱式類型轉(zhuǎn)換示假設(shè)x表達(dá)x=隱式表達(dá)結(jié)x被提升為-5x被提升為long-2L的類型為x*-x被提升為-x被提升為3-96?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算取模運(yùn)算符(%)的應(yīng)截取:運(yùn)算取模運(yùn)算符(%)的應(yīng)截取:x%2n,其中n代表所需的字寬(例如8代表位%僅返回x低n位的可用于將任意基數(shù)的數(shù)值分解為各個(gè)位上的數(shù)示#defineMAX_DIGITS6longnumber=123456;inti,radix=10;charfor(i=0;i<MAX_DIGITS;{if(number==0)digits[i]=(char)(number%radix);number/=radix;}97?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算算術(shù):遞增運(yùn)算運(yùn)示結(jié)使用x,然后將x遞增將x遞增1,然后運(yùn)算算術(shù):遞增運(yùn)算運(yùn)示結(jié)使用x,然后將x遞增將x遞增1,然后使用遞x---使用x,然后將x遞減將x遞減1,然后使用遞-后綴前綴====++==6==698?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算如何為賦值語(yǔ)句編定賦值語(yǔ)句是將某個(gè)運(yùn)算如何為賦值語(yǔ)句編定賦值語(yǔ)句是將某個(gè)值賦給變量的語(yǔ)句有兩種類型的賦值語(yǔ)簡(jiǎn)單賦=先對(duì)表達(dá)式求值,然后將結(jié)果賦給變復(fù)合賦=在=兩側(cè)都出現(xiàn)變99?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算賦運(yùn)算運(yùn)示結(jié)=賦x=將y的值賦給xyx=x+y-x-yx=x-yxyx=x*yxyx=x/yxyx=x%y復(fù)賦xyx=x&yxyx=x^yxyx=x|yx<<=x=x運(yùn)算賦運(yùn)算運(yùn)示結(jié)=賦x=將y的值賦給xyx=x+y-x-yx=x-yxyx=x*yxyx=x/yxyx=x%y復(fù)賦xyx=x&yxyx=x^yxyx=x|yx<<=x=xyx>>=x=xy100?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算復(fù)合在等號(hào)兩側(cè)具有同一變量的語(yǔ)示x=x運(yùn)算復(fù)合在等號(hào)兩側(cè)具有同一變量的語(yǔ)示x=x該運(yùn)算可視為:x的新值將設(shè)置為等于x當(dāng)前值加y可以使用快捷賦值運(yùn)算符(復(fù)合賦值示xxy101?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算復(fù)合示x=x2x=x*5執(zhí)行語(yǔ)句前:x運(yùn)算復(fù)合示x=x2x=x*5執(zhí)行語(yǔ)句前:x=執(zhí)行語(yǔ)句后:x=x===x**等價(jià)先對(duì)右側(cè)求值:x將結(jié)果賦給102?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算關(guān)運(yùn)算運(yùn)示結(jié)果(FALSE0,TRUE小<x<y如果x小于y為1,否則為運(yùn)算關(guān)運(yùn)算運(yùn)示結(jié)果(FALSE0,TRUE小<x<y如果x小于y為1,否則為x<=大>x>如果x大于y為1,否則為為0xy等xy如果x等于y為1,否則為xy如果x不等于y為1,否則為不等在條件表達(dá)式中,所有非零值都解釋為T(mén)RUE0值始終為FALSE103?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算=與==的區(qū)請(qǐng)注意不要混淆=和==運(yùn)算=與==的區(qū)請(qǐng)注意不要混淆=和==它們不可互換=是賦值運(yùn)算x=5表示將值5賦給變量==是“等于”關(guān)系運(yùn)x==5用于測(cè)試x的值是否是{}doifvalueofxis104?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算=與==的區(qū)執(zhí)行以下代碼后會(huì)發(fā)生什么情示運(yùn)算=與==的區(qū)執(zhí)行以下代碼后會(huì)發(fā)生什么情示{{x==xx}}105?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算邏運(yùn)算運(yùn)示結(jié)果(FALSE0,TRUE邏輯與運(yùn)算邏運(yùn)算運(yùn)示結(jié)果(FALSE0,TRUE邏輯與xy邏輯或xy邏輯非!1,如果x0;否則為在條件表達(dá)式中,所有非零值都解釋為T(mén)RUE0值始終為FALSE106?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算按位運(yùn)算運(yùn)示結(jié)果(對(duì)于每個(gè)位單元1,如果x和y均為運(yùn)算按位運(yùn)算運(yùn)示結(jié)果(對(duì)于每個(gè)位單元1,如果x和y均為0,如果x或y為0或均為&x&y按位與1,如果x或y為1或均為0,如果x和y均為|x|y按位或1,如果x和y不同時(shí)為1或0,如果x和y同時(shí)為1或^按位異或(XORx^y1,如果x為0,如果x為按位非(二進(jìn)制反碼~該運(yùn)算對(duì)第一個(gè)操作數(shù)的每個(gè)位和第二個(gè)操作數(shù)的每個(gè)對(duì)應(yīng)位之間進(jìn)行操作107?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算&與&&的區(qū)請(qǐng)注意不要混淆&和&&它們運(yùn)算&與&&的區(qū)請(qǐng)注意不要混淆&和&&它們不可互換&是按位與運(yùn)算0b1010&&&是邏輯與運(yùn)算0b1010&&<Non-ZeroValue>&&<Non-ZeroValue>1{}doifxandyarebothTRUE(non-108?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算&與&&的區(qū)執(zhí)行以下每個(gè)代碼片段之后會(huì)發(fā)生什示運(yùn)算&與&&的區(qū)執(zhí)行以下每個(gè)代碼片段之后會(huì)發(fā)生什示例1——使用按位與運(yùn)算==&示例2——使用邏輯與運(yùn)算==109?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算邏輯運(yùn)算符和短路在知道結(jié)果為T(mén)RUE或FAL運(yùn)算邏輯運(yùn)算符和短路在知道結(jié)果為T(mén)RUE或FALSE時(shí),邏輯運(yùn)算中的表達(dá)式求值會(huì)立即停止示如果在某個(gè)邏輯與運(yùn)算中需要測(cè)試兩個(gè)表達(dá)式從左向右求值。如果1為(LSE),則根本不會(huì)對(duì)求值,因?yàn)橐呀?jīng)知道最終結(jié)果為fe。與(&&)運(yùn)算的真值FALSE=TRUE=110?2009MicrochipTechnologyIncorporated.AllRights 結(jié) XX運(yùn)算邏輯運(yùn)算符和短路短路求值的危示如果z=0,運(yùn)算邏輯運(yùn)算符和短路短路求值的危示如果z=0,則不會(huì)對(duì)c{=x+=a+c的初始值可能不}在C代碼中以這種方式邏輯比較兩個(gè)賦值表達(dá)式是完全合法的,雖然這通常不的編程做法。在邏輯運(yùn)算中使用函數(shù)調(diào)用時(shí)(這是非常常見(jiàn)的做法)也存在類似問(wèn)題,有可能永遠(yuǎn)也不會(huì)對(duì)第二個(gè)函數(shù)求值。111?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算移運(yùn)算運(yùn)示結(jié)左xy將x左移yxy右將x右移y運(yùn)算移運(yùn)算運(yùn)示結(jié)左xy將x左移yxy右將x右移y左移示例==x====5在左移和右移運(yùn)算中,移出的位都會(huì)對(duì)于左移,會(huì)移入0(填112?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算移位——特殊邏輯右移(填如果x為無(wú)符號(hào)(在此例中為==x運(yùn)算移位——特殊邏輯右移(填如果x為無(wú)符號(hào)(在此例中為==xy==x算術(shù)右移(符號(hào)擴(kuò)展如果x為有符號(hào)(在此例中為======--x113?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算2次冪整型y=運(yùn)算2次冪整型y=x>>y=x/右對(duì)于整型或定點(diǎn)值有114?2009MicrochipTechnologyIncorporated.AllRights0000010100001010運(yùn)算C30中的2次冪整型除與示例:除以示例:右移1==y=運(yùn)算C30中的2次冪整型除與示例:除以示例:右移1==y=/yy=y=y=x/2;y=x>>mov.w0x0800,0x0000115?2009MicrochipTechnologyIncorporated.AllRights0028C repeat0028E div.sw運(yùn)算C18中的2次冪整型除與示例:除以示例:右移1==y=/運(yùn)算C18中的2次冪整型除與示例:除以示例:右移1==y=/y=xy=y=xy=y=/2;0x8c,0x8d,00xd,BCFCLRF0xe,0x8a,0x8b,0x8,0x9,116?2009MicrochipTechnologyIncorporated.AllRights8位架構(gòu)上的16 CALL0xd6,運(yùn)算存儲(chǔ)器尋運(yùn)算運(yùn)示結(jié)取地&指向x的指p指運(yùn)算存儲(chǔ)器尋運(yùn)算運(yùn)示結(jié)取地&指向x的指p指向的對(duì)象或函*數(shù)組x的第y個(gè)元.-構(gòu)體/共用體成p-117?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算其運(yùn)算運(yùn)示結(jié)運(yùn)算其運(yùn)算運(yùn)示結(jié)xx在存儲(chǔ)器中占用的字x將x的值轉(zhuǎn)換為指定類x?:z條件表,x,118?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算條件運(yùn)算語(yǔ)?:示x=%2運(yùn)算條件運(yùn)算語(yǔ)?:示x=%2?:119?2009MicrochipTechnologyIncorporated.AllRights5is運(yùn)算條件運(yùn)算條件運(yùn)算符可以用于根據(jù)條件為變量示運(yùn)算條件運(yùn)算條件運(yùn)算符可以用于根據(jù)條件為變量示例1(最常使用x=?a:示例2(不常使用?==在兩種情形中=a,如果條件為xb,如果條件為120?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算顯式強(qiáng)制類型轉(zhuǎn)換在前面,我們將一個(gè)字面值強(qiáng)制轉(zhuǎn)換為float型,方法是使用以下形式輸入它的值:f運(yùn)算顯式強(qiáng)制類型轉(zhuǎn)換在前面,我們將一個(gè)字面值強(qiáng)制轉(zhuǎn)換為float型,方法是使用以下形式輸入它的值:f示例:整型示例:浮點(diǎn)x=/x=y=xy=/121?2009MicrochipTechnologyIncorporated.AllRightsy= 因?yàn)椋篺loatinty=2.000000因?yàn)椋篿ntint運(yùn)算優(yōu)先運(yùn)算說(shuō)結(jié)合([運(yùn)算優(yōu)先運(yùn)算說(shuō)結(jié)合([.-+!--~一元+和–(正號(hào)和負(fù)號(hào)解引用(指針下一張幻燈片繼續(xù)122?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算優(yōu)先運(yùn)算說(shuō)結(jié)合*/+-<>&^|運(yùn)算優(yōu)先運(yùn)算說(shuō)結(jié)合*/+-<>&^|下一張幻燈片繼續(xù)123?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算優(yōu)先運(yùn)算說(shuō)結(jié)合=+=運(yùn)算優(yōu)先運(yùn)算說(shuō)結(jié)合=+=-/=<<=&=,列在同一區(qū)域中的運(yùn)算符具有相同的優(yōu)先級(jí)—同一區(qū)域中的沖突按照結(jié)合律進(jìn)行124?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算優(yōu)先表達(dá)實(shí)運(yùn)算優(yōu)先表達(dá)實(shí)際aa+–b*caa+–*++a*ca*例如,xf無(wú)法知道是先對(duì)f()還是g()進(jìn)行求值125?2009MicrochipTechnologyIncorporated.AllRights運(yùn)算結(jié)合如果兩個(gè)運(yùn)算符的優(yōu)先級(jí)相同,則它們的結(jié)合律決定求值順序表達(dá)結(jié)合實(shí)際xx/=yy%=zzx/運(yùn)算結(jié)合如果兩個(gè)運(yùn)算符的優(yōu)先級(jí)相同,則它們的結(jié)合律決定求值順序表達(dá)結(jié)合實(shí)際xx/=yy%=zzx/%z==您可以依賴于這些結(jié)合律,但好的編程做法是明確地組合表達(dá)式的元素126?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課練習(xí)實(shí)驗(yàn)課練習(xí)運(yùn)算127?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課運(yùn)算打開(kāi)項(xiàng)目實(shí)驗(yàn)課運(yùn)算打開(kāi)項(xiàng)目的工作區(qū)位于實(shí)驗(yàn)課PC打開(kāi)MPLAB?IDE,并從File菜單中選擇OpenWorkspace……。如果已經(jīng)在MPLAB中打開(kāi)了一個(gè)項(xiàng)目,請(qǐng)先通過(guò)從File菜單中選擇1128?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課運(yùn)算解決方案:步驟1和AddcharVariable1tocharVariable2andstorethe實(shí)驗(yàn)課運(yùn)算解決方案:步驟1和AddcharVariable1tocharVariable2andstoretheresultThismaybedoneintwoOneusesordinaryadditionoperator,theotherusesacompoundWritetwolinesofcodetoperformthistwice-onceforeachofthetwoDon'tforgettoendeachstatementwithasemi-//AddusingadditioncharVariable1=charVariable1+//AddusingcompoundassignmentcharVariable1+=#STEP2:IncrementThereareseveralwaysthiscouldUsetheonethatrequirestheleastamountof//Increment129?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課運(yùn)算解決方案:步驟3和Usetheconditionaloperator實(shí)驗(yàn)課運(yùn)算解決方案:步驟3和UsetheconditionaloperatortosetlongVariable1equalintVariable1ifcharVariable1islessOtherwise,setlongVariable1equaltoThecommentsbelowarebrokenupintothancharVariable2.3lines,butthecodeneedtowritecanfitonasingle//IfcharVariable1<charVariable2,longVariable1=intVariable1,=(charVariable1<charVariable2)?intVariable1:#STEP4:ShiftlongVariable2onebittotheright.Thiscanbe#mosteasilyusingtheappropriatecompoundassignment//ShiftlongVariable2onebittothelongVariable2>>=130?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課運(yùn)算解決方案:步驟Performtheoperation實(shí)驗(yàn)課運(yùn)算解決方案:步驟Performtheoperation(longVariable2AND0x30)andstoretheresultbackinlongVariable2.Onceagain,theeasiestwaytodothisistousetheappropriatecompoundassignmentoperatorthatwillperformanequivalentoperationtotheoneinthecommentbelow.//longVariable2=&131?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課結(jié)大多實(shí)驗(yàn)課結(jié)大多數(shù)運(yùn)算符與普通的數(shù)學(xué)表示法非常132?2009MicrochipTechnologyIncorporated.AllRights表達(dá)式和語(yǔ)表達(dá)式和語(yǔ)133?2009MicrochipTechnologyIncorporated.AllRights表達(dá)表示單個(gè)數(shù)據(jù)表達(dá)表示單個(gè)數(shù)據(jù)項(xiàng)(例如,字符和數(shù)字等可由以下對(duì)象組成單個(gè)實(shí)體(常量和變量等使用運(yùn)算符(+、-、*和/等)連接的實(shí)體的組134?2009MicrochipTechnologyIncorporated.AllRights表達(dá)示示ax+=by=x=表達(dá)示示ax+=by=x=d=a+5135?2009MicrochipTechnologyIncorporated.AllRights語(yǔ)使程序執(zhí)行某個(gè)操語(yǔ)使程序執(zhí)行某個(gè)操C語(yǔ)言中有三種語(yǔ)表達(dá)式語(yǔ)控制語(yǔ)136?2009MicrochipTechnologyIncorporated.AllRights表達(dá)式語(yǔ)表達(dá)式后面跟隨一個(gè)執(zhí)行表達(dá)式會(huì)使程表達(dá)式語(yǔ)表達(dá)式后面跟隨一個(gè)執(zhí)行表達(dá)式會(huì)使程序?qū)Ρ磉_(dá)式示i===5+*+=;137?2009MicrochipTechnologyIncorporated.AllRights復(fù)合語(yǔ)由包含在一對(duì)復(fù)合語(yǔ)由包含在一對(duì)花括號(hào){與}中的一組單獨(dú)語(yǔ)組允許在語(yǔ)句中嵌入其他語(yǔ)138?2009MicrochipTechnologyIncorporated.AllRights復(fù)合語(yǔ)示示{===–=復(fù)合語(yǔ)示示{===–==/=}139?2009MicrochipTechnologyIncorporated.AllRights控制語(yǔ)用于循環(huán)、跳轉(zhuǎn)和邏輯其中通常需要控制語(yǔ)用于循環(huán)、跳轉(zhuǎn)和邏輯其中通常需要嵌入其他示{<}(while語(yǔ)法140?2009MicrochipTechnologyIncorporated.AllRights條件判條件判141?2009MicrochipTechnologyIncorporated.AllRights布爾表達(dá)C語(yǔ)言沒(méi)有布爾數(shù)據(jù)類布爾表達(dá)式會(huì)返回整如果表達(dá)布爾表達(dá)C語(yǔ)言沒(méi)有布爾數(shù)據(jù)類布爾表達(dá)式會(huì)返回整如果表達(dá)式求得的值為FALSE,則返回{x=y=z=y=>z=>while}142?2009MicrochipTechnologyIncorporated.AllRights布爾表達(dá)等價(jià)表達(dá)布爾表達(dá)等價(jià)表達(dá)(MyVar這等同于編寫(xiě)或兩種情況下,如果MyVar≠0或Foo()≠0表達(dá)式求得的值為T(mén)RUE(非零143?2009MicrochipTechnologyIncorporated.AllRightsif語(yǔ)對(duì)expression求布爾值TRUEif語(yǔ)對(duì)expression求布爾值TRUE(≠0)如果為T(mén)RUE,則執(zhí)行注每次在語(yǔ)法指南中看到時(shí),可以將它替換為復(fù)合(塊)語(yǔ)請(qǐng)記住:空格和換行符無(wú)關(guān)緊144?2009MicrochipTechnologyIncorporated.AllRightsif{}if流程語(yǔ)if流程語(yǔ)145?2009MicrochipTechnologyIncorporated.AllRightsif示{x={如果x為T(mén)RUE(非零if示{x={如果x為T(mén)RUE(非零=……則打印x的值}}如果x5,會(huì)打印什么內(nèi)容?……如果x0……如果x82……如果x65536146?2009MicrochipTechnologyIncorporated.AllRightsif測(cè)試是否為(x)與(x)只需測(cè)試是否不等于==1)需要測(cè)試是否等于請(qǐng)記住:if測(cè)試是否為(x)與(x)只需測(cè)試是否不等于==1)需要測(cè)試是否等于請(qǐng)記住:TRUE定義為非零,而FALSE示例:if示例:ifxif(xifcp0.w0x08c2braz,0x0011c0branz,148?2009MicrochipTechnologyIncorporated.AllRights嵌套if149嵌套if149?2009MicrochipTechnologyIncorporated.AllRights示intpower=10;floatband=2.0;floatfrequency=if(power>{if(band=={if((frequency>144)&&(frequency<{printf("Yes,it'sall}}}if-else對(duì)expression求布爾值TRUE(≠0if-else對(duì)expression求布爾值TRUE(≠0)150?2009MicrochipTechnologyIncorporated.AllRights語(yǔ)if(expression)elseif-else流程if-else流程151?2009MicrochipTechnologyIncorporated.AllRights語(yǔ)if(expression)elseif-else示{=><{2}{if-else示{=><{2}{2}}152?2009MicrochipTechnologyIncorporated.AllRightsif-elseif對(duì)expression1求布爾值TRUE(if-elseif對(duì)expression1求布爾值TRUE(≠0)或如果為T(mén)RUE,則執(zhí)行如果為FALSE,則執(zhí)行153?2009MicrochipTechnologyIncorporated.AllRights語(yǔ)if(expression1)elseif(expression2)elseif-elseif流程?2009MicrochipTechnologyif-elseif流程?2009MicrochipTechnologyIncorporated.AllRights154語(yǔ)if(expression1)elseif(expression2)elseif155if155?2009MicrochipTechnologyIncorporated.AllRights示if((freq>144)&&(freq<148))printf("You'reonthe2meterband\n");elseif((freq>222)&&(freq<225))printf("You'reonthe1.25meterband\n");elseif((freq>420)&&(freq<450))printf("You'reonthe70centimeterband\n");printf("You'resomewhere實(shí)驗(yàn)課練習(xí)實(shí)驗(yàn)課練習(xí)條件判定:if156?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課條件判定實(shí)驗(yàn)課條件判定打開(kāi)項(xiàng)目的工作區(qū)位于實(shí)驗(yàn)課PC 打開(kāi)MPLAB?IDE,并從File菜單中選擇OpenWorkspace……。如果已經(jīng)在MPLAB中打開(kāi)了一個(gè)項(xiàng)目,請(qǐng)先通過(guò)從File菜單中選擇157?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課條件判定解決方案:步驟1和Increment實(shí)驗(yàn)課條件判定解決方案:步驟1和IncrementintVariable1ifBOTHthefollowingconditionsarefloatVariable2isgreaterthanorequaltocharVariable2isgreaterthanorequaltocharVariable1Remembertouseparenthesestogrouplogicaloperations.//Writetheifif((floatVariable2>=floatVariable1)&&(charVariable2>={//Increment}#STEP2:Iftheaboveisnottrue,andfloatVariable1isgreaterthan#thendecrement(HINT:else//Writetheelseifelseif(floatVariable1>{intVariable2--//Decrement}158?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課條件判定解決方案:步驟#STEP3:實(shí)驗(yàn)課條件判定解決方案:步驟#STEP3:Ifneitheroftheabovearetrue,setcharVariable2equalto#(HINT:{theelse=1}159?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課結(jié)通實(shí)驗(yàn)課結(jié)通過(guò)使用if語(yǔ)句,可以根據(jù)邏輯等式條件性執(zhí)行代碼行或代碼通過(guò)使用elseif/else語(yǔ)句,可以在第一個(gè)條件160?2009MicrochipTechnologyIncorporated.AllRightsswitch語(yǔ){switch語(yǔ){default:}對(duì)expression求值,并在每個(gè)case子句測(cè)試結(jié)果是否與const-expr然后執(zhí)行匹配的case子句中的161?2009MicrochipTechnologyIncorporated.AllRightsswitch流程圖(默認(rèn)是會(huì)轉(zhuǎn)移到下一條語(yǔ)繼續(xù)執(zhí)否是switch流程圖(默認(rèn)是會(huì)轉(zhuǎn)移到下一條語(yǔ)繼續(xù)執(zhí)否是2這是switch語(yǔ)句否是n否162?2009MicrochipTechnologyIncorporated.AllRightsswitch流程圖(修改是Const-expr1免轉(zhuǎn)移到下一條語(yǔ)句繼續(xù)執(zhí)行,使得只會(huì)執(zhí)行一個(gè)switch流程圖(修改是Const-expr1免轉(zhuǎn)移到下一條語(yǔ)句繼續(xù)執(zhí)行,使得只會(huì)執(zhí)行一個(gè)子句的語(yǔ)句否是Const-expr2否是Const-exprn否163?2009MicrochipTechnologyIncorporated.AllRightsswitch164switch164?2009MicrochipTechnologyIncorporated.AllRightsswitch示例{case2:printf("WBBMChicago\n");break;case3:printf("DVDPlayer\n");break;case4:printf("WTMJMilwaukee\n");break;case5:printf("WMAQChicago\n");break;case6:printf("WITIMilwaukee\n");break;case7:printf("WLSChicago\n");break;case9:printf("WGNChicago\n");break;case10:printf("WMVSMilwaukee\n");break;case11:printf("WTTWChicago\n");break;case12:printf("WISNMilwaukee\n");break;default:printf("NoSignalAvailable\n");}switchswitch示例{switchswitch示例{}165?2009MicrochipTechnologyIncorporated.AllRightsswitchswitch示例{將該case子句應(yīng)用于channel4、5、4switchswitch示例{將該case子句應(yīng)用于channel4、5、4case9...12:允許case3和case8轉(zhuǎn)移到到caseprintf("Weakcase14...printf("UHF}166?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課練習(xí)實(shí)驗(yàn)課練習(xí)條件判定:switch語(yǔ)167?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課條件判定實(shí)驗(yàn)課條件判定打開(kāi)項(xiàng)目的工作區(qū)位于實(shí)驗(yàn)課PC打開(kāi)MPLAB?IDE,并從File菜單中選擇OpenWorkspace……。如果已經(jīng)在MPLAB中打開(kāi)了一個(gè)項(xiàng)目,請(qǐng)先通過(guò)從File菜單中選擇1168?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課條件判定解決方案:步驟Writeaswitchchannelstatementtoprintthenetwork'sinitialswith實(shí)驗(yàn)課條件判定解決方案:步驟Writeaswitchchannelstatementtoprintthenetwork'sinitialswithChicago****===Forallotherchannels,"---#"totheoutputwhere"#"isthechannel(HINT:Useprintf(),anduseofeachstringyouprintthenewlinecharacter'\n'attheendtheoutputwindow.)Theswitchstatementisinloopthatwillexecute9passthroughtheloop,'channel'willbeincremented.Theoutputwindowshoulddisplayalineoftextforchannels2to10.STEPOpenaswitchstatementonthevariable//Beginswitch{169?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課條件判定解決方案:步驟2和#STEP2:實(shí)驗(yàn)課條件判定解決方案:步驟2和#STEP2:Writecaseforchannel=CBS(CBSisaconstantdefinedtoequal2)case{//Ifchannel=CBS(CBS=%d\n",//Displaystring"CBS2"followedby//Preventfallthroughtonext}#STEP3:Writecaseforchannel=NBC(NBCisaconstantdefinedtoequal#Thisshouldlookalmostidenticaltostepcase{}//Ifchannel=NBC(NBC=%d\n",string"NBC5"followedbynewlinefallthroughtonextcase170?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課條件判定解決方案:步驟4和#STEP4:Writecasefor實(shí)驗(yàn)課條件判定解決方案:步驟4和#STEP4:Writecaseforchannel=ABC(ABCisaconstantdefinedtoequal#Thisshouldlookalmostidenticaltostepcase{}//Ifchannel=ABC(ABC=%d\n",//Displaystring"ABC7"followedby//PreventfallthroughtonextWritedefaultlistedabove,needtoIfchannelisanythingotherthanthisiswhatshouldbedone.Forthesecases,youthestring"---#"where"#"isthechannelnumber.Forexample,ifchannel=6,youshouldprint"---{printf("---%d\n",}//Forotherstring"---#"followedby171?2009MicrochipTechnologyIncorporated.AllRights實(shí)驗(yàn)課結(jié)對(duì)于多實(shí)驗(yàn)課結(jié)對(duì)于多條件判定,switch提供了比–elseifelseifelseif…)更為優(yōu)美的條判定結(jié)172?2009MicrochipTechnologyIncorporated.AllRights循循173?2009MicrochipTechnologyIncorporated.AllRightsfor語(yǔ)expression1用于在循環(huán)開(kāi)始時(shí)對(duì)for語(yǔ)expression1用于在循環(huán)開(kāi)始時(shí)對(duì)循環(huán)變量進(jìn)行初始化(例如=件為true時(shí)繼續(xù)(例如,i<=10)174?2009MicrochipTechnologyIncorporated.AllRightsfor(expression1;expression2;expression3)for流程語(yǔ)初始化循環(huán)變i=0修改循環(huán)變for流程語(yǔ)初始化循環(huán)變i=0修改循環(huán)變i<n175?2009MicrochipTechnologyIncorporated.AllRightsfor(expression1;expression2;expression3)for示例(代碼片段{=i<for示例(代碼片段{=i<}期望176?2009MicrochipTechnologyIncorporated.AllRightsLoopiterationLoopiterationLoopiterationLoopiterationLoopiterationforfor如果缺少expression2,則認(rèn)為它總是為注無(wú)限不帶有任何表達(dá)式的for循環(huán)將無(wú)限執(zhí)行(可以通177?2009MicrochipTechnologyIncorporated.AllRightsfor(;;{…}while語(yǔ)while語(yǔ)tr,則將執(zhí)行,然后重新對(duì)求值,以確定是否再次執(zhí)行t如果在第一次對(duì)expression求值時(shí)結(jié)果false,則永遠(yuǎn)不會(huì)執(zhí)行178?2009MicrochipTechnologyIncorporated.AllRightswhile(expression)while流程語(yǔ)while流程語(yǔ)179?2009MicrochipTechnologyIncorporated.AllRightswhile(expression)while示180while示180?2009MicrochipTechnologyIncorporated.AllRights示例(代碼片斷循環(huán)計(jì)數(shù)器inti 循環(huán)外部初始在循環(huán)迭代開(kāi)始 循環(huán)計(jì)數(shù)器while(i< 檢查條 循環(huán)內(nèi)部手動(dòng)遞{printf("Loopiteration%d\n",}期望LoopiterationLoopiterationLoopiterationLoopiterationLoopiterationwhile必須總是存在expression,這while必須總是存在expression,這一點(diǎn)不同for經(jīng)常用于程序的主循注無(wú)限expression=1的while循環(huán)將會(huì)無(wú)限執(zhí)行(可以通181?2009MicrochipTechnologyIncorporated.AllRightswhile{…}do-while語(yǔ)先執(zhí)行statement,然do-while語(yǔ)先執(zhí)行statement,然后對(duì)expression值,以決定是否再次執(zhí)行182?2009MicrochipTechnologyIncorporated.AllRightsdostatementwhiledo-while流程語(yǔ)183do-while流程語(yǔ)183?2009MicrochipTechnologyIncorporated.AllRightsdostatementwhiledo-while示184do-while示184?2009Mic

溫馨提示

  • 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)論