單片機(jī)與嵌入式系統(tǒng)基礎(chǔ)chapter4課件_第1頁
單片機(jī)與嵌入式系統(tǒng)基礎(chǔ)chapter4課件_第2頁
單片機(jī)與嵌入式系統(tǒng)基礎(chǔ)chapter4課件_第3頁
單片機(jī)與嵌入式系統(tǒng)基礎(chǔ)chapter4課件_第4頁
單片機(jī)與嵌入式系統(tǒng)基礎(chǔ)chapter4課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章4.1 C51特點及程序結(jié)構(gòu) 4.2 C51的數(shù)據(jù)類型及運算符4.3 C51程序設(shè)計基礎(chǔ)C51程序設(shè)計簡介教學(xué)目的和要求掌握C51程序設(shè)計基礎(chǔ),能夠利用C51編寫基本MCS-51單片機(jī)應(yīng)用系統(tǒng)程序*C51特點及程序結(jié)構(gòu)C51特點 語言簡潔,使用方便靈活:關(guān)鍵字少可移植性好:不依賴于機(jī)器硬件方便操作計算機(jī)硬件:可訪問機(jī)器物理地址和進(jìn)行位操作生成的目標(biāo)代碼質(zhì)量高:僅比用匯編語言編寫的低1020%不能自動檢查數(shù)組的邊界各種運算符的優(yōu)先級別多:15個C51特點及程序結(jié)構(gòu)C51程序結(jié)構(gòu) include /預(yù)處理命令long fun1(); /函數(shù)說明 main() /主函數(shù) /* 每個函數(shù)都由“函

2、數(shù)定義”和“函數(shù)體” 組成,main()函數(shù)是程序的入口 */fun1() /功能函數(shù) C51特點及程序結(jié)構(gòu)C51程序結(jié)構(gòu) include /預(yù)處理命令long fun1(); /函數(shù)說明 main() /主函數(shù) /* 每個函數(shù)都由“函數(shù)定義”和“函數(shù)體” 組成,main()函數(shù)是程序的入口 */fun1() /功能函數(shù) C51特點及程序結(jié)構(gòu)C51關(guān)鍵字 bit聲明一個位標(biāo)量或位類型的函數(shù)sbit聲明一個可位尋址變量sfr聲明一個特殊功能寄存器sfr16聲明一個16位的特殊功能寄存器data直接尋址的內(nèi)部數(shù)據(jù)存儲器bdata可位尋址的內(nèi)部數(shù)據(jù)存儲器idata間接尋址的內(nèi)部數(shù)據(jù)存儲器pdata分

3、頁尋址的外部數(shù)據(jù)存儲器xdata外部數(shù)據(jù)存儲器code程序存儲器interrupt定義一個中斷函數(shù)reentrant定義一個再入函數(shù)using定義芯片的工作寄存器C51特點及程序結(jié)構(gòu)C51關(guān)鍵字 *ACC累加器內(nèi)部RAM:E0H*B乘法寄存器內(nèi)部RAM:F0H*PSW程序狀態(tài)字內(nèi)部RAM:D0HSP堆棧指針內(nèi)部RAM:81HDPL數(shù)據(jù)存儲器指針低8位內(nèi)部RAM:82HDPH數(shù)據(jù)存儲器指針高8位內(nèi)部RAM:83H*IE中斷允許控制器內(nèi)部RAM:A8H*IP中斷優(yōu)先控制器內(nèi)部RAM:D8H*P0端口0內(nèi)部RAM:80H*P1端口1內(nèi)部RAM:90H*P2端口2內(nèi)部RAM:A0H*P3端口3內(nèi)部RA

4、M:B0HC51特點及程序結(jié)構(gòu)C51關(guān)鍵字 PCON電源控制及波特率選擇內(nèi)部RAM:87H*SCON串行口控制器內(nèi)部RAM:98HSBUF串行數(shù)據(jù)緩沖器內(nèi)部RAM:99H*TCON定時器控制內(nèi)部RAM:88HTMOD定時器方式選擇內(nèi)部RAM:89HTL0定時器0低8位內(nèi)部RAM:8AHTL1定時器1低8位內(nèi)部RAM:8BHTH0定時器0低8位內(nèi)部RAM:8CHTH1定時器1高8位內(nèi)部RAM:8DH帶*號的特殊功能寄存器都是可以位尋址的寄存器 C51特點及程序結(jié)構(gòu)C51變量定義 若在程序中使用變量,必須先定義后使用,需要用標(biāo)識符作為變量名,并指出所用的數(shù)據(jù)類型和存儲模式: 【存儲種類】 數(shù)據(jù)類型

