




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、keilkeil c51 c51應(yīng)用程序設(shè)計(jì)應(yīng)用程序設(shè)計(jì) keilkeil c51 c51程序的一般結(jié)構(gòu)程序的一般結(jié)構(gòu) 與標(biāo)準(zhǔn)c語言相同,keil c51程序由一個(gè)或多個(gè) 函數(shù)構(gòu)成,其中應(yīng)至少包含一個(gè)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(字符型), i
2、nt(整型), long(長整型), float(浮點(diǎn)型),*(指針型)等基本數(shù)據(jù)類型之外,還支持以下擴(kuò)充數(shù)據(jù)類型。bit bit 位類型位類型??啥x一個(gè)位變量,但不能定義位 指針, 也不能定義位數(shù)組。sfrsfr 特殊功能寄存器。特殊功能寄存器??梢远x8051單片機(jī)的所有內(nèi)部8位特殊功能寄存器。sfr型數(shù)據(jù)占用一個(gè)內(nèi)存單元, 其取值范圍是0255。sfr16 16sfr16 16位特殊功能寄存器。位特殊功能寄存器。它占用兩個(gè)內(nèi)存單元, 取值范圍是065535,可以定義8051單片機(jī)內(nèi)部16位特殊功能寄存器。sbitsbit 可尋址位??蓪ぶ肺???梢远x8051單片機(jī)內(nèi)部ram中的可尋址位
3、或特殊功能寄存器中的可尋址位。 keilkeil c51 c51能夠識(shí)別的數(shù)據(jù)類型能夠識(shí)別的數(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é)對(duì)象的地址bit位 0 或 1sfr單字節(jié)0255sfr16雙字節(jié) 065536sbit位0 或 1變量
4、定義格式變量定義格式keil c51 中對(duì)變量進(jìn)行定義的格式如下: 存儲(chǔ)種類存儲(chǔ)種類 數(shù)據(jù)類型數(shù)據(jù)類型 存儲(chǔ)器類型存儲(chǔ)器類型 變量名表;變量名表;其中, “存儲(chǔ)種類”和“存儲(chǔ)器類型”是可選項(xiàng)。 變量的存儲(chǔ)種類有四種: 自動(dòng)(auto)、外部(extern)、靜態(tài)(static)和寄存器(register)。定義變量時(shí)如果省略存儲(chǔ)種類選項(xiàng),則該變量將為自動(dòng)(auto)變量。 keil c51編譯器還允許說明變量的存儲(chǔ)器類型,使之能夠在8051單片機(jī)內(nèi)準(zhǔn)確地定位。keilkeil c51 c51能夠識(shí)別的存儲(chǔ)器類型能夠識(shí)別的存儲(chǔ)器類型 存儲(chǔ)器類型說 明data直接尋址的片內(nèi)數(shù)據(jù)存儲(chǔ)器(128字節(jié))
5、, 訪問速度最快。bdata可位尋址的片內(nèi)數(shù)據(jù)存儲(chǔ)器(16字節(jié)), 允許位與字節(jié)混合訪問。idata間接訪問的片內(nèi)數(shù)據(jù)存儲(chǔ)器(256字節(jié)), 允許訪問全部片內(nèi)地址。pdata分頁尋址的片外數(shù)據(jù)存儲(chǔ)器(256字節(jié)), 用movx ri指令訪問。xdata片外數(shù)據(jù)存儲(chǔ)器(64k字節(jié)), 用movx dptr指令訪問。code程序存儲(chǔ)器(64k字節(jié)), 用movc a+dptr指令訪問。編譯模式編譯模式 keil c51定義變量時(shí)如果省略“存儲(chǔ)器類型”選項(xiàng), 則按編譯時(shí)使用的存儲(chǔ)器模式smallsmall、compactcompact或largelarge來規(guī)定默認(rèn)存儲(chǔ)器類型,確定變量的存儲(chǔ)器空間,
6、 函數(shù)中不能采用寄存器傳遞的參數(shù)變量和過程變量也保存在默認(rèn)的存儲(chǔ)器空間。 keilkeil c51 c51能夠識(shí)別的編譯器模式能夠識(shí)別的編譯器模式 編譯模式存儲(chǔ)器類型smalldata,變量被定義在8051片內(nèi)數(shù)據(jù)存儲(chǔ)器中。compact pdata,變量被定義在分頁尋址的片外數(shù)據(jù)存儲(chǔ)器中, 每一頁片外數(shù)據(jù)存儲(chǔ)器的長度為256字節(jié)。這時(shí)對(duì)變量的訪問是通過寄存器間接尋址(movx ri)進(jìn)行 。largexdata,變量被定義在片外數(shù)據(jù)存儲(chǔ)器中(最大可達(dá)64k字節(jié)), 使用數(shù)據(jù)指針dptr來間接訪問變量(movx dptr)。 一般指針與基于存儲(chǔ)器的指針一般指針與基于存儲(chǔ)器的指針 keil c5
7、1支持兩種指針類型:一般指針和基于存儲(chǔ)器的指針。一般指針可用于存取任何變量而不必考慮變量在8051單片機(jī)存儲(chǔ)器空間的位置,許多c51庫函數(shù)采用了一般指針。 定義一般指針與ansi c相同,例如:char * sptr; /* char 型指針 */int * numptr /* int 型指針 */ 定義基于存儲(chǔ)器的指針時(shí)可以指定存儲(chǔ)器空間 ,例如:char data * xdata str; /* 指向data空間char型數(shù)據(jù)的指針, 指針本身在xdata空間*/ int xdata * data num; /* 指向xdata空間char型數(shù)據(jù)的指針, 指針本身在data空間*/long
8、 code * idata pow; /* 指向code空間long型數(shù)據(jù)的指針, 指針本身在idata空間*/ keilkeil c51 c51對(duì)存儲(chǔ)器的訪問對(duì)存儲(chǔ)器的訪問keil c51可以采用指針變量來訪問存儲(chǔ)器地址空間。由于8051單片機(jī)存儲(chǔ)器結(jié)構(gòu)自身的特點(diǎn),僅用指針方式訪問有時(shí)會(huì)感覺不太方便,也可以利用庫函數(shù)中絕對(duì)地址訪問頭文件“abdacc.h”來訪問不同區(qū)域的存儲(chǔ)器地址空間。絕對(duì)地址訪問絕對(duì)地址訪問 keil c51在源程序中定義變量時(shí),可以利用擴(kuò)展關(guān)鍵字“_at_”來對(duì)指定變量在存儲(chǔ)器空間的絕對(duì)地址,一般格式如下: 存儲(chǔ)器類型存儲(chǔ)器類型 數(shù)據(jù)類型數(shù)據(jù)類型 標(biāo)識(shí)符標(biāo)識(shí)符 _at_
9、 地址常數(shù)地址常數(shù) 其中,“存儲(chǔ)器類型”為idata、data、xdata等c51編譯器能夠識(shí)別的所有類型,如果省略該選項(xiàng),則按編譯模式large、compact或small規(guī)定的默認(rèn)存儲(chǔ)器類型確定變量的存儲(chǔ)器空間;“數(shù)據(jù)類型”除了可用int、long、float等基本類型外,還可以采用數(shù)組、結(jié)構(gòu)等復(fù)雜數(shù)據(jù)類型;標(biāo)識(shí)符為要定義的變量名;地址常數(shù)規(guī)定了變量的絕對(duì)地址,它必須位于有效存儲(chǔ)器空間。 也可以用頭文件“absacc.h”中的預(yù)定義宏來指定變量的絕對(duì)地址。 頭文件頭文件“absacc.h”absacc.h”中的預(yù)定義宏中的預(yù)定義宏宏定義可訪問的存儲(chǔ)器空間及數(shù)據(jù)類型cbyte地址(訪問cod
10、e區(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是中斷號(hào), n的取值范圍為031。編譯器從8n+3處產(chǎn)生中斷向量, 具體的中斷號(hào)n和中斷向量取決于8051系列單片機(jī)芯片型號(hào)。 關(guān)鍵字using用來選擇8051單片機(jī)中不同的工作寄存器組。using后面的n是一個(gè)03的常整數(shù), 分別選中4個(gè)不同的工作寄存器組。 常用中斷號(hào)與中斷向量常用中斷號(hào)與中斷向量 中斷號(hào) n中 斷 源中斷向量 8n+30外部中斷 00003h1定時(shí)器 0000bh2外部中斷 10013h3定時(shí)器 1001bh4串行口0023h數(shù)據(jù)調(diào)用協(xié)議數(shù)據(jù)調(diào)用協(xié)議 keil c51編譯器規(guī)定數(shù)據(jù)在內(nèi)存中按高字節(jié)地址在前、低字節(jié)地址在后的順序存放。 一個(gè)
12、值為0 x12345678 的“l(fā)ong” 類型數(shù)據(jù), 在內(nèi)存中存儲(chǔ)格式如下: 地址 +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個(gè)字節(jié)(32位),在內(nèi)存中按ieee-754標(biāo)準(zhǔn)單精度32位浮點(diǎn)數(shù)的格式存儲(chǔ)。格式如下: 地址 +0 +1 +2 +3 內(nèi)容 seeeeeee emmmmmmm mmmmmmmm mmmmmmmm其中, s為符號(hào)位,“0”正“1”負(fù)。e為用原碼表示的階碼,占用8位二進(jìn)制數(shù), 存放在兩個(gè)字節(jié)中,e的取值范圍是1254。注意, 實(shí)際上以2為底的指數(shù)要用e的值減去偏移量127,實(shí)際冪指
13、數(shù)的取值范圍為-126+127。m為尾數(shù)的小數(shù)部分,用23位二進(jìn)制數(shù)表示, 存放在三個(gè)字節(jié)中。尾數(shù)的整數(shù)部分永遠(yuǎn)為1,因此不予保存, 但它是隱含存在的。小數(shù)點(diǎn)位于隱含的整數(shù)位“1”的后面。 數(shù)據(jù)調(diào)用協(xié)議數(shù)據(jù)調(diào)用協(xié)議 keil c51編譯器支持“基于存儲(chǔ)器”的指針和“一般”指針?;诖鎯?chǔ)器類型data、 idata 和pdata的指針具有1個(gè)字節(jié)的長度, 基于存儲(chǔ)器類型xdata和code的指針具有2個(gè)字節(jié)的長度,一般指針具有3個(gè)字節(jié)的長度。在一般指針的3個(gè)字節(jié)中, 第一個(gè)字節(jié)表示存儲(chǔ)器類型, 第二、第三個(gè)字節(jié)表示指針的地址偏移量。一般指針在內(nèi)存中的存儲(chǔ)格式為: 地址 +0 +1 +2 內(nèi)容 存
14、儲(chǔ)器類型 高字節(jié)地址偏移量 低字節(jié)地址偏移量第一個(gè)字節(jié)中存儲(chǔ)器類型的編碼如下:存儲(chǔ)器類型 idata/data/bdata xdata pdata code 編碼值 0 x00 0 x01 0 xfe 0 xffkeil c51的庫函數(shù)的庫函數(shù) 本征庫函數(shù)本征庫函數(shù) 本征庫函數(shù)是指編譯時(shí)直接將固定的代碼插入到當(dāng)前行,而不是用匯編語言中的“acall”和“l(fā)call”指令來實(shí)現(xiàn)調(diào)用,從而大大提高函數(shù)的訪問效率。非本征庫函數(shù)則必須由“acall”和“l(fā)call”指令來實(shí)現(xiàn)調(diào)用。keil c51的本征庫函數(shù)只有9個(gè),數(shù)量雖少,但非常有用。本征庫函數(shù)在頭文件intrins.h中定義。字符判斷轉(zhuǎn)換庫函數(shù)
15、字符判斷轉(zhuǎn)換庫函數(shù) 字符判斷轉(zhuǎn)換庫函數(shù)的原型聲明在頭文件ctype.h中定義。 keil c51的庫函數(shù)的庫函數(shù) 輸入輸出庫函數(shù)輸入輸出庫函數(shù) 輸入輸出庫函數(shù)的原型聲明在頭文件stdio.h中定義,通過8051系列單片機(jī)的串行口工作, 如果希望支持其它i/o接口, 只需要改動(dòng)_getkey()和putchar()函數(shù), 庫中所有其它i/o支持函數(shù)都依賴于這兩個(gè)函數(shù)模塊,在使用8051系列單片機(jī)的串行口之前,應(yīng)先對(duì)其進(jìn)行初始化。 例如以2400波特率(12mhz時(shí)鐘頻率)初始化串行口的語句如下: scon=0 x52; /* scon 置初值 */ tmod=0 x20; /* tmod 置初值
16、 */ th1=0 xf3; /* t1 置初值 */ tr1=1; /* 啟動(dòng) t1 */ keil c51的庫函數(shù)的庫函數(shù) 字符串處理庫函數(shù)字符串處理庫函數(shù) 字符串處理庫函數(shù)的原型聲明包含在頭文件string.h中,字符串函數(shù)通常接收指針串作為輸入值。一個(gè)字符串應(yīng)包括2個(gè)或多個(gè)字符, 字符串的結(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)換以及存儲(chǔ)器分配操作。 keil c51的庫函數(shù)的庫函數(shù) 字符串處理庫函數(shù)字符串處理庫函數(shù) 字符串處理庫函數(shù)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國微孔缺陷滲透膠數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年度離婚協(xié)議無財(cái)產(chǎn)分割方案書
- 2025年度特色工藝品店面經(jīng)營權(quán)及知識(shí)產(chǎn)權(quán)轉(zhuǎn)讓協(xié)議
- 解讀2025年度寵物寄養(yǎng)攻略寵店寄養(yǎng)協(xié)議關(guān)鍵要點(diǎn)
- 二零二五年度中途入股教育培訓(xùn)機(jī)構(gòu)投資補(bǔ)充協(xié)議
- 二零二五年度退租公寓清潔責(zé)任協(xié)議
- 2025年度長沙市租賃房屋租賃合同簽訂及備案服務(wù)合同
- 二零二五年度產(chǎn)品質(zhì)量糾紛協(xié)議范本
- 二零二五年度影視行業(yè)演員合同及緊急救助服務(wù)協(xié)議
- 二零二五年度足浴店員工薪資保底及員工職業(yè)規(guī)劃指導(dǎo)協(xié)議
- 企業(yè)承包經(jīng)營合同范本
- 2025年01月公安部第三研究所公開招聘人民警察筆試筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 光纜線路施工安全協(xié)議書范本
- 教師讀書分享《給教師的建議》課件
- 人民警察紀(jì)律條令試卷含答案
- 婚姻矛盾糾紛調(diào)解培訓(xùn)課件
- 《工程熱力學(xué)》(第四版)配套教學(xué)課件
- 2022年北京市專升本英語真題
- 鍺的提取方法
- 有害物質(zhì)管控清單(歐盟)
- 乙酸乙酯的制備ppt課件
評(píng)論
0/150
提交評(píng)論