版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)的C語(yǔ)言編程稱為C51編程,應(yīng)用C51編程具有以下優(yōu)點(diǎn):
(1)C51編譯器管理內(nèi)部寄存器和存貯器的分配,編程時(shí),無(wú)需考慮不同存儲(chǔ)器的尋址和數(shù)據(jù)類型等細(xì)節(jié)問(wèn)題;
(2)程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式具有良好的模塊化結(jié)構(gòu),使已編好程序容易移植;(3)有豐富的子程序庫(kù)可直接引用,具有較強(qiáng)的數(shù)據(jù)處理能力,從而大大減少用戶編程的工作量;(4)C語(yǔ)言和匯編語(yǔ)言可以交叉使用。
匯編語(yǔ)言程序代碼短、運(yùn)行速度快、但復(fù)雜運(yùn)算編程耗時(shí)。用匯編語(yǔ)言編寫與硬件有關(guān)的部分程序,用C語(yǔ)言編寫與硬件無(wú)關(guān)的運(yùn)算部分程序,充分發(fā)揮兩種語(yǔ)言的長(zhǎng)處,提高開發(fā)效率。
第4章單片機(jī)的C語(yǔ)言編程4.1C51程序結(jié)構(gòu)特點(diǎn)
同標(biāo)準(zhǔn)C一樣,C51的程序是由函數(shù)組成。C語(yǔ)言的函數(shù)以“{”開始,以“}”結(jié)束。
其中必須有一個(gè)主函數(shù)main(),程序的執(zhí)行從主函數(shù)main()開始,調(diào)用其他函數(shù)后返回主函數(shù)main(),最后在主函數(shù)中結(jié)束整個(gè)程序,而不管函數(shù)的排列順序如何。
C語(yǔ)言的語(yǔ)句規(guī)則:
1.每個(gè)變量必須先說(shuō)明后引用。
2.C語(yǔ)言程序一行可以書寫多條語(yǔ)句,但每個(gè)語(yǔ)句必須以“;”結(jié)尾,一個(gè)語(yǔ)句也可以多行書寫。
3.C語(yǔ)言的注釋用/*……*/表示。
4.“{”花括號(hào)必須成對(duì),位置隨意,多個(gè)花括號(hào)可同行書寫,也可逐行書寫。
C語(yǔ)言程序的組成結(jié)構(gòu):
全局變量說(shuō)明/*可被各函數(shù)引用*/
main()/*主函數(shù)*/ {
局部變量說(shuō)明 /*只在本函數(shù)引用*/ 執(zhí)行語(yǔ)句(包括函數(shù)調(diào)用語(yǔ)句); }
fun1(形式參數(shù)表)/*函數(shù)1*/ 形式參數(shù)說(shuō)明
{ 局部變量說(shuō)明 執(zhí)行語(yǔ)句(包括調(diào)用其他函數(shù)語(yǔ)句) }
…
funn(形式參數(shù)表)/*函數(shù)n*/ 形式參數(shù)說(shuō)明
{ 局部變量說(shuō)明 執(zhí)行語(yǔ)句
}
標(biāo)識(shí)符用來(lái)標(biāo)識(shí)源程序中某個(gè)對(duì)象的名字,這些對(duì)象可以是語(yǔ)句、數(shù)據(jù)類型、函數(shù)、變量、數(shù)組等。標(biāo)識(shí)符區(qū)分大小寫,第一個(gè)字符必須是字母或下劃線。
C51中有些庫(kù)函數(shù)的標(biāo)識(shí)符是以下劃線開頭的,所以一般不要以下劃線開頭命名標(biāo)識(shí)符。
C51編譯器規(guī)定標(biāo)識(shí)符只有32個(gè)字符在編譯時(shí)有效,因此在編寫源程序時(shí)標(biāo)識(shí)符的長(zhǎng)度不要超過(guò)32個(gè)字符。
關(guān)鍵字是編程語(yǔ)言保留的特殊標(biāo)識(shí)符,在C語(yǔ)言的程序編寫中不允許標(biāo)識(shí)符與關(guān)鍵字相同。KeilC51編譯器的關(guān)鍵字除了有ANSIC標(biāo)準(zhǔn)的32個(gè)關(guān)鍵字外還根據(jù)51單片機(jī)的特點(diǎn)擴(kuò)展了相關(guān)的關(guān)鍵字。4.2C51的標(biāo)識(shí)符和關(guān)鍵字關(guān)鍵字用途說(shuō)明auto存儲(chǔ)種類說(shuō)明用以說(shuō)明局部變量,缺省值為此break程序語(yǔ)句退出最內(nèi)層循環(huán)體case程序語(yǔ)句switch語(yǔ)句中的選擇項(xiàng)char數(shù)據(jù)類型說(shuō)明單字節(jié)整型數(shù)或字符型數(shù)據(jù)const存儲(chǔ)類型說(shuō)明在程序執(zhí)行過(guò)程中不可更改的常量值continue程序語(yǔ)句轉(zhuǎn)向下一次循環(huán)default程序語(yǔ)句switch語(yǔ)句中的失敗選擇項(xiàng)do程序語(yǔ)句構(gòu)成do…while循環(huán)結(jié)構(gòu)double數(shù)據(jù)類型說(shuō)明雙精度浮點(diǎn)數(shù)else程序語(yǔ)句構(gòu)成if…else選擇結(jié)構(gòu)enum數(shù)據(jù)類型說(shuō)明枚舉extern存儲(chǔ)種類說(shuō)明在其他程序模塊中說(shuō)明了的全局變量float數(shù)據(jù)類型說(shuō)明單精度浮點(diǎn)數(shù)for程序語(yǔ)句構(gòu)成for循環(huán)結(jié)構(gòu)goto程序語(yǔ)句構(gòu)成goto轉(zhuǎn)移結(jié)構(gòu)if程序語(yǔ)句構(gòu)成if…else選擇結(jié)構(gòu)ANSIC標(biāo)準(zhǔn)關(guān)鍵字(1)ANSIC標(biāo)準(zhǔn)關(guān)鍵字(2)關(guān)鍵字用途說(shuō)明int數(shù)據(jù)類型說(shuō)明基本整型數(shù)long數(shù)據(jù)類型說(shuō)明長(zhǎng)整型數(shù)register存儲(chǔ)種類說(shuō)明使用CPU內(nèi)部寄存的變量return程序語(yǔ)句函數(shù)返回short數(shù)據(jù)類型說(shuō)明短整型數(shù)signed數(shù)據(jù)類型說(shuō)明有符號(hào)數(shù),二進(jìn)制數(shù)據(jù)的最高位為符號(hào)位sizeof運(yùn)算符計(jì)算表達(dá)式或數(shù)據(jù)類型的字節(jié)數(shù)static存儲(chǔ)種類說(shuō)明靜態(tài)變量struct數(shù)據(jù)類型說(shuō)明結(jié)構(gòu)類型數(shù)據(jù)switch程序語(yǔ)句構(gòu)成switch選擇結(jié)構(gòu)typedef數(shù)據(jù)類型說(shuō)明重新進(jìn)行數(shù)據(jù)類型定義union數(shù)據(jù)類型說(shuō)明聯(lián)合類型數(shù)據(jù)unsigned數(shù)據(jù)類型說(shuō)明無(wú)符號(hào)數(shù)據(jù)void數(shù)據(jù)類型說(shuō)明無(wú)類型數(shù)據(jù)volatile數(shù)據(jù)類型說(shuō)明該變量在程序執(zhí)行中可被隱含地改變while程序語(yǔ)句構(gòu)成while和do…while循環(huán)結(jié)構(gòu)KeilC51編譯器擴(kuò)展的關(guān)鍵字(1)關(guān)鍵字用途說(shuō)明_at_地址定位為變量定義存儲(chǔ)空間絕對(duì)地址alien函數(shù)特性說(shuō)明聲明與PL/M51兼容的函數(shù)bdata存儲(chǔ)器類型說(shuō)明可位尋址的內(nèi)部RAMbit位標(biāo)量聲明聲明一個(gè)位標(biāo)量或位類型的函數(shù)code存儲(chǔ)器類型說(shuō)明程序存儲(chǔ)器空間compact存儲(chǔ)器模式使用外部分頁(yè)RAM的存儲(chǔ)模式data存儲(chǔ)器類型說(shuō)明直接尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器idata存儲(chǔ)器類型說(shuō)明間接尋址的8051內(nèi)部數(shù)據(jù)存儲(chǔ)器interrupt中斷函數(shù)聲明定義一個(gè)中斷函數(shù)large存儲(chǔ)器模式使用外部RAM的存儲(chǔ)模式pdata存儲(chǔ)器類型說(shuō)明“分頁(yè)”尋址的8051外部數(shù)據(jù)存儲(chǔ)器_priority_多任務(wù)優(yōu)先聲明RTX51的任務(wù)優(yōu)先級(jí)reentrant再入函數(shù)聲明定義一個(gè)再入函數(shù)sbit位變量聲明聲明一個(gè)可位尋址變量sfr特殊功能寄存器聲明聲明一個(gè)特殊功能寄存器(8位)KeilC51編譯器擴(kuò)展的關(guān)鍵字(2)關(guān)鍵字用途說(shuō)明sfr16特殊功能寄存器聲明聲明一個(gè)16位的特殊功能寄存器small存儲(chǔ)器模式內(nèi)部RAM的存儲(chǔ)模式_task_任務(wù)聲明定義實(shí)時(shí)多任務(wù)函數(shù)using寄存器組定義定義8051的工作寄存器組xdata存儲(chǔ)器類型說(shuō)明8051外部數(shù)據(jù)存儲(chǔ)器4.3C51的數(shù)據(jù)類型
C51的數(shù)據(jù)有常量和變量之分。
常量
——在程序運(yùn)行中其值不變的量。變量
——在程序運(yùn)行中其值可以改變的量。
定義一個(gè)變量,編譯系統(tǒng)就會(huì)自動(dòng)為它安排一個(gè)存貯區(qū),具體的地址值,用戶不必在意。一個(gè)變量由變量名和變量值構(gòu)成.
變量名:存貯單元地址的符號(hào)表示。變量的值:變量所在地址單元存放的內(nèi)容。數(shù)據(jù)類型:數(shù)據(jù)的長(zhǎng)度。
C51編譯器支持?jǐn)?shù)據(jù)類型
數(shù)
據(jù)
類
型長(zhǎng)
度值
域位型bit1Bit0或1字符型signedchar1Byte-128~+127unsignedchar1Byte0~255
整形signedint2Byte-32768~+32767unsignedint2Byte0~65535signedlong4Byte-2147483648~+2147483647unsignedlong4Byte0~4294967295實(shí)型Float4Byte1.176E-38~3.40E+38指針型data/idata/pdata1Byte1字節(jié)地址code/xdata2Byte2字節(jié)地址通用指針3Byte其中1字節(jié)為儲(chǔ)存器類型編碼,2,3字節(jié)為地址偏移量訪問(wèn)SFR的數(shù)據(jù)類型sbit1Bit0或1sfr1Byte0~255sfr162Byte0~65535*11C51增加的特殊的數(shù)據(jù)類型1.bit位標(biāo)量bit位標(biāo)量是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位標(biāo)量。它的值是一個(gè)二進(jìn)制位,不是0,就是1。
bit位變量名例:bitlock;
/*將lock定義為位變量*/lock=1;*122.sfr特殊功能寄存器
MCS-51系列單片機(jī)片內(nèi)有21個(gè)特殊功能寄存器(SFR),分散在片內(nèi)RAM區(qū)的0x80~0xFF地址范圍內(nèi)。對(duì)SFR的操作只能用直接尋址方式。為了能直接訪問(wèn)這些特殊功能寄存器,C51提供了定義sfr的方法。sfr是一種C51擴(kuò)充數(shù)據(jù)類型,占用一個(gè)內(nèi)存單元,值域?yàn)?~255。語(yǔ)法如下:
sfr特殊寄存器名=寄存器地址
*13例如:sfrP1=0x90P1=255
定義一個(gè)特殊功能寄存器變量“P1”,0x90是指51單片機(jī)的P1端口地址90H,變量P1即指51單片機(jī)的P1端口。在后面的語(yǔ)句中可以用P1=255(對(duì)P1端口的所有引腳置高電平)之類的語(yǔ)句操作特殊功能寄存器。*14例:sfrPSW=0xD0;
/*定義程序狀態(tài)字PSW,因MCS-51單片機(jī)的PSW地址為D0H*/sfrTMOD=0x89;/*定義定時(shí)/計(jì)數(shù)器方式控制寄存器TMOD,因MCS-51單片機(jī)的TMOD地址為89H*/sfrSCON=0x98;
/*定義串口控制寄存器SCON,因MCS-51單片機(jī)的SCON地址為8H*/*153.sfr1616位特殊功能寄存器sfr16也是一種C51擴(kuò)充數(shù)據(jù)類型,用于定義存在于MCS-51單片機(jī)內(nèi)部RAM的16位特殊功能寄存器,如定時(shí)器T0和T1。
sfr16型數(shù)據(jù)占用2個(gè)內(nèi)存單元,取值范圍為0~65535。
*16
sbit也是一種C51擴(kuò)充數(shù)據(jù)類型,利用sbit訪問(wèn)芯片內(nèi)部可尋址的特殊功能寄存器中的位。定義方法有如下三種:(1)sbit特殊功能寄存器位名=位地址
將位的絕對(duì)地址賦給位變量,位地址必須位于80H~FFH(特殊功能寄存器的位地址)之間。4.sbit可尋址位*17(2)sbit特殊功能寄存器位名=特殊功能寄存器名^位位置當(dāng)可尋址位位于特殊功能寄存器中時(shí),可采用這種方法。位位置是一個(gè)0~7之間的常數(shù)。(3)sbitsbit特殊功能寄存器位名=字節(jié)地址^位位置這種方法是以一個(gè)常數(shù)(字節(jié)地址)作為基地址,該常數(shù)必須在80H~FFH(特殊功能寄存器的字節(jié)地址)之間。位位置是一個(gè)0~7之間的常數(shù)。*18例:sfr
PSW=0xD0; /*首先定義程序狀態(tài)字PSW,
因MCS-51單片機(jī)的PSW地址為D0H*/sbitOV=PSW^2;
/*在前面定義了PSW后,OV位于PSW的第2位*/sbitAC=0xD0^6;
/*D0H是程序狀態(tài)字PSW的字節(jié)地址,
輔助進(jìn)位標(biāo)志位AC位于PSW的第6位*/sbitRS0=0xD0^3;
/*工作寄存器組控制位RS0位于PSW的第3位*/sbitCY=0xD7;
/*進(jìn)位標(biāo)志位Cy的絕對(duì)位地址為D7H*/對(duì)位變量的定義C51對(duì)位變量的定義方法有三種:1.定義bit類型變量
如bitmn;mn為位變量,其值只能是“0”或“1”,其位地址C51自行安排在可位尋址區(qū)的bdata區(qū)。
2.采用字節(jié)尋址變量.位的方法如bdataintibase;
/*ibase定義為整型變量*/
sbitmybit=ibase^15;
/*mybit定義為ibase的D15位*/
這里位是運(yùn)算符“^”相當(dāng)于匯編中的“·”,其后的最大取值依賴于該位所在的變量的類型,如定義為char最大值只能為7。
3.對(duì)特殊功能寄存器的位的定義方法1:使用頭文件及sbit定義符;多用于無(wú)位名的可尋址位。如#include<reg51.h>
sbitP1_1=P1^1;
/*P1_1為P1口的第1位*/
sbitac=ACC^7;/*ac定義為累加器A的第7位*/方法2:使用頭文件reg51.h,再直接用位名稱。例如#include<reg51.h>RS1=1;
RS0=0;
方法3:用字節(jié)地址位表示如sbitOV=0xD0^2;方法4:用寄存器名.位定義
如sfrPSW=0xd0;/*定義PSW地址為d0H*/
sbitCY=PSW^7;/*CY為PSW·7*/*21例5-2
特殊功能寄存器的訪問(wèn)。#include”reg51.h”sbitP10=P1^0; /*定義P10為P1口第0位,即P1.0口*/sbitP12=P1^2; /*定義P12為P1口第2位,即P1.2口*/
voidmain() { P10=1; /*置位P1.0口*/ P12=0; /*復(fù)位P1.2口*/ PSW=0x08; /*程序狀態(tài)字置0x08*/ …… }----應(yīng)用實(shí)例C5l編譯器除了能支持以上這些基本數(shù)據(jù)類型之外,還能支持一些復(fù)雜的組合型數(shù)據(jù)類型,如數(shù)組類型、指針類型、結(jié)構(gòu)類型、聯(lián)合類型等這些復(fù)雜的數(shù)據(jù)類型。
使用頭文件
C51建有頭文件reg51.h、reg52.h,在該頭文件中對(duì)51或52系列單片機(jī)所有的特殊功能寄存器的進(jìn)行了sfr定義,對(duì)特殊功能寄存器的有位名稱的可尋址位進(jìn)行了sbit定義,因此,只要用包含語(yǔ)句#include<reg51.h>就可以直接引用特殊功能寄存器名,或直接引用位名稱。要特別注意:在引用時(shí)特殊功能寄存器或者位名稱必須大寫。
4.4數(shù)據(jù)的存儲(chǔ)類型和存儲(chǔ)模式
同ANSIC一樣,C51規(guī)定變量必須先定義后使用。C51對(duì)變量的進(jìn)行定義的格式如下:
[存儲(chǔ)種類]數(shù)據(jù)類型[存儲(chǔ)器類型]變量名表其中,存儲(chǔ)種類和存儲(chǔ)器類型是可選項(xiàng)。存儲(chǔ)類型是C51中增加的。一、變量的存儲(chǔ)種類
按變量的有效作用范圍可以將其劃分為局部變量和全局變量;還可以按變量的的存儲(chǔ)方式為其劃分存儲(chǔ)種類。在C語(yǔ)言中變量有四種存儲(chǔ)種類,即自動(dòng)(auto)、外部(extern)、靜態(tài)(static)和寄存器(register)。二、數(shù)據(jù)的存儲(chǔ)類型
C51是面向8XX51系列單片機(jī)及硬件控制系統(tǒng)的開發(fā)語(yǔ)言,它定義的任何變量必須以一定的存儲(chǔ)類型的方式定位在8XX51的某一存儲(chǔ)區(qū)中,否則便沒有意義。因此在定義變量類型時(shí),還必須定義它的存儲(chǔ)類型,C51的變量有如下幾種存儲(chǔ)類型:存儲(chǔ)器類型
描述data直接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),00H-7FH(128Byte)bdata可為尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),20H-2FH,允許位與字節(jié)混合訪問(wèn)(16Byte)idata間接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),可訪問(wèn)全部?jī)?nèi)部地址空間00H-FFH(256Byte)pdata分頁(yè)(256Byte)外部數(shù)據(jù)存儲(chǔ)區(qū),由操作碼MOVX@Ri訪問(wèn)xdata外部數(shù)據(jù)存儲(chǔ)區(qū)(64KB),由操作碼MOVX@DPTR訪問(wèn)code程序存儲(chǔ)區(qū)(64KB),由操作碼MOVC@A+DPTR訪問(wèn)如果在變量定義時(shí)省略了存儲(chǔ)器類型標(biāo)識(shí)符,C51編譯器會(huì)選擇默認(rèn)的存儲(chǔ)器類型。默認(rèn)的存儲(chǔ)器類型由SMALL、COMPACT和LARGE存儲(chǔ)模式指令決定。1)data區(qū)對(duì)data區(qū)的尋址是最快的,所以應(yīng)該把使用頻率高的變量放在data區(qū),由于空間有限,必須注意使用data區(qū),data區(qū)除了包含程序變量外,還包含了堆棧和寄存器組data區(qū)。在SMALL存儲(chǔ)模式下,未說(shuō)明存儲(chǔ)器類型時(shí),變量默認(rèn)被定位在data區(qū)。2)bdata區(qū)當(dāng)在DATA區(qū)的位尋址區(qū)定義變量,這個(gè)變量就可進(jìn)行位尋址,并且聲明位變量。這對(duì)狀態(tài)寄存器來(lái)說(shuō)十分有用,因?yàn)樗梢詥为?dú)使用變量的每一位,而不一定要用位變量名引用位變量。3)idata區(qū)idata區(qū)也可以存放使用比較頻繁的變量,使用寄存器作為指針進(jìn)行尋址。在寄存器中設(shè)置8位地址進(jìn)行間接尋址,與外部存儲(chǔ)器尋址比較,它的指令執(zhí)行周期和代碼長(zhǎng)度都比較短。4)pdata和xdata區(qū)在這兩個(gè)區(qū)聲明變量和在其他區(qū)的語(yǔ)法是一樣的,pdata區(qū)只有256B,而xdata區(qū)可達(dá)65536B5)code區(qū)code區(qū)即80C51的程序代碼區(qū),所以代碼區(qū)的數(shù)據(jù)是不可改變的,80C51的代碼區(qū)不可重寫。一般代碼區(qū)中可存放數(shù)據(jù)表,跳轉(zhuǎn)向量和狀態(tài)表。如果用戶不對(duì)變量的存貯類型定義,則編譯器承認(rèn)默認(rèn)存貯類型,默認(rèn)的存貯類型由編譯控制命令的存貯的模式部分決定。例:
datacharvar;
/*字符變量var定位在片內(nèi)RAM區(qū)*/charcodeMSG[]=″ENTERPARAMETER:″
/*字符數(shù)組定位在程序存貯區(qū)*/
unsignedlongxdataarray[100];
/*無(wú)符號(hào)長(zhǎng)型數(shù)組定位在片外RAM區(qū),每元素占4bytes*/
floatidatax,y,z;
/*實(shí)型變量x,y,z,定位在片內(nèi)用間址訪問(wèn)的內(nèi)部RAM區(qū)*/
bitlock;
/*位變量Lock定位在片內(nèi)RAM可位尋址區(qū)*/unsignedintpdatadimension;
/*無(wú)符號(hào)整型變量
dimension定位在分頁(yè)的外部RAM區(qū)*/unsignedcharxdatavector[10][4][4];
/*無(wú)符號(hào)字符型三維數(shù)組,定位在片外RAM區(qū)*/三、數(shù)據(jù)的存儲(chǔ)模式在固定的存貯器地址進(jìn)行變量參數(shù)傳遞是C51的一個(gè)標(biāo)準(zhǔn)特征,定義了變量、參數(shù)傳遞區(qū)的存貯器模式,也就是默認(rèn)了變量和參數(shù)傳遞區(qū)存貯器類型、無(wú)需再對(duì)變量和參數(shù)傳遞區(qū)的存貯器類型進(jìn)行說(shuō)明。存貯器模式?jīng)Q定了變量的默認(rèn)存貯器類型、參數(shù)傳遞區(qū)和無(wú)明確存貯區(qū)類型的說(shuō)明。有三種存貯器模式:SMALL、LARGE和COMPACT存儲(chǔ)器模式
描述SMALL參數(shù)及局部變量放入可直接尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(128Byte,默認(rèn)存儲(chǔ)器類型是DATA)COMPACT參數(shù)及局部變量放入分頁(yè)外部數(shù)據(jù)存儲(chǔ)區(qū)(最大256Byte,默認(rèn)存儲(chǔ)類型是PDATA)LARGE參數(shù)及局部變量直接放入外部數(shù)據(jù)存儲(chǔ)器(最大64KB,默認(rèn)存儲(chǔ)器類型為XDATA)1.小(SMALL)模式所有變量都默認(rèn)在8051的內(nèi)部數(shù)據(jù)存儲(chǔ)器中。這和用data顯式定義變量起到相同的作用。
2.緊湊(COMPACT)模式此模式中,所有變量都默認(rèn)在8051的外部數(shù)據(jù)存儲(chǔ)器的一頁(yè)中。3.大(LARGE)模式
在大模式下,所有的變量都默認(rèn)在外部存儲(chǔ)器中(xdata)。例如:設(shè)C語(yǔ)言源程序?yàn)镻ROR.C,若使程序中的變量類型和參數(shù)傳遞區(qū)限定在外部數(shù)據(jù)存貯區(qū),有兩種方法:方法1:在程序的第一句加預(yù)處理命令
#pragmacompact。方法2:用C51對(duì)PROR.C進(jìn)行編譯時(shí),使用編譯控制命令:C51PROR.CCOMPACT。
如果在變量說(shuō)明時(shí)略去存貯器類型標(biāo)志符,編譯器會(huì)自動(dòng)選擇默認(rèn)的存貯器類型。默認(rèn)的存貯器類型進(jìn)一步由控制指令SMALL、COMPACT和LARGE限制。例:如果聲明charvar,則默認(rèn)的存貯器模式為SMALL,var放在data存貯區(qū);如果使用COMPACT模式,var放入idata存貯區(qū);使用LARGE模式,var被放入外部存貯區(qū)(xdata存貯區(qū))。
四、對(duì)存貯器和外接I/O口的絕對(duì)地址訪問(wèn)
C51對(duì)存貯器和外接I/O口的絕對(duì)地址訪問(wèn)可以通過(guò)指針訪問(wèn),也可以通過(guò)函數(shù)訪問(wèn)。
1.對(duì)存貯器的絕對(duì)地址訪問(wèn)
利用絕對(duì)地址訪問(wèn)的頭文件absacc.h可對(duì)不同的存貯區(qū)進(jìn)行訪問(wèn)。該頭文件的函數(shù)有:
CBYTE (訪問(wèn)code區(qū)字符型)
DBYTE (訪問(wèn)data區(qū)字符型)
PBYTE (訪問(wèn)pdata或I/O)
XBYTE (訪問(wèn)xdata或I/O)
還有CWORD、DWORD、PWORD和XWORD四個(gè)函數(shù),它們的訪問(wèn)區(qū)域同上,只是訪問(wèn)的類型為int型
例: #include<absacc.h>
#definecomXBYTE[0x07ff]
那么后面程序com變量出現(xiàn)的地方,就是對(duì)地址為07ffH外部RAM或I/O口進(jìn)行訪問(wèn)。例:XWORD[0]=0x9988;
即將9988H(int類型)送入外部RAM的0號(hào)和1號(hào)單元。使用中要
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 低碳環(huán)保領(lǐng)域合作承諾書4篇
- 2026云南紅河州個(gè)舊市醫(yī)療衛(wèi)生共同體賈沙分院招聘編外工作人員1人備考題庫(kù)有完整答案詳解
- 2026上半年黑龍江齊齊哈爾大學(xué)招聘碩士人員27人備考題庫(kù)附參考答案詳解(奪分金卷)
- 20256中共昭通市委辦公室招聘城鎮(zhèn)公益性崗位工作人員的8人備考題庫(kù)帶答案詳解(輕巧奪冠)
- 2026北京城鄉(xiāng)旅游汽車出租有限責(zé)任公司招聘40人備考題庫(kù)及答案詳解(考點(diǎn)梳理)
- 2026內(nèi)蒙古呼和浩特航天經(jīng)濟(jì)開發(fā)區(qū)管理委員會(huì)招聘所屬國(guó)有企業(yè)管理人員2人備考題庫(kù)附答案詳解(a卷)
- 績(jī)效考核指標(biāo)體系設(shè)計(jì)手冊(cè)
- 2026上半年安徽事業(yè)單位聯(lián)考馬鞍山市直單位招聘88人備考題庫(kù)含答案詳解(奪分金卷)
- 2026廣東廣州市中山大學(xué)附屬口腔醫(yī)院工勤人員招聘1人備考題庫(kù)含答案詳解(研優(yōu)卷)
- 2026新疆圖木舒克市天恒資產(chǎn)經(jīng)營(yíng)有限公司招聘9人備考題庫(kù)帶答案詳解(預(yù)熱題)
- 音樂作品制作與發(fā)行服務(wù)合同
- IT服務(wù)外包過(guò)渡期交接方案
- 制粒崗位年終總結(jié)
- 《中國(guó)心力衰竭診斷和治療指南2024》解讀(總)
- 三年級(jí)下冊(cè)語(yǔ)文閱讀理解(15篇)
- 《MSA測(cè)量系統(tǒng)分析》考核試題
- JB-T 14188.1-2022 激光切管機(jī) 第1部分:精度檢驗(yàn)
- XJ4830晶體管圖示儀說(shuō)明書
- (汪曉贊)運(yùn)動(dòng)教育課程模型
- GB/T 42677-2023鋼管無(wú)損檢測(cè)無(wú)縫和焊接鋼管表面缺欠的液體滲透檢測(cè)
- 外科學(xué)課件-后天性心臟病的外科治療
評(píng)論
0/150
提交評(píng)論