5、 【存儲器類型】 變量名表自動(auto,缺省)、外部(extern)、靜態(tài)(static)和寄存器(register)data(00-7FH,直接訪問)bdada(20-2FH,位)idata(00-FFH,間接訪問)pdata(00-FFH,外RAM)xdata (0000FFFFH,外RAM)code(0000FFFFH,外ROM)sfr P1 = 0 x90;/聲明P1口,其地址90Hsfr16 T2 = 0 xCC;/*聲明52定時器2,16位的T2*/sbit P1.0 = P10;/聲明P1口第0位為P1.0sbit TI = 0 x980;/*聲明98H(SCON)的第0位為T

6、I*/注意:sfr、sfr16、sbit其聲明語句只能放函數(shù)外。不能定義bit、sbit、sfr、sfr16型指針和數(shù)組。sbit、sfr、sfr16通常用在51單片機(jī)系統(tǒng)自帶的頭文件中,具體參見reg51.h或reg52.h。C51特點及程序結(jié)構(gòu)C51絕對地址訪問 1. 絕對宏 使用“# include ”即可利用其中定義的宏來訪問絕對地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD,具體用法參見absacc.h。例如:val = XWORD 0 x4000;/ 指向片外RAM的4000H地址val1 = CBYTE 0 x0002;

7、/ 指向ROM的0002h地址C51特點及程序結(jié)構(gòu)C51絕對地址訪問 2. _at_ 關(guān)鍵字 可以使用 _at_ 關(guān)鍵字來訪問絕對地址。格式如下:【存儲器類型】 數(shù)據(jù)類型 標(biāo)識符 _at_ 地址常數(shù) 例如:xdata char m10 _at_ 0 x1000; /*指定m數(shù)組從片外RAM的1000H開始 */注意:(1)絕對變量不能被初使化;(2)bit型函數(shù)及變量不能用_at_指定。*C51的數(shù)據(jù)類型及運算符 C51的數(shù)據(jù)類型 C51的數(shù)據(jù)類型有基本類型、構(gòu)造類型、指針類型與空類型。在C51編譯器中int 和 short 相同,float 和 double 相同。 C51特點及程序結(jié)構(gòu)C5

8、1的數(shù)據(jù)類型 1. char 字符類型 長度1個字節(jié),用于定義字符數(shù)據(jù)變量或常量。分為signed char (默認(rèn))和unsigned char。signed char 類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負(fù)數(shù),負(fù)數(shù)用補(bǔ)碼表示,表示的數(shù)值范圍是-128+127。unsigned char 類型用字節(jié)中所有的位來表示數(shù)值,表示的數(shù)值范圍是0255。C51特點及程序結(jié)構(gòu)C51的數(shù)據(jù)類型 2. int 整型 長度2個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。分為signed int (默認(rèn))和unsigned int。signed int 類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號,“0

9、”表示正數(shù),“1”表示負(fù)數(shù),負(fù)數(shù)用補(bǔ)碼表示,表示的數(shù)值范圍是-32768+32767 。unsigned int 類型用字節(jié)中所有的位來表示數(shù)值,表示的數(shù)值范圍是065535 。C51特點及程序結(jié)構(gòu)C51的數(shù)據(jù)類型 3. long 長整型 長度4個字節(jié),用于存放一個四字節(jié)數(shù)據(jù)。分為signed long (默認(rèn))和unsigned long。signed long 類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負(fù)數(shù),負(fù)數(shù)用補(bǔ)碼表示,表示的數(shù)值范圍是-2147483648 +2147483647 。unsigned int 類型用字節(jié)中所有的位來表示數(shù)值,表示的數(shù)值范圍是 04

