版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第七章 08C語言 主要內(nèi)容 單片機(jī)的C語言編程概述 標(biāo)準(zhǔn)C語言的基本語法 08C語言的使用 08C語言程序編程框架 08C語言的編譯過程 08C編程技巧 嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件17.1 單片機(jī)的C語言編程概述 7.1.1 單片機(jī)編程語言 匯編語言 優(yōu)點(diǎn):執(zhí)行效率高,時(shí)序控制精確 C語言 優(yōu)點(diǎn): 程序開發(fā)速度快,提高開發(fā)工作效率; 軟件調(diào)試直觀; 可維護(hù)性好; 可移植性好(與匯編語言相比較)。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件27.1.2 單片機(jī)C語言 單片機(jī)C語言和標(biāo)準(zhǔn)C語言的用法基本相同,但是單片機(jī)C語言是針對(duì)于資源少的MCU,它的編程方法和編程手段與PC機(jī)上使用C語言還是有很大差別。 嵌入式
2、應(yīng)用技術(shù)基礎(chǔ)教程課件返回37.2 標(biāo)準(zhǔn)C語言的基本語法 7.2.1 數(shù)據(jù)類型 (1)基本類型嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件表7-1 C語言基本數(shù)據(jù)類型數(shù)據(jù)類型簡明含義位數(shù)字節(jié)數(shù)值域signed char有符號(hào)字節(jié)型81-128+127unsigned char無符號(hào)字節(jié)型810255signed short有符號(hào)短整型162-32768+32767signed int有符號(hào)短整型162-32768+32767unsigned int無符號(hào)短整型162065535signed long有符號(hào)長整型324-2147483648+2147483647unsigned long無符號(hào)長整型32404294
3、967295float浮點(diǎn)型3243.4E-383.4E+38double雙精度型6481.7E-3081.7E+30847.2.1 數(shù)據(jù)類型(2)構(gòu)造類型 構(gòu)造類型有數(shù)組、結(jié)構(gòu)、聯(lián)合、枚舉、指針和空類型。結(jié)構(gòu)和聯(lián)合是基本數(shù)據(jù)類型的組合。枚舉是一個(gè)被命名為整型常量的集合??疹愋妥止?jié)長度為0,主要有兩個(gè)用途:一是明確地表示一個(gè)函數(shù)不返回任何值;二是產(chǎn)生一個(gè)同一類型指針(可根據(jù)需要?jiǎng)討B(tài)地分配給其內(nèi)存)。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件57.2.2 運(yùn)算符C語言的運(yùn)算符與大多數(shù)計(jì)算機(jī)語言基本相同,分為: 算術(shù)運(yùn)算符 邏輯運(yùn)算符 關(guān)系運(yùn)算符和位運(yùn)算符 增量和減量運(yùn)算符 復(fù)合賦值運(yùn)算符 指針和地址運(yùn)算符 輸出
4、格式轉(zhuǎn)換符嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件67.2.3 流程控制(1)順序結(jié)構(gòu) 順序結(jié)構(gòu)就是從前向后依次執(zhí)行語句。從整體上看,所有程序的基本結(jié)構(gòu)都是順序結(jié)構(gòu),中間的某個(gè)過程可以是選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件語句1語句2語句N77.2.3 流程控制(2)選擇結(jié)構(gòu) if結(jié)構(gòu)(雙分支): if (條件表達(dá)式) 語句項(xiàng); 或 if (條件表達(dá)式) 語句塊 else 語句塊 嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件語句1語句1條件表達(dá)式if真假87.2.3 流程控制(2)選擇結(jié)構(gòu) switch結(jié)構(gòu)(多分支): switch(表達(dá)式) case 常數(shù)1: 語句項(xiàng)1;break; case 常數(shù)2: 語句項(xiàng)2
5、;break; default: 語句項(xiàng)n 嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件表達(dá)式語句項(xiàng)1語句項(xiàng)2語句項(xiàng)Nswitch常數(shù)1常數(shù)2default97.2.3 流程控制(3)循環(huán)結(jié)構(gòu) for循環(huán) : for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件表達(dá)式2求解表達(dá)式1語句求解表達(dá)式3For語句的下一個(gè)語句for真假107.2.3 流程控制(3)循環(huán)結(jié)構(gòu) while循環(huán) : while (表達(dá)式) 語句嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件表達(dá)式語句while真假117.2.3 流程控制(3)循環(huán)結(jié)構(gòu) do.while循環(huán) do 語句 while (表達(dá)式);嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件表達(dá)式2
6、語句do假真127.2.3 流程控制(4)break語句和continue語句 在循環(huán)中常常使用break語句和continue語句,這兩個(gè)語句都會(huì)改變循環(huán)的執(zhí)行情況。break語句用來從循環(huán)體中強(qiáng)行跳出循環(huán),終止整個(gè)循環(huán)的執(zhí)行;continue語句只用來結(jié)束本次循環(huán) 。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件137.2.4 函數(shù)(1)函數(shù)定義 類型標(biāo)識(shí)符 函數(shù)名(類型 參數(shù)1,類型 參數(shù)2,類型 參數(shù)3,) 說明部分 語句 (2)函數(shù)的聲明 類型標(biāo)識(shí)符 函數(shù)名(類型 參數(shù)1,類型 參數(shù)2,類型 參數(shù)3,);(3)函數(shù)的返回值 return 表達(dá)式; return語句用來立即結(jié)束函數(shù),并返回一確定給調(diào)用程序
7、。如果函數(shù)的類型和return語句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn)。對(duì)數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件147.2.5 指針(1)指針變量的定義 類型說明符 *變量名; (2)指針變量的賦值 指針變量同普通變量一樣,使用之前不僅要定義說明,而且必須賦予具體的值。未經(jīng)賦值的指針變量不能使用,否則將造成系統(tǒng)混亂,甚至死機(jī)。指針變量的賦值只能賦予地址。(3)指針的運(yùn)算 取地址運(yùn)算(&) 取內(nèi)容運(yùn)算 (*) 加減算術(shù)運(yùn)算 :針對(duì)指針數(shù)組變量進(jìn)行嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件157.2.6 結(jié)構(gòu)體(1)結(jié)構(gòu)體的說明和結(jié)構(gòu)體變量的定義 struct 結(jié)構(gòu)體名 struct 結(jié)構(gòu)體
8、名 成員列表; 成員列表 結(jié)構(gòu)體變量;(2)結(jié)構(gòu)體變量的使用 結(jié)構(gòu)體變量也可以象其它類型的變量一樣賦值運(yùn)算,不同的是結(jié)構(gòu)體變量以成員作為基本變量。結(jié)構(gòu)體成員的表示方式為: 結(jié)構(gòu)體變量.成員名 (3)結(jié)構(gòu)體指針 結(jié)構(gòu)體指針是指向結(jié)構(gòu)體的指針。結(jié)構(gòu)體指針對(duì)結(jié)構(gòu)體成員的訪問表示為: 結(jié)構(gòu)體指針名-結(jié)構(gòu)體成員嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件167.2.7 編譯預(yù)處理 (1)宏定義 #define 宏名 表達(dá)式(2)條件編譯 #if 表達(dá)式 #else 表達(dá)式 #endif(3)“文件包含”處理 “文件包含”是指一個(gè)源文件將另一個(gè)源文件的全部內(nèi)容包含進(jìn)來,其一般形式為: #include “文件名” 嵌入式應(yīng)
9、用技術(shù)基礎(chǔ)教程課件177.2.8 用typedef定義類型 typedef用來定義新的類型名來代替已有的類型名: typedef 類型名 新的類型名; 說明: 用typedef可以定義各種類型名,但不能用來定義變量。 用typedef只是對(duì)已經(jīng)存在的類型增加一個(gè)類型名,而沒有創(chuàng)造新的類型。 當(dāng)不同源文件中用到各種類型數(shù)據(jù)(尤其是像數(shù)組、指針、結(jié)構(gòu)體、共用體等較復(fù)雜數(shù)據(jù)類型)時(shí),常用typedef定義一些數(shù)據(jù)類型,并把它們單獨(dú)存放在一個(gè)文件中,而后在需要用到它們的文件中用#include命令把它們包含進(jìn)來。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件返回187.3 08C語言的使用7.3.1 寄存器和I/O口的使
10、用 使用08C語言,大部分寄存器都可以直接操作,但對(duì)寄存器A、HX、CCR和SP的操作只能通過嵌入?yún)R編代碼來完成。 (1)I/O口和寄存器的定義 在08C語言中操作寄存器及I/O口時(shí),通常預(yù)先在頭文件中使用宏定義,其定義方法如下: #define 寄存器名*(volatile unsigned char *)寄存器地址 #define I/O口名*(volatile unsigned char *)I/O口地址(2)I/O與寄存器的操作 使用上面定義的I/O口或寄存器宏,可以方便對(duì)I/O置高低電平或讀取I/O的狀態(tài),讀寫寄存器。 嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件197.3.2 使用匯編指令 在08C
11、語言中,使用匯編代碼有兩種方法: (1)asm(“匯編指令”)(2)定義匯編子程序 定義格式如下:_子程序名代碼rts嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件20這種使用方法要注意以下幾點(diǎn): 在子程序名前加_; 匯編子程序只能放在*.s文件中,然后將該文件加入到工程中; 在C代碼中調(diào)用匯編子程序時(shí)可直接調(diào)用: 子程序名(); 匯編子程序的編寫時(shí),如果使用了A或HX,則需要保護(hù)寄存器A或HX。因?yàn)?8C的編譯器把A和HX封裝在下層,不需要用戶管理,如果匯編子程序沒有保存這些寄存器,在返回時(shí)將造成不可預(yù)測的后果。 7.3.2 使用匯編指令嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件21 在HC08系列單片機(jī)Flash地址空間中,
12、有一段是用來存儲(chǔ)所有的中斷矢量 ,每兩個(gè)字節(jié)存儲(chǔ)的是一個(gè)中斷處理函數(shù)的地址。編寫中斷處理函數(shù),需要按照以下步驟: 新建一個(gè)vectors.c,并加入工程中; 定義中斷處理函數(shù); 定義中斷向量表; 在中斷向量表中填入中斷處理函數(shù)名稱; 7.3.3 中斷處理 嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件22 08C提供一系列函數(shù)庫供程序員使用,其中囊括了標(biāo)準(zhǔn)C所具有的大部分庫函數(shù)和一些08C特有的函數(shù),但是08C中的有些函數(shù)和標(biāo)準(zhǔn)C中的函數(shù)的功能不一樣。這些函數(shù)的頭文件位于安裝目錄的include目錄下,庫文件位于安裝目錄的lib目錄下。更多的函數(shù)庫說明參見附錄F。7.3.4 08C的常用庫函數(shù) 嵌入式應(yīng)用技術(shù)基礎(chǔ)
13、教程課件返回237.4 08C語言程序編程框架7.4.1 實(shí)踐環(huán)境 SD-HC08在線編程開發(fā)系統(tǒng)中的C語言編程是按工程進(jìn)行管理,一個(gè)08C工程所包含的文件最好放在同一文件夾下,一般由.prj、.src、.h、.c等類型文件構(gòu)成,編譯后還將產(chǎn)生.lst、.s19等文件。編譯過程還會(huì)產(chǎn)生一些中間文件,可以不去理會(huì)這些文件。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件24一個(gè)完整的08語言程序通常至少包含如下部分:匯編語言的啟動(dòng)文件存儲(chǔ)器映像及I/O端口的頭文件主程序模塊中斷服務(wù)程序模塊中斷向量表文件7.4.2 08C語言程序的組成嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件25一個(gè)完整的08語言程序通常至少包含如下部分:匯編語言的
14、啟動(dòng)文件存儲(chǔ)器映像及I/O端口的頭文件主程序模塊中斷服務(wù)程序模塊中斷向量表文件7.4.2 08C語言程序的組成嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件26編寫第一個(gè)可執(zhí)行的08C語言程序:(1)新建文件 新建C工程。 新建GP32C.h文件,該文件包含了MC68HC908GP32的I/O及寄存器的宏定義。 新建main.c程序(2)編譯程序7.4.3 第一個(gè)08C語言例程嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件返回277.5 08C語言的編譯過程7.5.1 編譯過程 在SD-HC08在線編程開發(fā)系統(tǒng)中編輯了源程序以后,使用編譯命令就可以把源程序翻譯成目標(biāo)程序。 編譯的腳本文件:包含了編譯指令及相關(guān)的參數(shù),文件存放的位置在
15、.prj的同一文件夾下。 C程序向匯編程序的轉(zhuǎn)化:啟動(dòng)08C編譯器,根據(jù).mak文件的編譯腳本將所有.c文件編譯成.s文件及.lis文件。 匯編代碼向機(jī)器碼的轉(zhuǎn)化:匯編程序?qū)⑺械膮R編文件編譯成.o的中間目標(biāo)文件,即所有的匯編語句都編譯成機(jī)器碼。 連接:啟動(dòng)連接器,連接器根據(jù).mak文件中的連接腳本,把所有的.o文件統(tǒng)一連接成一個(gè).s19文件,該文件可以下載到目標(biāo)機(jī)器上執(zhí)行,同時(shí)還可根據(jù)用戶需求生成.lst文件和.mp文件。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件287.5.2 編譯文件輸出 單片機(jī)的文件都有自己的后綴規(guī)則,不同的C編譯器產(chǎn)生的文件后綴在某些方面有些差異。下表為08C編譯過程中產(chǎn)生的文件類型
16、。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件 08C編譯所產(chǎn)生的文件類型文件擴(kuò)展名說明mak編譯腳本文件Lis浮動(dòng)地址空間的匯編代碼s浮動(dòng)地址空間的匯編代碼o目標(biāo)文件Lst編譯列表文件mp連接后生成的地址映像文件S19絕對(duì)地址目標(biāo)文件返回297.6 08C編程技巧 7.6.1 數(shù)據(jù)類型的選用 單片機(jī)C要和程序存儲(chǔ)器資源結(jié)合起來,雖然其提供的數(shù)據(jù)類型十分豐富,但是只有bit和char等數(shù)據(jù)類型是機(jī)器語言直接支持的數(shù)據(jù)類型,用此類數(shù)據(jù)類型的語句所生成的代碼較短;而其它的數(shù)據(jù)類型如整型、浮點(diǎn)型等數(shù)據(jù)要有一定的內(nèi)部程序或內(nèi)部函數(shù)的支持,相對(duì)來說用該類數(shù)據(jù)類型的語句生成的代碼要長。有些C語言程序表面上看起來十分的簡單,
17、但在實(shí)際編譯時(shí),生成的代碼卻相當(dāng)長。因此我們要按照實(shí)際需要,盡量選用占用存儲(chǔ)空間少的數(shù)據(jù)類型,可以大大的減少所生成的代碼長度。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件307.6.2 算法設(shè)計(jì)問題 單片機(jī)C語言和標(biāo)準(zhǔn)C語言存在著很大差別,在計(jì)算機(jī)上進(jìn)行C語言程序設(shè)計(jì)時(shí)可以不必考慮程序代碼的長短,只需考慮程序功能實(shí)現(xiàn),但是在單片機(jī)上進(jìn)行C語言程序設(shè)計(jì)就必須考慮系統(tǒng)的硬件資源。有時(shí)并不是程序的算法越簡單、長度越短越好,因?yàn)橛幸恍┧惴ㄒ{(diào)用一些內(nèi)部的子程序和函數(shù),生成的機(jī)器代碼可能非常長。不同的算法對(duì)程序代碼長度影響十分大,因此在進(jìn)行程序設(shè)計(jì)時(shí),就盡量采用程序生成代碼短的算法,在不影響程序功能實(shí)現(xiàn)的情況下可以采用一
18、些優(yōu)化算法。 嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件317.6.3 數(shù)據(jù)存儲(chǔ)器的分配 單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM只有幾百字節(jié),內(nèi)部處理器、內(nèi)部堆棧、壓縮棧、所有程序變量和所有包含進(jìn)來的庫函數(shù)都將使用數(shù)量有限的內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM。在進(jìn)行程序設(shè)計(jì)時(shí)應(yīng)該盡量的使用局部變量,提高內(nèi)部數(shù)據(jù)存儲(chǔ)器的使用率。嵌入式應(yīng)用技術(shù)基礎(chǔ)教程課件327.6.4 單片機(jī)C語言與匯編語言的混合編程 C代碼中可以嵌入?yún)R編程序,匯編中也可以調(diào)用C代碼中的變量與子程序。使用C代碼中定義的變量:在變量名前加_或%,例如:unsigned char sPortA;asm(“l(fā)da %sPortA”)或asm(“l(fā)da _sPortA”)調(diào)用C代碼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026安徽省面向北京師范大學(xué)選調(diào)生招錄備考題庫及完整答案詳解1套
- 2026中國農(nóng)業(yè)科學(xué)院第一批統(tǒng)一招聘備考題庫(蘭州畜牧與獸藥研究所)及參考答案詳解
- 2025年公關(guān)廣告面試試題及答案
- 2025年健康管理師《理論知識(shí)》備試題附答案
- 2026廣東深圳市福田區(qū)黃埔雅苑幼兒園招聘教職員工1人備考題庫及答案詳解參考
- (2025年)自貢市自流井區(qū)社區(qū)網(wǎng)格工作人員應(yīng)知應(yīng)會(huì)知識(shí)題庫含答案
- 2025福建圖書聯(lián)合發(fā)行有限責(zé)任公司招聘備考題庫及答案詳解(奪冠系列)
- 2026年南昌市勞動(dòng)保障事務(wù)代理中心以勞務(wù)外包形式招聘項(xiàng)目申報(bào)與監(jiān)測服務(wù)工作人員1人備考題庫含答案詳解
- 2026上海市姚連生中學(xué)招聘教師備考題庫及答案詳解(新)
- 2025福建泉州市醫(yī)學(xué)會(huì)招聘工作人員2人備考題庫及1套完整答案詳解
- 地坪漆施工方案范本
- 2025寧波市甬北糧食收儲(chǔ)有限公司公開招聘工作人員2人筆試參考題庫及答案解析
- 2026年國有企業(yè)金華市軌道交通控股集團(tuán)招聘備考題庫有答案詳解
- 2025年電子工程師年度工作總結(jié)
- 2026年吉林司法警官職業(yè)學(xué)院單招職業(yè)技能筆試備考題庫帶答案解析
- 2025年高職第三學(xué)年(工程造價(jià))工程結(jié)算與審計(jì)測試題及答案
- 2024年曲阜師范大學(xué)馬克思主義基本原理概論期末考試真題匯編
- 醫(yī)院消毒技術(shù)培訓(xùn)課件
- 江蘇省電影集團(tuán)招聘筆試題庫2026
- 《機(jī)械創(chuàng)新設(shè)計(jì)》課件-多功能播種機(jī)整體結(jié)構(gòu)設(shè)計(jì)
- 增殖放流效果評(píng)估體系
評(píng)論
0/150
提交評(píng)論