Keil C51應(yīng)用程序設(shè)計課件_第1頁
Keil C51應(yīng)用程序設(shè)計課件_第2頁
Keil C51應(yīng)用程序設(shè)計課件_第3頁
Keil C51應(yīng)用程序設(shè)計課件_第4頁
Keil C51應(yīng)用程序設(shè)計課件_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Keil C51Keil C51應(yīng)用程序設(shè)計應(yīng)用程序設(shè)計Keil C51Keil C51程序的一般結(jié)構(gòu)程序的一般結(jié)構(gòu) 與標(biāo)準(zhǔn)C語言相同,Keil C51程序由一個或多個 函數(shù)構(gòu)成,其中應(yīng)至少包含一個main函數(shù)。一般結(jié)構(gòu)如下: 預(yù)處理命令 /* 用于包含頭文件等 */全局變量說明 /* 全局變量可被本程序的所有函數(shù)引用 */功能函數(shù)說明 /* 說明自定義函數(shù),以便調(diào)用 */ main() /* 主函數(shù) */ 局部變量說明;/* 局部變量只能在所定義函數(shù)內(nèi)部引用 */ 執(zhí)行語句; 函數(shù)調(diào)用;/* 其他函數(shù)定義 */ 數(shù)數(shù)據(jù)類型據(jù)類型 Keil C51編譯器除了支持常用的char(字符型), in

2、t(整型), long(長整型), float(浮點型),*(指針型)等基本數(shù)據(jù)類型之外,還支持以下擴(kuò)充數(shù)據(jù)類型。bit bit 位類型位類型??啥x一個位變量,但不能定義位 指針, 也不能定義位數(shù)組。sfr sfr 特殊功能寄存器。特殊功能寄存器??梢远x8051單片機(jī)的所有內(nèi)部8位特殊功能寄存器。sfr型數(shù)據(jù)占用一個內(nèi)存單元, 其取值范圍是0255。sfr16 16sfr16 16位特殊功能寄存器。位特殊功能寄存器。它占用兩個內(nèi)存單元, 取值范圍是065535,可以定義8051單片機(jī)內(nèi)部16位特殊功能寄存器。sbit sbit 可尋址位??蓪ぶ肺???梢远x8051單片機(jī)內(nèi)部RAM中的可尋址

3、位或特殊功能寄存器中的可尋址位。 Keil C51Keil C51能夠識別的數(shù)據(jù)類型能夠識別的數(shù)據(jù)類型 數(shù)據(jù)類型長 度值 域 unsigned char單字節(jié)0255signed char單字節(jié)-128127unsigned int雙字節(jié)065536signed int 雙字節(jié)-3276832767unsigned long四字節(jié)04294967295signed long四字節(jié) -21474836482147483647float四字節(jié)1.175494E-383.402823E38*13字節(jié)對象的地址bit位 0 或 1sfr單字節(jié)0255sfr16雙字節(jié) 065536sbit位0 或 1變

4、量定義格式變量定義格式Keil C51 中對變量進(jìn)行定義的格式如下: 存儲種類存儲種類 數(shù)據(jù)類型數(shù)據(jù)類型 存儲器類型存儲器類型 變量名表;變量名表;其中, “存儲種類”和“存儲器類型”是可選項。 變量的存儲種類有四種: 自動(auto)、外部(extern)、靜態(tài)(static)和寄存器(register)。定義變量時如果省略存儲種類選項,則該變量將為自動(auto)變量。 Keil C51編譯器還允許說明變量的存儲器類型,使之能夠在8051單片機(jī)內(nèi)準(zhǔn)確地定位。Keil C51Keil C51能夠識別的存儲器類型能夠識別的存儲器類型 存儲器類型說 明DATA直接尋址的片內(nèi)數(shù)據(jù)存儲器(128字節(jié)

5、), 訪問速度最快。BDATA可位尋址的片內(nèi)數(shù)據(jù)存儲器(16字節(jié)), 允許位與字節(jié)混合訪問。IDATA間接訪問的片內(nèi)數(shù)據(jù)存儲器(256字節(jié)), 允許訪問全部片內(nèi)地址。PDATA分頁尋址的片外數(shù)據(jù)存儲器(256字節(jié)), 用MOVX Ri指令訪問。XDATA片外數(shù)據(jù)存儲器(64K字節(jié)), 用MOVX DPTR指令訪問。CODE程序存儲器(64K字節(jié)), 用MOVC A+DPTR指令訪問。編譯模式編譯模式 Keil C51定義變量時如果省略“存儲器類型”選項, 則按編譯時使用的存儲器模式SMALLSMALL、COMPACTCOMPACT或LARGELARGE來規(guī)定默認(rèn)存儲器類型,確定變量的存儲器空間