10、294967295。C51特點及程序結(jié)構(gòu)C51的數(shù)據(jù)類型 4. float 浮點型 長度4個字節(jié),在十進(jìn)制中具有 7 位有效數(shù)字,是符合 IEEE754 標(biāo)準(zhǔn)的單精度浮點型數(shù)據(jù)用于存放一個四字節(jié)數(shù)據(jù)。5. bit 位標(biāo)量 利用它可定義一個位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。它的值是一個二進(jìn)制位,只能是 0 或者 1。C51特點及程序結(jié)構(gòu)C51的數(shù)據(jù)類型 6. 數(shù)組類型數(shù)組是相同數(shù)據(jù)類型的元素按一定順序排列的集合。將有限個類型相同的變量用一個名字命名,然后用編號區(qū)分他們的變量的集合,名字稱為數(shù)組名,編號稱為下標(biāo)。例如:int a5 = 1,2,3,4,5;char s = “Jilin

11、University”;C51特點及程序結(jié)構(gòu)C51的數(shù)據(jù)類型 7. 結(jié)構(gòu)體 是一種組合數(shù)據(jù)類型,將若干個不同類型的變量結(jié)合在一起而形成的一種數(shù)據(jù)集合體。組成該集合體的各個變量稱為結(jié)構(gòu)元素或成員,整個集合體使用一個單獨的結(jié)構(gòu)變量名。8. 共用體 可以把不同類型的數(shù)據(jù)組合在一起使用,但它與結(jié)構(gòu)體在內(nèi)存中存儲變量的方式不同,結(jié)構(gòu)體定義的各個變量在內(nèi)存中占用不同的內(nèi)存單元,而共用體可使不同的變量分時使用同一內(nèi)存單元。C51特點及程序結(jié)構(gòu)C51的數(shù)據(jù)類型 9. 枚舉 聲明一組命名常數(shù)的集合,當(dāng)一個變量有幾種可能的取值時,可以將它定義為枚舉類型。10. 指針 指針變量中存放的是指向另一個數(shù)據(jù)的地址。指針變

12、量要占據(jù)一定的內(nèi)存單元,在 C51 中它的長度一般為 13個字節(jié)。指針變量定義的一般形式為:數(shù)據(jù)類型說明符 【存儲器類型】 * 指針變量名C51特點及程序結(jié)構(gòu)C51的運算符 運算符就是完成某種特定運算的符號。由運算符及運算對象所組成的具有特定含義的式子被稱為表達(dá)式。運算符按其在表達(dá)式中所起的作用,可分為:賦值、算術(shù)、增量與減量、關(guān)系、邏輯、位、復(fù)合賦值、逗號、條件、指針和地址運算符、強(qiáng)制類型轉(zhuǎn)換運算符和sizeof運算符等。C51特點及程序結(jié)構(gòu)C51的運算符 運算符按其在表達(dá)式中與運算對象的關(guān)系又可分為:單目、雙目和三目運算符。單目運算符只需要有一個運算對象,雙目運算符要求有兩個運算對象,三目

13、運算符要求有三個運算對象。&A=&b將b變量的地址存入A寄存器中*A用來取寄存器所指地址內(nèi)的值Max=(ab)?a:b; /三目運算符,條件運算符具體參見表4-2C51特點及程序結(jié)構(gòu)C51的函數(shù)函數(shù)定義時要同時聲明其類型。調(diào)用函數(shù)前要先聲明該函數(shù)。傳給函數(shù)的參數(shù)值,其類型要與函數(shù)原定義一致。接收函數(shù)返回值的變量,其類型也要與函數(shù)一致。C51語言的編譯器中含有豐富的庫函數(shù),使用時,必須在源程序的開始處使用預(yù)處理命令#include將有關(guān)的頭文件包含進(jìn)來。C51特點及程序結(jié)構(gòu)C51的函數(shù)1. 內(nèi)部函數(shù) C51內(nèi)部函數(shù)只有9個,包含在頭文件intrins.h中。2. 輸入輸出函數(shù) 輸入輸出函數(shù)用于處

14、理包括文件、控制臺等各種輸入輸出設(shè)備,各種函數(shù)以“流”的方式實現(xiàn),包含在在頭文件stdio.h中。 C51特點及程序結(jié)構(gòu)C51的函數(shù)3. 實用工具函數(shù)實用工具函數(shù)中匯集了常用的工具類函數(shù),如數(shù)制轉(zhuǎn)換函數(shù),隨機(jī)序列產(chǎn)生函數(shù)等,包含在在頭文件stdlib.h中 。4. 數(shù)學(xué)函數(shù) 數(shù)學(xué)函數(shù)包含了常規(guī)的數(shù)學(xué)計算函數(shù),在頭文件 math.h 中。C51特點及程序結(jié)構(gòu)C51的函數(shù)5. 字符函數(shù)用于對單個字符進(jìn)行處理,包含在頭文件 ctype.h中。6. 字符串處理函數(shù) 字符串處理函數(shù)用于對字符串進(jìn)行合并、比較等操作,包含在在頭文件string.h中。C51特點及程序結(jié)構(gòu)C51的函數(shù)7. 中斷服務(wù)函數(shù)定義中

