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

下載本文檔

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

文檔簡介

KeilC51應(yīng)用程序設(shè)計KeilC51應(yīng)用程序設(shè)計1KeilC51程序的一般結(jié)構(gòu)

與標(biāo)準(zhǔn)C語言相同,KeilC51程序由一個或多個函數(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ù)定義*/

KeilC51程序的一般結(jié)構(gòu)與2數(shù)據(jù)類型

KeilC51編譯器除了支持常用的char(字符型),int(整型),long(長整型),float(浮點型),*(指針型)等基本數(shù)據(jù)類型之外,還支持以下擴(kuò)充數(shù)據(jù)類型。

bit位類型。可定義一個位變量,但不能定義位 指針,也不能定義位數(shù)組。

sfr特殊功能寄存器??梢远x8051單片機(jī)的所 有內(nèi)部8位特殊功能寄存器。sfr型數(shù)據(jù)占用 一個內(nèi)存單元,其取值范圍是0~255。

sfr1616位特殊功能寄存器。它占用兩個內(nèi)存單元, 取值范圍是0~65535,可以定義8051單片機(jī) 內(nèi)部16位特殊功能寄存器。

sbit可尋址位??梢远x8051單片機(jī)內(nèi)部RAM中的 可尋址位或特殊功能寄存器中的可尋址位。數(shù)據(jù)類型KeilC51編譯器除了支持常用的char(字符3KeilC51能夠識別的數(shù)據(jù)類型

數(shù)據(jù)類型長度值域unsignedchar單字節(jié)0~255signedchar單字節(jié)-128~127unsignedint雙字節(jié)0~65536signedint雙字節(jié)-32768~32767unsignedlong四字節(jié)0~4294967295signedlong四字節(jié)-2147483648~2147483647float四字節(jié)±1.175494E-38~±3.402823E+38*1~3字節(jié)對象的地址bit位0或1sfr單字節(jié)0~255sfr16雙字節(jié)0~65536sbit位0或1KeilC51能夠識別的數(shù)據(jù)類型數(shù)據(jù)類型長度值4變量定義格式KeilC51中對變量進(jìn)行定義的格式如下:[存儲種類]數(shù)據(jù)類型[存儲器類型]變量名表;其中,“存儲種類”和“存儲器類型”是可選項。變量的存儲種類有四種:自動(auto)、外部(extern)、靜態(tài)(static)和寄存器(register)。定義變量時如果省略存儲種類選項,則該變量將為自動(auto)變量。KeilC51編譯器還允許說明變量的存儲器類型,使之能夠在8051單片機(jī)內(nèi)準(zhǔn)確地定位。變量定義格式KeilC51中對變量進(jìn)行定義的格式如下:5KeilC51能夠識別的存儲器類型

存儲器類型說明DATA直接尋址的片內(nèi)數(shù)據(jù)存儲器(128字節(jié)),訪問速度最快。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指令訪問。KeilC51能夠識別的存儲器類型存儲器類型說6編譯模式KeilC51定義變量時如果省略“存儲器類型”選項,則按編譯時使用的存儲器模式SMALL、COMPACT或LARGE來規(guī)定默認(rèn)存儲器類型,確定變量的存儲器空間,函數(shù)中不能采用寄存器傳遞的參數(shù)變量和過程變量也保存在默認(rèn)的存儲器空間。

編譯模式KeilC51定義變量時如果省略“存儲器類7KeilC51能夠識別的編譯器模式

編譯模式存儲器類型SMALLDATA,變量被定義在8051片內(nèi)數(shù)據(jù)存儲器中。COMPACTPDATA,變量被定義在分頁尋址的片外數(shù)據(jù)存儲器中,每一頁片外數(shù)據(jù)存儲器的長度為256字節(jié)。這時對變量的訪問是通過寄存器間接尋址(MOVX@Ri)進(jìn)行。LARGEXDATA,變量被定義在片外數(shù)據(jù)存儲器中(最大可達(dá)64K字節(jié)),使用數(shù)據(jù)指針DPTR來間接訪問變量(MOVX@DPTR)。

KeilC51能夠識別的編譯器模式編譯模式存儲器類型SM8一般指針與基于存儲器的指針

KeilC51支持兩種指針類型:一般指針和基于存儲器的指針。一般指針可用于存取任何變量而不必考慮變量在8051單片機(jī)存儲器空間的位置,許多C51庫函數(shù)采用了一般指針。定義一般指針與ANSIC相同,例如:char*sptr;/*char型指針*/int*numptr/*int型指針*/定義基于存儲器的指針時可以指定存儲器空間,例如:chardata*xdatastr;/*指向data空間char型數(shù)據(jù)的指針,指針本身在xdata空間*/intxdata*datanum;/*指向xdata空間char型數(shù)據(jù)的指針,指針本身在data空間*/longcode*idatapow;/*指向code空間long型數(shù)據(jù)的指針,指針本身在idata空間*/一般指針與基于存儲器的指針KeilC51支持兩種指9KeilC51對存儲器的訪問KeilC51可以采用指針變量來訪問存儲器地址空間。由于8051單片機(jī)存儲器結(jié)構(gòu)自身的特點,僅用指針方式訪問有時會感覺不太方便,也可以利用庫函數(shù)中絕對地址訪問頭文件“ABDACC.H”來訪問不同區(qū)域的存儲器地址空間。KeilC51對存儲器的訪問KeilC51可以采用指針變10絕對地址訪問

KeilC51在源程序中定義變量時,可以利用擴(kuò)展關(guān)鍵字“_at_”來對指定變量在存儲器空間的絕對地址,一般格式如下:[存儲器類型]數(shù)據(jù)類型標(biāo)識符_at_地址常數(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ù)定義宏來指定變量的絕對地址。絕對地址訪問KeilC51在源程序中定義變量時,11頭文件“ABSACC.H”中的預(yù)定義宏宏定義可訪問的存儲器空間及數(shù)據(jù)類型CBYTE[地址](訪問CODE區(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型)頭文件“ABSACC.H”中的預(yù)定義宏宏定義可訪問的存儲器空12中斷服務(wù)函數(shù)與寄存器組定義

KeilC51編譯器支持在C語言源程序中直接編寫8051單片機(jī)的中斷服務(wù)函數(shù)程序,一般形式為:函數(shù)類型函數(shù)名(形式參數(shù)表)[interruptn][usingn]關(guān)鍵字intrrupt后面的n是中斷號,n的取值范圍為0~31。編譯器從8n+3處產(chǎn)生中斷向量,具體的中斷號n和中斷向量取決于8051系列單片機(jī)芯片型號。關(guān)鍵字using用來選擇8051單片機(jī)中不同的工作寄存器組。using后面的n是一個0~3的常整數(shù),分別選中4個不同的工作寄存器組。中斷服務(wù)函數(shù)與寄存器組定義KeilC51編譯器支13常用中斷號與中斷向量

中斷號n中斷源中斷向量8n+30外部中斷00003H1定時器0000BH2外部中斷10013H3定時器1001BH4串行口0023H常用中斷號與中斷向量中斷號n中斷源中斷向量8n+314數(shù)據(jù)調(diào)用協(xié)議

KeilC51編譯器規(guī)定數(shù)據(jù)在內(nèi)存中按高字節(jié)地址在前、低字節(jié)地址在后的順序存放。一個值為0x12345678的“l(fā)ong”類型數(shù)據(jù),在內(nèi)存中存儲格式如下:地址+0+1+2+3內(nèi)容0x120x340x560x78數(shù)據(jù)調(diào)用協(xié)議KeilC51編譯器規(guī)定數(shù)據(jù)在內(nèi)存中15數(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)容SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM其中,S為符號位,“0”正“1”負(fù)。E為用原碼表示的階碼,占用8位二進(jìn)制數(shù),存放在兩個字節(jié)中,E的取值范圍是1~254。注意,實際上以2為底的指數(shù)要用E的值減去偏移量127,實際冪指數(shù)的取值范圍為-126~+127。M為尾數(shù)的小數(shù)部分,用23位二進(jìn)制數(shù)表示,存放在三個字節(jié)中。尾數(shù)的整數(shù)部分永遠(yuǎn)為1,因此不予保存,但它是隱含存在的。小數(shù)點位于隱含的整數(shù)位“1”的后面。數(shù)據(jù)調(diào)用協(xié)議“float”類型數(shù)據(jù)的長度為4個字節(jié)16數(shù)據(jù)調(diào)用協(xié)議

KeilC51編譯器支持“基于存儲器”的指針和“一般”指針。基于存儲器類型data、idata和pdata的指針具有1個字節(jié)的長度,基于存儲器類型xdata和code的指針具有2個字節(jié)的長度,一般指針具有3個字節(jié)的長度。在一般指針的3個字節(jié)中,第一個字節(jié)表示存儲器類型,第二、第三個字節(jié)表示指針的地址偏移量。一般指針在內(nèi)存中的存儲格式為:

地址+0+1+2內(nèi)容存儲器類型高字節(jié)地址偏移量低字節(jié)地址偏移量第一個字節(jié)中存儲器類型的編碼如下:存儲器類型

idata/data/bdata

xdatapdatacode編碼值0x000x010xFE0xFF數(shù)據(jù)調(diào)用協(xié)議KeilC51編譯器支持“基于17KeilC51的庫函數(shù)

本征庫函數(shù)

本征庫函數(shù)是指編譯時直接將固定的代碼插入到當(dāng)前行,而不是用匯編語言中的“ACALL”和“LCALL”指令來實現(xiàn)調(diào)用,從而大大提高函數(shù)的訪問效率。非本征庫函數(shù)則必須由“ACALL”和“LCALL”指令來實現(xiàn)調(diào)用。KeilC51的本征庫函數(shù)只有9個,數(shù)量雖少,但非常有用。本征庫函數(shù)在頭文件INTRINS.H中定義。字符判斷轉(zhuǎn)換庫函數(shù)

字符判斷轉(zhuǎn)換庫函數(shù)的原型聲明在頭文件CTYPE.H中定義。

KeilC51的庫函數(shù)本征庫函數(shù)18KeilC51的庫函數(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=0x52;/*SCON置初值*/TMOD=0x20;/*TMOD置初值*/TH1=0xf3;/*T1置初值*/TR1=1;/*啟動T1*/KeilC51的庫函數(shù)輸入輸出庫函數(shù)19KeilC51的庫函數(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)存分配庫函數(shù)的原型聲明包含在頭文件STDLIB.H中,利用該庫函數(shù)可以完成數(shù)據(jù)類型轉(zhuǎn)換以及存儲器分配操作。

KeilC51的庫函數(shù)字符串處理庫函數(shù)20KeilC51的庫函數(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)存分配庫函數(shù)的原型聲明包含在頭文件STDLIB.H中,利用該庫函數(shù)可以完成數(shù)據(jù)類型轉(zhuǎn)換以及存儲器分配操作。

數(shù)學(xué)計算庫函數(shù)數(shù)學(xué)計算庫函數(shù)的原型聲明包含在頭文件MATH.H中。KeilC51的庫函數(shù)字符串處理庫函數(shù)21KeilC51應(yīng)用程序設(shè)計KeilC51應(yīng)用程序設(shè)計22KeilC51程序的一般結(jié)構(gòu)

與標(biāo)準(zhǔn)C語言相同,KeilC51程序由一個或多個函數(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ù)定義*/

KeilC51程序的一般結(jié)構(gòu)與23數(shù)據(jù)類型

KeilC51編譯器除了支持常用的char(字符型),int(整型),long(長整型),float(浮點型),*(指針型)等基本數(shù)據(jù)類型之外,還支持以下擴(kuò)充數(shù)據(jù)類型。

bit位類型??啥x一個位變量,但不能定義位 指針,也不能定義位數(shù)組。

sfr特殊功能寄存器。可以定義8051單片機(jī)的所 有內(nèi)部8位特殊功能寄存器。sfr型數(shù)據(jù)占用 一個內(nèi)存單元,其取值范圍是0~255。

sfr1616位特殊功能寄存器。它占用兩個內(nèi)存單元, 取值范圍是0~65535,可以定義8051單片機(jī) 內(nèi)部16位特殊功能寄存器。

sbit可尋址位??梢远x8051單片機(jī)內(nèi)部RAM中的 可尋址位或特殊功能寄存器中的可尋址位。數(shù)據(jù)類型KeilC51編譯器除了支持常用的char(字符24KeilC51能夠識別的數(shù)據(jù)類型

數(shù)據(jù)類型長度值域unsignedchar單字節(jié)0~255signedchar單字節(jié)-128~127unsignedint雙字節(jié)0~65536signedint雙字節(jié)-32768~32767unsignedlong四字節(jié)0~4294967295signedlong四字節(jié)-2147483648~2147483647float四字節(jié)±1.175494E-38~±3.402823E+38*1~3字節(jié)對象的地址bit位0或1sfr單字節(jié)0~255sfr16雙字節(jié)0~65536sbit位0或1KeilC51能夠識別的數(shù)據(jù)類型數(shù)據(jù)類型長度值25變量定義格式KeilC51中對變量進(jìn)行定義的格式如下:[存儲種類]數(shù)據(jù)類型[存儲器類型]變量名表;其中,“存儲種類”和“存儲器類型”是可選項。變量的存儲種類有四種:自動(auto)、外部(extern)、靜態(tài)(static)和寄存器(register)。定義變量時如果省略存儲種類選項,則該變量將為自動(auto)變量。KeilC51編譯器還允許說明變量的存儲器類型,使之能夠在8051單片機(jī)內(nèi)準(zhǔn)確地定位。變量定義格式KeilC51中對變量進(jìn)行定義的格式如下:26KeilC51能夠識別的存儲器類型

存儲器類型說明DATA直接尋址的片內(nèi)數(shù)據(jù)存儲器(128字節(jié)),訪問速度最快。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指令訪問。KeilC51能夠識別的存儲器類型存儲器類型說27編譯模式KeilC51定義變量時如果省略“存儲器類型”選項,則按編譯時使用的存儲器模式SMALL、COMPACT或LARGE來規(guī)定默認(rèn)存儲器類型,確定變量的存儲器空間,函數(shù)中不能采用寄存器傳遞的參數(shù)變量和過程變量也保存在默認(rèn)的存儲器空間。

編譯模式KeilC51定義變量時如果省略“存儲器類28KeilC51能夠識別的編譯器模式

編譯模式存儲器類型SMALLDATA,變量被定義在8051片內(nèi)數(shù)據(jù)存儲器中。COMPACTPDATA,變量被定義在分頁尋址的片外數(shù)據(jù)存儲器中,每一頁片外數(shù)據(jù)存儲器的長度為256字節(jié)。這時對變量的訪問是通過寄存器間接尋址(MOVX@Ri)進(jìn)行。LARGEXDATA,變量被定義在片外數(shù)據(jù)存儲器中(最大可達(dá)64K字節(jié)),使用數(shù)據(jù)指針DPTR來間接訪問變量(MOVX@DPTR)。

KeilC51能夠識別的編譯器模式編譯模式存儲器類型SM29一般指針與基于存儲器的指針

KeilC51支持兩種指針類型:一般指針和基于存儲器的指針。一般指針可用于存取任何變量而不必考慮變量在8051單片機(jī)存儲器空間的位置,許多C51庫函數(shù)采用了一般指針。定義一般指針與ANSIC相同,例如:char*sptr;/*char型指針*/int*numptr/*int型指針*/定義基于存儲器的指針時可以指定存儲器空間,例如:chardata*xdatastr;/*指向data空間char型數(shù)據(jù)的指針,指針本身在xdata空間*/intxdata*datanum;/*指向xdata空間char型數(shù)據(jù)的指針,指針本身在data空間*/longcode*idatapow;/*指向code空間long型數(shù)據(jù)的指針,指針本身在idata空間*/一般指針與基于存儲器的指針KeilC51支持兩種指30KeilC51對存儲器的訪問KeilC51可以采用指針變量來訪問存儲器地址空間。由于8051單片機(jī)存儲器結(jié)構(gòu)自身的特點,僅用指針方式訪問有時會感覺不太方便,也可以利用庫函數(shù)中絕對地址訪問頭文件“ABDACC.H”來訪問不同區(qū)域的存儲器地址空間。KeilC51對存儲器的訪問KeilC51可以采用指針變31絕對地址訪問

KeilC51在源程序中定義變量時,可以利用擴(kuò)展關(guān)鍵字“_at_”來對指定變量在存儲器空間的絕對地址,一般格式如下:[存儲器類型]數(shù)據(jù)類型標(biāo)識符_at_地址常數(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ù)定義宏來指定變量的絕對地址。絕對地址訪問KeilC51在源程序中定義變量時,32頭文件“ABSACC.H”中的預(yù)定義宏宏定義可訪問的存儲器空間及數(shù)據(jù)類型CBYTE[地址](訪問CODE區(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型)頭文件“ABSACC.H”中的預(yù)定義宏宏定義可訪問的存儲器空33中斷服務(wù)函數(shù)與寄存器組定義

KeilC51編譯器支持在C語言源程序中直接編寫8051單片機(jī)的中斷服務(wù)函數(shù)程序,一般形式為:函數(shù)類型函數(shù)名(形式參數(shù)表)[interruptn][usingn]關(guān)鍵字intrrupt后面的n是中斷號,n的取值范圍為0~31。編譯器從8n+3處產(chǎn)生中斷向量,具體的中斷號n和中斷向量取決于8051系列單片機(jī)芯片型號。關(guān)鍵字using用來選擇8051單片機(jī)中不同的工作寄存器組。using后面的n是一個0~3的常整數(shù),分別選中4個不同的工作寄存器組。中斷服務(wù)函數(shù)與寄存器組定義KeilC51編譯器支34常用中斷號與中斷向量

中斷號n中斷源中斷向量8n+30外部中斷00003H1定時器0000BH2外部中斷10013H3定時器1001BH4串行口0023H常用中斷號與中斷向量中斷號n中斷源中斷向量8n+335數(shù)據(jù)調(diào)用協(xié)議

KeilC51編譯器規(guī)定數(shù)據(jù)在內(nèi)存中按高字節(jié)地址在前、低字節(jié)地址在后的順序存放。一個值為0x12345678的“l(fā)ong”類型數(shù)據(jù),在內(nèi)存中存儲格式如下:地址+0+1+2+3內(nèi)容0x120x340x560x78數(shù)據(jù)調(diào)用協(xié)議KeilC51編譯器規(guī)定數(shù)據(jù)在內(nèi)存中36數(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)容SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM其中,S為符號位,“0”正“1”負(fù)。E為用原碼表示的階碼,占用8位二進(jìn)制數(shù),存放在兩個字節(jié)中,E的取值范圍是1~254。注意,實際上以2為底的指數(shù)要用E的值減去偏移量127,實際冪指數(shù)的取值范圍為-126~+127。M為尾數(shù)的小數(shù)部分,用23位二進(jìn)制數(shù)表示,存放在三個字節(jié)中。尾數(shù)的整數(shù)部分永遠(yuǎn)為1,因此不予保存,但它是隱含存在的。小數(shù)點位于隱含的整數(shù)位“1”的后面。數(shù)據(jù)調(diào)用協(xié)議“float”類型數(shù)據(jù)的長度為4個字節(jié)37數(shù)據(jù)調(diào)用協(xié)議

KeilC51編譯器支持“基于存儲器”的指針和“一般”指針?;诖鎯ζ黝愋蚫ata、idata和pdata的指針具有1個字節(jié)的長度,基于存儲器類型xdata和code的指針具有2個字節(jié)的長度,一般指針具有3個字節(jié)的長度。在一般指針的3個字節(jié)中,第一個字節(jié)表示存儲器類型,第二、第三個字節(jié)表示指針的地址偏移量。一般指針在內(nèi)存中的存儲格式為:

地址+0+1+2內(nèi)容存儲器類型高字節(jié)地址偏移量低字節(jié)地址偏移量第一個字節(jié)中存儲器類型的編碼如下:存儲器類型

idata/data/bdata

xdatapdatacode編碼值0x000x010xFE0xFF數(shù)據(jù)調(diào)用協(xié)議

溫馨提示

  • 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

提交評論