6、, 函數(shù)中不能采用寄存器傳遞的參數(shù)變量和過程變量也保存在默認(rèn)的存儲器空間。 Keil C51Keil C51能夠識別的編譯器模式能夠識別的編譯器模式 編譯模式存儲器類型SMALLDATA,變量被定義在8051片內(nèi)數(shù)據(jù)存儲器中。COMPACT PDATA,變量被定義在分頁尋址的片外數(shù)據(jù)存儲器中, 每一頁片外數(shù)據(jù)存儲器的長度為256字節(jié)。這時對變量的訪問是通過寄存器間接尋址(MOVX Ri)進(jìn)行 。LARGEXDATA,變量被定義在片外數(shù)據(jù)存儲器中(最大可達(dá)64K字節(jié)), 使用數(shù)據(jù)指針DPTR來間接訪問變量(MOVX DPTR)。 一般指針與基于存儲器的指針一般指針與基于存儲器的指針 Keil C

7、51支持兩種指針類型:一般指針和基于存儲器的指針。一般指針可用于存取任何變量而不必考慮變量在8051單片機(jī)存儲器空間的位置,許多C51庫函數(shù)采用了一般指針。 定義一般指針與ANSI C相同,例如:char * sptr; /* char 型指針 */int * numptr /* int 型指針 */ 定義基于存儲器的指針時可以指定存儲器空間 ,例如:char data * xdata str; /* 指向data空間char型數(shù)據(jù)的指針, 指針本身在xdata空間*/ int xdata * data num; /* 指向xdata空間char型數(shù)據(jù)的指針, 指針本身在data空間*/lon

8、g code * idata pow; /* 指向code空間long型數(shù)據(jù)的指針, 指針本身在idata空間*/ Keil C51Keil C51對存儲器的訪問對存儲器的訪問Keil C51可以采用指針變量來訪問存儲器地址空間。由于8051單片機(jī)存儲器結(jié)構(gòu)自身的特點,僅用指針方式訪問有時會感覺不太方便,也可以利用庫函數(shù)中絕對地址訪問頭文件“ABDACC.H”來訪問不同區(qū)域的存儲器地址空間。絕對地址訪問絕對地址訪問 Keil C51在源程序中定義變量時,可以利用擴(kuò)展關(guān)鍵字“_at_”來對指定變量在存儲器空間的絕對地址,一般格式如下: 存儲器類型存儲器類型 數(shù)據(jù)類型數(shù)據(jù)類型 標(biāo)識符標(biāo)識符 _at

9、_ 地址常數(shù)地址常數(shù) 其中,“存儲器類型”為idata、data、xdata等C51編譯器能夠識別的所有類型,如果省略該選項,則按編譯模式LARGE、COMPACT或SMALL規(guī)定的默認(rèn)存儲器類型確定變量的存儲器空間;“數(shù)據(jù)類型”除了可用int、long、float等基本類型外,還可以采用數(shù)組、結(jié)構(gòu)等復(fù)雜數(shù)據(jù)類型;標(biāo)識符為要定義的變量名;地址常數(shù)規(guī)定了變量的絕對地址,它必須位于有效存儲器空間。 也可以用頭文件“ABSACC.H”中的預(yù)定義宏來指定變量的絕對地址。 頭文件頭文件“ABSACC.H”ABSACC.H”中的預(yù)定義宏中的預(yù)定義宏宏定義可訪問的存儲器空間及數(shù)據(jù)類型CBYTE地址(訪問CO

10、DE區(qū)char型)CWORD地址(訪問CODE區(qū)int型)DBYTE地址(訪問DATA區(qū)char型)PBYTE地址(訪問PDATA區(qū)或I/O端口char型)XBYTE地址(訪問XDATA區(qū)或I/O端口char型)DWORD地址(訪問DATA區(qū)int型)PWORD地址(訪問PDATA區(qū)或I/O端口int型)XWORD地址(訪問XDATA區(qū)或I/O端口int型)中斷服務(wù)函數(shù)與寄存器組定義中斷服務(wù)函數(shù)與寄存器組定義 Keil C51編譯器支持在C語言源程序中直接編寫8051單片機(jī)的中斷服務(wù)函數(shù)程序,一般形式為:函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(形式參數(shù)表形式參數(shù)表) interrupt n using

11、 n 關(guān)鍵字intrrupt后面的n是中斷號, n的取值范圍為031。編譯器從8n+3處產(chǎn)生中斷向量, 具體的中斷號n和中斷向量取決于8051系列單片機(jī)芯片型號。 關(guān)鍵字using用來選擇8051單片機(jī)中不同的工作寄存器組。using后面的n是一個03的常整數(shù), 分別選中4個不同的工作寄存器組。 常用中斷號與中斷向量常用中斷號與中斷向量 中斷號 n中 斷 源中斷向量 8n+30外部中斷 00003H1定時器 0000BH2外部中斷 10013H數(shù)據(jù)調(diào)用協(xié)議數(shù)據(jù)調(diào)用協(xié)議 Keil C51編譯器規(guī)定數(shù)據(jù)在內(nèi)存中按高字節(jié)地址在前、低字節(jié)地址在后的順序存放。 一個值為0 x12345678 的“l(fā)on