15、斷服務(wù)函數(shù)的一般形式為:函數(shù)類型 函數(shù)名()interrupt n using rinterrupt 為關(guān)鍵字,其后n是中斷號,n的取值范圍為031。具體的中斷號n和中斷向量取決于不同的8051系列單片機(jī)芯片。using 為關(guān)鍵字,后面的r是一個03的常整數(shù),分別選擇4個不同的工作寄存器組。C51特點及程序結(jié)構(gòu)C51的函數(shù)編寫8051單片機(jī)中斷函數(shù)時應(yīng)遵循以下規(guī)則:中斷函數(shù)不能進(jìn)行參數(shù)傳遞,會導(dǎo)致編譯出錯。中斷函數(shù)沒有返回值,建議在定義中斷函數(shù)時將其定義為void類型,以明確說明無返回值。在任何情況下都不能直接調(diào)用中斷函數(shù),否則會產(chǎn)生編譯錯誤。如果中斷函數(shù)中用到浮點運算,必須保存浮點寄存器的狀

16、態(tài)。如果在中斷函數(shù)中調(diào)用了其它函數(shù),則被調(diào)用函數(shù)所使用的寄存器組必須與中斷函數(shù)相同。C51編譯器從絕對地址8n3處產(chǎn)生一個中斷向量,其中n為中斷號。該向量包含一個到中斷函數(shù)入口地址的絕對跳轉(zhuǎn)。*C51程序設(shè)計基礎(chǔ) 基本結(jié)構(gòu)C51語言屬于結(jié)構(gòu)化設(shè)計語言,程序由若干模塊組成,每個模塊包含若干基本結(jié)構(gòu)(順序、分支、循環(huán)),每個基本結(jié)構(gòu)中包含若干語句。 C51程序設(shè)計基礎(chǔ) 基本結(jié)構(gòu)1. 分支(選擇)結(jié)構(gòu) if(表達(dá)式)語句; if(表達(dá)式)語句1; else語句2; if(表達(dá)式1)語句1; else if(表達(dá)式2)語句2; else if(表達(dá)式n-1)語句n-1; else語句n;C51程序設(shè)計

17、基礎(chǔ) 基本結(jié)構(gòu)1. 分支(選擇)結(jié)構(gòu) switch (表達(dá)式) case 常量表達(dá)式1:語句1; break;case 常量表達(dá)式2:語句2; break;case 常量表達(dá)式n-1:語句n-1; break;default: 語句n;C51程序設(shè)計基礎(chǔ) 基本結(jié)構(gòu)2. 循環(huán)結(jié)構(gòu) (1) while語句C51使用while語句實現(xiàn)當(dāng)型循環(huán),格式如下:while (表達(dá)式) /條件語句; /循環(huán)體C51程序設(shè)計基礎(chǔ) 基本結(jié)構(gòu)2. 循環(huán)結(jié)構(gòu) (2) do-while語句C51使用do-while語句實現(xiàn)直到型循環(huán),格式如下:do 語句; /循環(huán)體while (表達(dá)式); /條件C51程序設(shè)計基礎(chǔ) 基

18、本結(jié)構(gòu)2. 循環(huán)結(jié)構(gòu) (3) for語句在C51程序設(shè)計中,for語句的功能強(qiáng)大,使用最為靈活,格式如下:for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 語句; /循環(huán)體注意:在C51中允許三種循環(huán)結(jié)構(gòu)相互嵌套。C51程序設(shè)計基礎(chǔ) C51與匯編語言混合編程混合編程:在一個應(yīng)用程序中,用不同的編程語言編寫源程序,最后通過編譯/連接器生成一個可執(zhí)行的完整程序。匯編語言:執(zhí)行速度快、效率高、實時性強(qiáng)。但編程繁瑣,可讀性和可移植性都較差。C51語言:功能豐富、表達(dá)能力強(qiáng)、使用靈活方便、開發(fā)周期短、可讀性強(qiáng)、可移植性好。但硬件操作沒有匯編方便、效率沒有匯編高、編寫延時程序精確度不高等,因而目前單片機(jī)系統(tǒng)開

19、發(fā)中經(jīng)常用到C51與匯編混合編程技術(shù)。C51程序設(shè)計基礎(chǔ) C51與匯編語言混合編程C51語言和匯編語言的混合編程通常是程序的框架或主體部分用C51編寫,對那些使用頻率高、要求執(zhí)行效率高、延時精確的部分用匯編語言編寫,這樣既保證了整個程序的可讀性,又保證了單片機(jī)應(yīng)用系統(tǒng)的性能。在單片機(jī)C 語言與匯編語言混合編程中,應(yīng)注意相應(yīng)的使用方法和參數(shù)傳遞。C51程序設(shè)計基礎(chǔ) C51與匯編語言混合編程1. 混合編程的基本方式 (1)在C51 中嵌入?yún)R編程序# pragma ASM ;匯編程序# pragma ENDASM 需要更改文件選項。將“Properties”選項卡中的“Generate Assemb

20、ler SRC File”和“Assemble SRC File”兩項設(shè)置為有效?!癓ink Public Only”項設(shè)置為無效。C51程序設(shè)計基礎(chǔ) C51與匯編語言混合編程1. 混合編程的基本方式 (2)在C51 中調(diào)用匯編程序分別用C51 與A51 對源程序進(jìn)行編譯然后用L51 將obj 文件連接即可關(guān)鍵問題在于C 函數(shù)與匯編函數(shù)之間的參數(shù)傳遞和得到正確返回值,以保證模塊間的數(shù)據(jù)交換。C51程序設(shè)計基礎(chǔ) C51與匯編語言混合編程2C51 與匯編程序的參數(shù)傳遞 (1) 在C51 中嵌入?yún)R編程序的參數(shù)傳遞如果要在C 程序中和匯編程序中實現(xiàn)數(shù)據(jù)傳遞,可以通過變量或特殊功能寄存器來實現(xiàn)。C51程

21、序設(shè)計基礎(chǔ) C51與匯編語言混合編程2C51 與匯編程序的參數(shù)傳遞 (2) 在C51 中調(diào)用匯編程序的參數(shù)傳遞通過函數(shù)調(diào)用的形式來實現(xiàn)。在C51 中調(diào)用匯編程序進(jìn)行參數(shù)傳遞時都必須嚴(yán)格遵守C51 函數(shù)的參數(shù)和返回值相關(guān)約定。在C51 中調(diào)用匯編程序?qū)崿F(xiàn)參數(shù)傳遞的方式主要有兩種:一種是通過寄存器傳遞參數(shù);另一種是通過固定存儲區(qū)傳遞。C51程序設(shè)計基礎(chǔ) C51程序設(shè)計實例【例4-1】將內(nèi)部RAM 2000H20FFH單元清零。 ORG 0000H MOV R0, # 00H MOV DPTR, # 2000H CLR AL1: MOVX DPTR, A INC DPTR INC R0 CJNE R

22、0, #00H, L1 SJMP $ END# include main() int i; unsigned char xdata *p=0 x2000; for (i=0;i256;i+) *p=0; p+;C51程序設(shè)計基礎(chǔ) C51程序設(shè)計實例【例4-2】利用循環(huán)編寫延時函數(shù),延遲時間為n(ms)(假設(shè)8051CPU的時鐘頻率為12MHz)。#includevoid delay(unsigned int n)/延時n(ms)函數(shù)unsigned int i,j;for(i=0;in;i+) for(j=0;j120;j+);注:時鐘頻率為12MHz時,n為1,循環(huán)120次約為1ms。C51程序設(shè)計基礎(chǔ) C51程序設(shè)計實例【例4-3】如圖所示,8051的P1.0、P1.1、P1.2、P1.3分別接入4支發(fā)光二極管L0、L1、L2、L3,P3.0、P3.1、P3.2、P3.4分別接4支開關(guān)K0、K1、K2、K3,開關(guān)斷開對應(yīng)的發(fā)光二極管亮,開關(guān)閉合對應(yīng)的發(fā)光二極管滅。#include /預(yù)處理命令#includevoid main(void) /主函數(shù)unsigned char buf; /變量說明P1=0 xff; /P1

溫馨提示

  • 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

提交評論