12、g” 類型數(shù)據(jù), 在內(nèi)存中存儲格式如下: 地址 +0 +1 +2 +3內(nèi)容 0 x12 0 x34 0 x56 0 x78數(shù)據(jù)調(diào)用協(xié)議數(shù)據(jù)調(diào)用協(xié)議 “float”類型數(shù)據(jù)的長度為4個字節(jié)(32位),在內(nèi)存中按IEEE-754標(biāo)準(zhǔn)單精度32位浮點數(shù)的格式存儲。格式如下: 地址 +0 +1 +2 +3 內(nèi)容 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM其中, S為符號位,“0”正“1”負(fù)。E為用原碼表示的階碼,占用8位二進(jìn)制數(shù), 存放在兩個字節(jié)中,E的取值范圍是1254。注意, 實際上以2為底的指數(shù)要用E的值減去偏移量127,實際冪指數(shù)的取值范圍為-126+127。M為尾

13、數(shù)的小數(shù)部分,用23位二進(jìn)制數(shù)表示, 存放在三個字節(jié)中。尾數(shù)的整數(shù)部分永遠(yuǎn)為1,因此不予保存, 但它是隱含存在的。小數(shù)點位于隱含的整數(shù)位“1”的后面。 數(shù)據(jù)調(diào)用協(xié)議數(shù)據(jù)調(diào)用協(xié)議 Keil C51編譯器支持“基于存儲器”的指針和“一般”指針。基于存儲器類型data、 idata 和pdata的指針具有1個字節(jié)的長度, 基于存儲器類型xdata和code的指針具有2個字節(jié)的長度,一般指針具有3個字節(jié)的長度。在一般指針的3個字節(jié)中, 第一個字節(jié)表示存儲器類型, 第二、第三個字節(jié)表示指針的地址偏移量。一般指針在內(nèi)存中的存儲格式為: 地址 +0 +1 +2 內(nèi)容 存儲器類型 高字節(jié)地址偏移量 低字節(jié)地址

14、偏移量第一個字節(jié)中存儲器類型的編碼如下:存儲器類型 idata/data/bdata xdata pdata code 編碼值 0 x00 0 x01 0 xFE 0 xFFKeil C51的庫函數(shù)的庫函數(shù) 本征庫函數(shù)本征庫函數(shù) 本征庫函數(shù)是指編譯時直接將固定的代碼插入到當(dāng)前行,而不是用匯編語言中的“ACALL”和“LCALL”指令來實現(xiàn)調(diào)用,從而大大提高函數(shù)的訪問效率。非本征庫函數(shù)則必須由“ACALL”和“LCALL”指令來實現(xiàn)調(diào)用。Keil C51的本征庫函數(shù)只有9個,數(shù)量雖少,但非常有用。本征庫函數(shù)在頭文件INTRINS.H中定義。字符判斷轉(zhuǎn)換庫函數(shù)字符判斷轉(zhuǎn)換庫函數(shù) 字符判斷轉(zhuǎn)換庫函數(shù)

15、的原型聲明在頭文件CTYPE.H中定義。 Keil C51的庫函數(shù)的庫函數(shù) 輸入輸出庫函數(shù)輸入輸出庫函數(shù) 輸入輸出庫函數(shù)的原型聲明在頭文件STDIO.H中定義,通過8051系列單片機(jī)的串行口工作, 如果希望支持其它I/O接口, 只需要改動_getkey()和putchar()函數(shù), 庫中所有其它I/O支持函數(shù)都依賴于這兩個函數(shù)模塊,在使用8051系列單片機(jī)的串行口之前,應(yīng)先對其進(jìn)行初始化。 例如以2400波特率(12MHz時鐘頻率)初始化串行口的語句如下: SCON=0 x52; /* SCON 置初值 */ TMOD=0 x20; /* TMOD 置初值 */ TH1=0 xf3; /* T

16、1 置初值 */ TR1=1; /* 啟動 T1 */ Keil C51的庫函數(shù)的庫函數(shù) 字符串處理庫函數(shù)字符串處理庫函數(shù) 字符串處理庫函數(shù)的原型聲明包含在頭文件STRING.H中,字符串函數(shù)通常接收指針串作為輸入值。一個字符串應(yīng)包括2個或多個字符, 字符串的結(jié)尾以空字符表示。在函數(shù) memcmp、memcpy、memchr、memccpy、memset和memmove中,字符串的長度由調(diào)用者明確規(guī)定。類型轉(zhuǎn)換及內(nèi)存分配庫類型轉(zhuǎn)換及內(nèi)存分配庫 類型轉(zhuǎn)換及內(nèi)存分配庫函數(shù)的原型聲明包含在頭文件STDLIB.H中,利用該庫函數(shù)可以完成數(shù)據(jù)類型轉(zhuǎn)換以及存儲器分配操作。 Keil C51的庫函數(shù)的庫函數(shù) 字符串處理庫函數(shù)字符串處理庫函數(shù) 字符串處理庫函數(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

提交評論