超酷的keil_c51軟件使用及c語(yǔ)言教程_第1頁(yè)
超酷的keil_c51軟件使用及c語(yǔ)言教程_第2頁(yè)
超酷的keil_c51軟件使用及c語(yǔ)言教程_第3頁(yè)
超酷的keil_c51軟件使用及c語(yǔ)言教程_第4頁(yè)
超酷的keil_c51軟件使用及c語(yǔ)言教程_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、超酷的keil c51軟件使用及c語(yǔ)言教程2010-01-09 22:54:29 來(lái)源:互聯(lián)網(wǎng) 電子工程師論壇第一章 Keil C51開(kāi)發(fā)系統(tǒng)基本知識(shí)第一節(jié) 系統(tǒng)概述Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易 用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開(kāi)發(fā),體會(huì)更加深刻。Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代

2、碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。下面詳細(xì)介紹Keil C51開(kāi)發(fā)系統(tǒng)各部分功能和使用。 第二節(jié) Keil C51單片機(jī)軟件開(kāi)發(fā)系統(tǒng)的整體結(jié)構(gòu)C51工具包的整體結(jié)構(gòu),如圖(1)所示,其中uVision與Ishell 分別是C51 for Windows和for Dos的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分 別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件 (.ABS)。ABS文

3、件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接 對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM中。 第三節(jié) Keil C51工具包的安裝1. C51 for Dos在Windows下直接運(yùn)行軟件包中DOS/C51DOS.exe然后選擇安裝目錄即可。完畢后欲使系統(tǒng)正常工作須進(jìn)行以下操作(設(shè)C:/C51為安裝目 錄):修改Autoexec.bat,加入path=C:/C51/BinSet C51LIB=C:/C51/LIBSet C51INC=C:/C51/INC然后運(yùn)行Autoexec.bat 2. C51 fo

4、r Windows的安裝及注意事項(xiàng):在Windows下運(yùn)行軟件包中WIN/Setup.exe,最好選擇安裝目錄與C51 for Dos相同,這樣設(shè)置最簡(jiǎn)單(設(shè)安裝于C:/C51目錄下)。然后將軟件包中crack目錄中的文件拷入C:/C51/Bin目錄下。 第四節(jié) Keil C51工具包各部分功能及使用簡(jiǎn)介1. C51與A51(1) C51C51是C語(yǔ)言編譯器,其使用方法為:C51 sourcefile編譯控制指令或者C51 commandfile其中sourcefile為C源文件(.C)。大量的編譯控制指令完成C51編譯器的全部功能。包控C51輸出文件 C.LST,.OBJ,.I和.SRC文件

5、的控制。源文件(.C)的控制等,詳見(jiàn)第五部分的具體介紹。而Commandfile為一個(gè)連接控制文件其內(nèi)容 包括:.C源文件及各編譯控制指令,它沒(méi)有固定的名字,開(kāi)發(fā)人員可根據(jù)自己的習(xí)慣指定,它適于用控制指令較多的場(chǎng)合。 (2) A51A51是匯編語(yǔ)言編譯器,使用方法為:A51 sourcefile編譯控制指令或A51 commandfile其中sourcefile為匯編源文件(.asm或.a51),而編譯控制指令的使用與其它匯編如ASM語(yǔ)言類(lèi)似,可參考其他匯編 語(yǔ)言材料。Commandfile同C51中的Commandfile類(lèi)似,它使A51使用和修改方便。 2. L51和BL51(1) L51

6、L51是Keil C51軟件包提供的連接/定位器,其功能是將編譯生成的OBJ文件與庫(kù)文件連接定位生成絕對(duì)目標(biāo)文件(.ABS),其使用方法為: L51 目標(biāo)文件列表庫(kù)文件列表 to outputfile 連接控制指令或 L51 Commandfile源程序的多個(gè)模塊分別經(jīng)C51與A51編譯后生成多個(gè)OBJ文件,連接時(shí),這些文件全列于目標(biāo)文件列表中,作為輸入文件,如果還 需與庫(kù)文件(.LiB)相連接,則庫(kù)文件也必須列在其后。outputfile為輸文件名,缺少時(shí)為第一模塊名,后綴為.ABS。連接控制指令提供了連接 定位時(shí)的所有控制功能。Commandfile為連接控制文件,其具體內(nèi)容是包括了目標(biāo)文

7、件列表,庫(kù)文件列表及輸出文件、連接控制命令,以取代第一種繁瑣 的格式,由于目標(biāo)模塊庫(kù)文件大多不止1個(gè),因而第2種方法較多見(jiàn),這個(gè)文件名字也可由使用者隨意指定。 (2) Bl51BL51也是C51軟件包的連接/定位器, 其具有L51的所有功能,此外它還具有以下3點(diǎn)特別之處: a. 可以連接定位大于64kBytes的程序。 b. 具有代碼域及域切換功能(CodeBanking & Bank Switching) c. 可用于RTX51操作系統(tǒng)RTX51是一個(gè)實(shí)時(shí)多任務(wù)操作系統(tǒng),它改變了傳統(tǒng)的編程模式,甚至不必用main( )函數(shù),單片機(jī)系統(tǒng)軟件向RTOS發(fā)展是一種趨勢(shì),這種趨勢(shì)對(duì)于186和386及

8、68K系列CPU更為明顯和必須,對(duì)8051因CPU較為簡(jiǎn)單,程序結(jié)構(gòu) 等都不太復(fù)雜,RTX51作用顯得不太突出,其專(zhuān)業(yè)版軟件PK51軟件包甚至不包括RTX51Full,而只有一個(gè)RTX51TINY版本的RTOS。 RTX51 TINY適用于無(wú)外部RAM的單片機(jī)系統(tǒng),因而可用面很窄,在本文中不作介紹。Bank switching技術(shù)因使用很少也不作介紹。 3. DScope51,Tscope51及Monitor51(1) dScope51dScope51是一個(gè)源級(jí)調(diào)試器和 模擬器,它可以調(diào)試由C51編譯器、A51匯編器、PL/M-51編譯器及ASM51匯編器產(chǎn)生的程序。它不需目標(biāo)板(for wi

9、ndows也可通過(guò)mon51接目標(biāo)板),只能進(jìn)行軟件模擬,但其功能強(qiáng)大,可模擬CPU及其外圍器件,如內(nèi)部串口,外部I/O及定時(shí)器等,能對(duì)嵌入 式軟件功能進(jìn)行有效測(cè)試。其使用方法為: DS51debugfileINIT(initfile)其中debugfile是一個(gè)Hex格式的8051文件,即待調(diào)試的文件其為可選的,可 在進(jìn)入dScope51后用load命令裝入。Initfile為一個(gè)初使化文件,它在啟動(dòng)dScope51后,在debugfile裝入前裝入,裝有一 些dScope的初使化參數(shù)及常用調(diào)試函數(shù)等。下面是一個(gè)dScope.ini文件(for dos)的內(nèi)容: Load ././ds51/

10、8051.iof Map 0,0xffffdScope51 for Windows則直接用鼠標(biāo)進(jìn)入,然后用load裝入待調(diào)文件。 (2) tScope51與dScope51不同的是 Scope51必須帶目標(biāo)板,目前它可以通過(guò)兩種方式訪問(wèn)目標(biāo)板。(1) 通過(guò)EMul51在線仿真器,tScope51為該仿真器準(zhǔn)備了一個(gè)動(dòng)態(tài)連接文件EMUL51.IOT,但該方法必須配合該仿真器。(2) 通過(guò)Monitov51監(jiān)控程序,這種方法是可行的,tScope51為訪問(wèn)Monitor51專(zhuān)門(mén)帶有MON51.IOT連接程序,使用時(shí)可通過(guò)串口及 監(jiān)控程序來(lái)調(diào)試目標(biāo)板。其使用方法為: TS51INIT(file_na

11、me.ini)其中file_name.ini為一個(gè)初使化文件。進(jìn)入TS51后,必須裝入IOT文件,可用的有 MON51.IOT及EMUL51.IOT兩種,如裝入MON51.IOT:Load.C:/C51/TS51/MON51.IOT CPUTYPE(80517)可惜的是tScope51只有for Dos的版本。 (3) Monitor 51Monitor51是一個(gè)監(jiān)控程序通過(guò)PC機(jī)的串口與目標(biāo)板進(jìn)行通信,Monitor操作需要MON51或dScope51 for Windows,后面部分將對(duì)Monitor51做較為詳細(xì)的介紹。 4. Ishell及uVision(1) Ishell for D

12、os這是一個(gè)for Dos的IDE,直接在命令行鍵入Ishell,則進(jìn)入該環(huán)境,它使用簡(jiǎn)單方便。其命令行與DOS命令行具有同樣的功能,對(duì)單模塊的Project直接由 菜單進(jìn)行編譯連接,對(duì)多模塊的project。則通過(guò)批處理,BAT文件進(jìn)行編譯連接,然后通過(guò)菜單控制由dScope51或tScope51對(duì)程序進(jìn)行 調(diào)試,因?yàn)槭莊or dos的,不做太詳細(xì)介紹。 (2) uVision for WindowsuVision for Windows是一個(gè)標(biāo)準(zhǔn)的Windows應(yīng)用程序,它是C51的一個(gè)集成軟件開(kāi)發(fā)平臺(tái),具有源代碼編輯、project管理、集成的make等功能,它的人機(jī)界面友好,操作方便,

13、是開(kāi)發(fā)者的首選,具體配置及使用見(jiàn)第五部分。 第二章 Keil C51軟件使用詳解第一節(jié) Keil C51編譯器的控制指令C51編譯器的控制指令分為三類(lèi):源文件控制類(lèi),目標(biāo)文件控制類(lèi)及列表控制類(lèi)。 1. 源文件控制類(lèi)NOEXTEND:C51源文件不允許使用ANSI C擴(kuò)展功能。DEFINE(DF):定義預(yù)處理(在C51命令行)。 2. 目標(biāo)文件(Object)控制類(lèi):COMPACT LARGE SMALL 選編譯模式 DEBUG(DB) 包含調(diào)試信息,以供仿真器或dSCope51使用。 NOAMAKE(NOAM) 禁止AutoMake信息記錄 NOREGPARMS 禁止用寄存器傳遞參數(shù) OBJE

14、CTEXTEND(OE) Object文件包含附加變量類(lèi)型信息 OPTIMIZE(OT) 指定優(yōu)化級(jí)別 REGFILE(RF) 指定一個(gè)寄存器使用的文件以供整體優(yōu)化用 REGISTERBANK(RB) 指定一個(gè)供絕對(duì)寄存器訪問(wèn)的寄存器區(qū)名 SRC 不生成目標(biāo)文件只生成匯編源文件 其它控件不常用。 3. 列表文件(listing)控制類(lèi):CODE(CD):向列表文件加入?yún)R編列表 LISTINCLUDE(LC):顯示indude文件 SYMBOLS(SB):列表文件包括模塊內(nèi)所有符號(hào)的列表 WARNINGLEVEL(WL):選擇“警告”級(jí)別 第二節(jié) dScope51的使用1. dScope51 f

15、or Dos總的來(lái)說(shuō)dScope51具有以下特性:l 高級(jí)語(yǔ)言顯示模式l 集成硬件環(huán)境模擬l 單步或“GO”執(zhí)行模式l 存儲(chǔ)器、寄存器及變量訪問(wèn)l Watch表達(dá)式之值l 函數(shù)與信號(hào)功能下面,具體說(shuō)明在進(jìn)入dScope51 for Dos之后,如何實(shí)現(xiàn)上述功能,dScope51采用下拉菜單格式和窗口顯示控制,共有l(wèi)anguage、serial、exe、register四個(gè)窗 口,其中exe為命令行窗口,language為程序窗口,serial為串口窗,register為寄存器窗。 (1) 高級(jí)語(yǔ)言顯示模式單擊主菜單中的“View”,第一欄中的三條命令“Highlevel”、“Mixed”、“A

16、ssembly”分別對(duì)所裝入的程序按照“高級(jí)”、“混合級(jí)”及“匯編級(jí)”三種方式顯示,以方便調(diào)試使用。 (2) 集成硬件環(huán)境模擬顯示主菜單中 “Peripheral”各條能顯示模擬硬件環(huán)境的狀態(tài),其中:i/o Port:顯示各I/O口之值,對(duì)8031而言SFR中的P1、P2、P3、P0與引腳之值分別列出:Interrupt:顯示5個(gè)中斷源的入口模式是否 允許,優(yōu)先級(jí)等中斷狀態(tài)。Timer:顯示各定時(shí)/計(jì)數(shù)器的模式,初始值狀態(tài)等。int Message:中斷信息允許,如為允許(“”出現(xiàn)),則當(dāng)中斷申請(qǐng)時(shí),顯示中斷源信息。比如當(dāng)中斷發(fā)生時(shí)會(huì)顯示: “interrupt Timer 0 occured

17、”等 A/D converter: 顯示A/D轉(zhuǎn)換器狀態(tài)無(wú)時(shí),則提示“無(wú)”。 Serial:串口信息顯示,包括串口模式、波特產(chǎn)等 Other:其它器件,如為8031則顯示“ 無(wú)” (3) 單步或“Go”執(zhí)行“F8”單步執(zhí)行,“F5”全速執(zhí)行到斷點(diǎn)?;蜻x主菜單中Trace單步執(zhí)行CPU中的Go全速執(zhí)行。 (4) 存儲(chǔ)器寄存器及變量訪問(wèn)外部存儲(chǔ)器管理MAP菜單:設(shè) 置(set)、取消(reset)、顯示(Display)處理可用存儲(chǔ)空間。修改Code代碼:ASM命令存儲(chǔ)器顯示命令:D 類(lèi)別為(X、D、I、B、C)修改存儲(chǔ)器命令:E 有以下幾種命令EB、EC、EI、EL、EF、EP復(fù)雜數(shù)據(jù)類(lèi)型顯示:

18、Object命令;用以顯示結(jié)構(gòu)或數(shù)組的內(nèi)容。欲使此命令有效,C51編譯器必須有 DB及OBJECTEXTEND兩條。反匯編命令:U (5) “Watch”表達(dá)式之值在View菜單的 “Watch”一欄中有四項(xiàng):其中包括定義Watch Point(Define)、刪除Watch Point(remove,kill all),及自動(dòng)更新選項(xiàng)。也可用WS、WK等命令代替,下面具體看“表達(dá)式”類(lèi)型:dScope51一次最多可設(shè)16個(gè)WtchPoint表達(dá)式,顯示 于Watch Window之中,表達(dá)式可以是簡(jiǎn)單變量,也可是復(fù)雜數(shù)據(jù)類(lèi)型如結(jié)構(gòu)、數(shù)組和指向結(jié)構(gòu)的指針等,例如:WS *ptimeWS pti

19、mehourWS some_recordo,analog等等 (6) 關(guān)于.IOF文件啟動(dòng)DS51后必須裝入.IOF文件才能使CPU及Peripheral各項(xiàng)起作用,這個(gè)函數(shù)的使用是依據(jù)8051系列CPU的不同特點(diǎn),裝入8051各CPU硬件設(shè)備模擬驅(qū)動(dòng)文件,比如8031CPU就必須load DS51目錄下的8051.IOF。 2. dScope for WindowsdScope for windows具有dScope for dos的全部功能,此外,它還具有以下明顯的優(yōu)點(diǎn): (1) 標(biāo)準(zhǔn)的Windows界面,操作更容易更簡(jiǎn)單; (2) 常用操作多用對(duì)話框,而非Dos的行命令方式; (3) 窗

20、口資源更加豐富:存儲(chǔ)器窗口、覆蓋率分析、運(yùn)行狀態(tài)分析窗口,加強(qiáng)了調(diào)試功能;因?yàn)閐Scope for Windows功能強(qiáng)大,具體操作在第八章詳細(xì)介紹。 第三節(jié) Monitor51及其使用1. Monitor51對(duì)硬件的要求(1) 硬件系統(tǒng)為51系列CPU; (2) 帶5K外部程序存儲(chǔ)器(從O地址開(kāi)始),存放Monitor51程序; (3) 256Bytes的外部數(shù)據(jù)存儲(chǔ)器以及5K的跟蹤緩沖區(qū),此外,外部數(shù)據(jù)存儲(chǔ)器必須足夠容納所有應(yīng)用程序代碼及數(shù)據(jù),且所有外部數(shù)據(jù)存儲(chǔ)器必須為馮諾伊 曼存儲(chǔ)器,即能一致訪問(wèn)XDATA與Code空間。 (4) 一個(gè)定時(shí)器作為波特率發(fā)生器供串口使用; (5) 6 By

21、tes的空余堆棧。 2. Mon51的使用Mon51的使用途徑有三種方式: (1) Dos行命令方式 即先用install對(duì)MON51進(jìn)行配置,然后用MON51進(jìn)入Monitor狀態(tài),啟用各種命令對(duì)Monitor51進(jìn)行調(diào)試。 (2) tScope51方式 啟動(dòng)tScope51裝入TS51目錄下的MON51.IOT驅(qū)動(dòng)文件,與目標(biāo)板通信。 (3) dScope51 for Windows方式 在選CPU驅(qū)動(dòng)文件時(shí),選“MON51.dll”,則檢查目標(biāo)板并進(jìn)入MON51狀態(tài)。 3. MON51的配置(1) MON51 for Dos的配置 運(yùn)行install文件(在MON51目錄下),不同的參數(shù)

22、可以配置不同的硬件環(huán)境。INSTALL Serialtype xdstastartcodestartbankPROMCHECK,具體說(shuō)明見(jiàn)MON51幫助文件或使用手冊(cè)。 (2) MON51 for Windows的配置 在啟用MON51.dll時(shí),會(huì)使得系統(tǒng)自動(dòng)檢查目標(biāo)板連接,如配置不對(duì),則彈出“Configuration”對(duì)話框,設(shè)置PC串口,波特率等,完畢單 擊“apply”有效。 4. 串口連接圖:收發(fā)交叉互連,RTS、CTS直連,DSR、DTR直連,具體引腳排列參考串口資料。 5. MON51命令及使用詳細(xì)的MON51命令可參閱幫助。 第四節(jié) 集成開(kāi)發(fā)環(huán)境(IDE)的使用1. Ishe

23、ll for Dos的使用進(jìn)入Ishell之后看到兩個(gè)窗口:一個(gè)是文件窗口,一個(gè)是Dos命令行窗口,窗口上方是下拉式的命令菜單,其中的Files控制文件窗口的顯隱。使用Ishell,第一步就是配置系統(tǒng),即要學(xué)習(xí)兩個(gè)文件的修改與創(chuàng)建: (1) Ishell.CFG文件每一個(gè)project都有一 個(gè)Ishell.CFG,其中存放有“Option菜單和Setup菜單下的部分信息;Bell enabled、Monochrome enabled、Editor Selected、CRT Lines、target enviroment、name of user edit、Automatic load for

24、 configuration enabled、file window enabled、file specification for file window、translate command line controls、project name等。對(duì)每個(gè)project都必須設(shè)置以上信息,然后存盤(pán)“setup”的的“save”,這樣才可正式開(kāi)始下面工作。 (2) IShell.col文件對(duì)IDE顏色設(shè)置,如不改動(dòng),可以缺省為主。 (3) CDF文件該文件位于BIN目錄下,每一文件定義一組 外部函數(shù)工具包,即定義外部環(huán)境如8051.CDF,USER.CDF等,開(kāi)發(fā)者可修改CDF文件,供自己使用,至

25、于CDF文件內(nèi)容可查看一下 8051.CDF即可知道。注意.CDF文件是Ishell系統(tǒng)的核心所在,不同的CDF文件可使本IDE適用于不同的編譯、連接系統(tǒng),即本IDE并不僅 適于C51。下面談一談Automake工具:C51的Automake是一個(gè)project管理器,在8051工具包中以O(shè)BJECT文件形式保留了一 個(gè)project的信息,AutoMake用這些信息來(lái)進(jìn)行project管理,一旦手工建立一個(gè)project,Automake可生成一個(gè)新的 OBJECT,AutoMake利用此文件來(lái)編譯那些修改過(guò)的文件。Automake支持C51、A51、L51/BL51、C166、A166、

26、L166等編譯連接器。點(diǎn)中主菜單中的Automake即運(yùn)行本工具。Ishell for Dos使用比較繁瑣,推薦使用uVision for windows。 2. uVision for windows的使用uVision是一個(gè)標(biāo)準(zhǔn)的windows應(yīng)用程序,其編譯功能、文件處理功 能、project處理功能、窗口功能以及工具引用功能(如A51、C51、PL/M41、BL51 dScope等)等都較Ishell for Dos要強(qiáng)得多。uVision采用BL51作連接器,因?yàn)锽L51兼容L51,所以一切能在Dos下工作的project都可以到uVision中進(jìn)行 連接調(diào)試。uVision采用dS

27、cope for windows作調(diào)試器,該調(diào)試器支持MON51及系統(tǒng)模擬兩種方式,功能較for DOS要強(qiáng)大好用,調(diào)試功能強(qiáng)大。注意:(1) Option菜單下的各項(xiàng)要會(huì)使用,其中A51、C51、PL/M51、BL51定義各文件所使用的編譯、連接控制指令,dScope定義一個(gè) dScope初始化文件。Make則是定義一個(gè)make文件。(2) 進(jìn)入調(diào)試是在RUN菜單下運(yùn)行dScope。(3) project中包括新建、打開(kāi)、修改、更新、編譯、連接等poject處理,具體使用可參考后面的例子。第三章 Keil C51 vs 標(biāo)準(zhǔn)C深入理解并應(yīng)用C51對(duì)標(biāo)準(zhǔn)ANSIC的擴(kuò)展是學(xué)習(xí)C51的關(guān)鍵之一。

28、因?yàn)榇蠖鄶?shù)擴(kuò)展功能都是直接針對(duì)8051系列CPU硬件的。大致有以下8 類(lèi):l 8051存儲(chǔ)類(lèi)型及存儲(chǔ)區(qū)域l 存儲(chǔ)模式l 存儲(chǔ)器類(lèi)型聲明l 變量類(lèi)型聲明l 位變量與位尋址l 特殊功能寄存器(SFR)l C51指針l 函數(shù)屬性具體說(shuō)明如下(8031為缺省CPU)。 第一節(jié) Keil C51擴(kuò)展關(guān)鍵字C51 V4.0版本有以下擴(kuò)展關(guān)鍵字(共19個(gè)):_at_ idata sfr16 alien interrupt smallbdata large _task_ Code bit pdatausing reentrant xdata compact sbit data sfr 第二節(jié) 內(nèi)存區(qū)域(Mem

29、ory Areas):1. Pragram Area:由Code說(shuō)明可有多達(dá)64kBytes的程序存儲(chǔ)器 2. Internal Data Memory:內(nèi)部數(shù)據(jù)存儲(chǔ)器可用以下關(guān)鍵字說(shuō)明:data:直接尋址區(qū),為內(nèi)部RAM的低128 字節(jié) 00H7FHidata:間接尋址區(qū),包括整個(gè)內(nèi)部RAM區(qū) 00HFFHbdata:可位尋址區(qū), 20H2FH 3. External Data Memory外部RAM視使用情況可由以下關(guān)鍵字標(biāo)識(shí):xdata:可指定多達(dá)64KB的外部直接尋址區(qū),地址范圍0000H0FFFFHpdata:能訪問(wèn)1頁(yè)(25bBytes)的外部RAM,主要用于緊湊模式(Compac

30、t Model)。 4. Speciac Function Register Memory8051提供128Bytes的SFR尋址區(qū),這區(qū)域可位尋 址、字節(jié)尋址或字尋址,用以控制定時(shí)器、計(jì)數(shù)器、串口、I/O及其它部件,可由以下幾種關(guān)鍵字說(shuō)明:sfr:字節(jié)尋址 比如 sfr P0=0x80;為PO口地址為80H,“”后HFFH之間的常數(shù)。sfr16:字尋址,如sfr16 T2=0xcc;指定Timer2口地址T2L=0xcc T2H=0xCDsbit:位尋址,如sbit EA=0xAF;指定第0xAF位為EA,即中斷允許還可以有如下定義方法:sbit 0V=PSW2;(定義0V為PSW的第2位)

31、sbit 0V0XDO2;(同上)或bit 0V-0xD2(同上)。 第三節(jié) 存儲(chǔ)模式存儲(chǔ)模式?jīng)Q定了沒(méi)有明確指定存儲(chǔ)類(lèi)型的變量,函數(shù)參數(shù)等的缺省存儲(chǔ)區(qū)域,共三種: 1. Small模式所有缺省變量參數(shù)均裝入內(nèi)部RAM,優(yōu)點(diǎn)是訪問(wèn)速度快,缺點(diǎn)是空間有限,只適用于小程序。 2. Compact模式所有缺省變量均位于外部RAM區(qū)的一頁(yè)(256Bytes),具體哪一頁(yè)可由P2口指定,在STARTUP.A51文件中說(shuō)明,也可用pdata指定,優(yōu)點(diǎn)是空間較Small為寬裕速度較Small慢,較large要快,是一種中間狀態(tài)。 3. large模式所有缺省變量可放在多達(dá)64KB的外部RAM區(qū),優(yōu)點(diǎn)是空間大,

32、可存變量多,缺點(diǎn)是速度較慢。提示:存儲(chǔ)模式在C51編譯器選項(xiàng)中選擇。 第四節(jié) 存儲(chǔ)類(lèi)型聲明變量或參數(shù)的存儲(chǔ)類(lèi)型可由存儲(chǔ)模式指定缺省類(lèi)型,也可由關(guān)鍵字直接聲明指定。各類(lèi)型分別 用:code,data,idata,xdata,pdata說(shuō)明,例:data uar1char code array “hello!”;unsigned char xdata arr1044; 第五節(jié) 變量或數(shù)據(jù)類(lèi)型C51提供以下幾種擴(kuò)展數(shù)據(jù)類(lèi)型:bit 位變量值為0或1sbit 從字節(jié)中定義的位變量 0或1sfr sfr字節(jié)地址 0255sfr16 sfr字地址 065535其余數(shù)據(jù)類(lèi)型如:char,enum,short

33、,int,long,float等與ANSI C相同。 第六節(jié) 位變量與聲明1. bit型變量bit型變量可用變量類(lèi)型,函數(shù)聲明、函數(shù)返回值等,存貯于內(nèi)部RAM20H2FH。注意:(1) 用pragma disable說(shuō)明函數(shù)和用“usign”指定的函數(shù),不能返回bit值。(2) 一個(gè)bit變量不能聲明為指針,如bit *ptr;是錯(cuò)誤的(3) 不能有bit數(shù)組如:bit arr5;錯(cuò)誤。 2. 可位尋址區(qū)說(shuō)明20H2FH可作如下定義:int bdata i;char bdata arr3,然后:sbit bitoin0;sbit bit15=I15;sbit arr07=arr07;sbit

34、arr15=arri7; 第七節(jié) Keil C51指針C51支持一般指針(Generic Pointer)和存儲(chǔ)器指針(Memory_Specific Pointer). 1. 一般指針一般指針的聲明和使用均與標(biāo)準(zhǔn)C相同,不過(guò)同時(shí)還可以說(shuō)明指針的存儲(chǔ)類(lèi)型,例如:long * state;為一個(gè)指向long型整數(shù)的指針,而state本身則依存儲(chǔ)模式存放。char * xdata ptr;ptr為一個(gè)指向char數(shù)據(jù)的指針,而ptr本身放于外部RAM區(qū),以上的long,char等指針指向的數(shù)據(jù)可存放于任何存儲(chǔ)器中。一般指針 本身用3個(gè)字節(jié)存放,分別為存儲(chǔ)器類(lèi)型,高位偏移,低位偏移量。 2. 存儲(chǔ)器

35、指針基于存儲(chǔ)器的指針說(shuō)明時(shí)即指定了存貯類(lèi)型,例如:char data * str;str指向data區(qū)中char型數(shù)據(jù)int xdata * pow; pow指向外部RAM的int型整數(shù)。這種指針存放時(shí),只需一個(gè)字節(jié)或2個(gè)字節(jié)就夠了,因?yàn)橹恍璐娣牌屏俊?3. 指針轉(zhuǎn)換即指針在上兩種類(lèi)型之間轉(zhuǎn)化:l 當(dāng)基于存儲(chǔ)器的指針作為一個(gè)實(shí)參傳遞給需要一般指針的函數(shù)時(shí),指針自動(dòng)轉(zhuǎn)化。l 如果不說(shuō)明外部函數(shù)原形,基于存儲(chǔ)器的指針自動(dòng)轉(zhuǎn)化為一般指針,導(dǎo)致錯(cuò)誤,因而請(qǐng)用“include”說(shuō)明所有函數(shù)原形。l 可以強(qiáng)行改變指針類(lèi)型。 第八節(jié) Keil C51函數(shù)C51函數(shù)聲明對(duì)ANSI C作了擴(kuò)展,具體包括: 1

36、. 中斷函數(shù)聲明:中斷聲明方法如下:void serial_ISR () interrupt 4 using 1/* ISR */為提高代碼的容錯(cuò)能力,在沒(méi)用到的中斷入口處生成iret語(yǔ)句,定義沒(méi)用到的中斷。/* define not used interrupt, so generate IRET in their entrance */void extern0_ISR() interrupt 0 /* not used */void timer0_ISR () interrupt 1 /* not used */void extern1_ISR() interrupt 2 /* not u

37、sed */void timer1_ISR () interrupt 3 /* not used */void serial_ISR () interrupt 4 /* not used */ 2. 通用存儲(chǔ)工作區(qū)3. 選通用存儲(chǔ)工作區(qū)由using x聲明,見(jiàn)上例。4. 指定存儲(chǔ)模式由small compact 及l(fā)arge說(shuō)明,例如:void fun1(void) small 提示:small說(shuō)明的函數(shù)內(nèi)部變量全部使用內(nèi)部RAM。關(guān)鍵的經(jīng)常性的耗時(shí)的地方可以這樣聲明,以提高運(yùn)行速度。 5. #pragma disable在函數(shù)前聲明,只對(duì)一個(gè)函數(shù)有效。該函數(shù)調(diào)用過(guò)程中將不可被中斷。 6. 遞

38、歸或可重入函數(shù)指定在主程序和中斷中都可調(diào)用的函數(shù),容易產(chǎn)生問(wèn)題。因?yàn)?1和PC不同,PC使用堆棧傳遞參數(shù),且靜態(tài)變量以 外的內(nèi)部變量都在堆棧中;而51一般使用寄存器傳遞參數(shù),內(nèi)部變量一般在RAM中,函數(shù)重入時(shí)會(huì)破壞上次調(diào)用的數(shù)據(jù)??梢杂靡韵聝煞N方法解決函數(shù)重 入:a、在相應(yīng)的函數(shù)前使用前述“#pragma disable”聲明,即只允許主程序或中斷之一調(diào)用該函數(shù);b、將該函數(shù)說(shuō)明為可重入的。如下:void func(param.) reentrant;KeilC51編譯后將生成一個(gè)可重入變量堆棧,然后就可以模擬通過(guò)堆棧傳遞變量的方法。由于一般可重入函數(shù)由主程序和中斷調(diào)用,所 以通常中斷使用與主

39、程序不同的R寄存器組。另外,對(duì)可重入函數(shù),在相應(yīng)的函數(shù)前面加上開(kāi)關(guān)“#pragma noaregs”,以禁止編譯器使用絕對(duì)寄存器尋址,可生成不依賴(lài)于寄存器組的代碼。 7. 指定PL/M51函數(shù)由alien指定。 第四章 Keil C51高級(jí)編程本章討論以下內(nèi)容:l 絕對(duì)地址訪問(wèn)l C與匯編的接口l C51軟件包中的通用文件l 段名轉(zhuǎn)換與程序優(yōu)化 第一節(jié) 絕對(duì)地址訪問(wèn)C51提供了三種訪問(wèn)絕對(duì)地址的方法: 1. 絕對(duì)宏:在程序中,用“include”即可使用其中定義的宏來(lái)訪問(wèn)絕對(duì)地址,包 括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD具體使用可看

40、一看absacc.h便知例 如:rval=CBYTE0x0002;指向程序存貯器的0002h地址rval=XWORD 0x0002;指向外RAM的0004h地址 2. _at_關(guān)鍵字直接在數(shù)據(jù)定義后加上_at_ const即可,但是注意:(1)絕對(duì)變量不能被初使化;(2)bit型函數(shù)及變量不能用_at_指定。例如:idata struct link list _at_ 0x40;指定list結(jié)構(gòu)從40h開(kāi)始。xdata char text25b _at_0xE000;指定text數(shù)組從0E000H開(kāi)始提示:如果外部絕對(duì)變量是I/O端口等可自行變化數(shù)據(jù),需要使用volatile關(guān)鍵字進(jìn)行描 述,

41、請(qǐng)參考absacc.h。 3. 連接定位控制此法是利用連接控制指令code xdata pdata /data bdata對(duì)“段”地址進(jìn)行,如要指定某具體變量地址,則很有局限性,不作詳細(xì)討論。 第二節(jié) Keil C51與匯編的接口1. 模塊內(nèi)接口方法是用pragma語(yǔ)句具體結(jié)構(gòu)是:#pragma asm匯編行#pragma endasm這種方法實(shí)質(zhì)是通過(guò)asm與ndasm告訴C51編譯器中間行不用編譯為匯編行,因而在編譯控制指令中有SRC以控制將這些不用編譯的行存入其中。 2. 模塊間接口C模塊與匯編模塊的接口較簡(jiǎn)單,分別用C51與A51對(duì)源文件進(jìn)行編譯,然后用L51將obj文件連接即可,關(guān)鍵

42、問(wèn)題在于C函數(shù)與匯編函數(shù)之間的參數(shù)傳遞問(wèn)題,C51中有兩種參數(shù)傳遞方法。(1) 通過(guò)寄存器傳遞函數(shù)參數(shù)最多只能有3個(gè)參數(shù)通過(guò)寄存器傳遞,規(guī)律如下表: 參數(shù)數(shù)目 char int long,float 一般指針 123 R7R5R3 R6 & R7R4 & R5R2 & R3 R4R7R4R7 R1R3R1R3R1R3 (2) 通過(guò)固定存儲(chǔ)區(qū)傳遞(fixed memory)這種方法將bit型參數(shù)傳給一個(gè)存儲(chǔ)段中: ?function_name?BIT將其它類(lèi)型參數(shù)均傳給下面的段:?function_name?BYTE,且按照預(yù)選順序存放。至于這個(gè)固定存儲(chǔ)區(qū) 本身在何處,則由存儲(chǔ)模式默認(rèn)。(3)

43、函數(shù)的返回值函數(shù)返回值一律放于寄存器中,有如下規(guī)律: return type Registev 說(shuō)明 bit 標(biāo)志位 由具體標(biāo)志位返回 char/unsigned char 1_byte指針 R7 單字節(jié)由R7返回 int/unsigned int 2_byte指針 R6 & R7 雙字節(jié)由R6和R7返回,MSB在R6 long&unsigned long R4R7 MSB在R4, LSB在R7 float R4R7 32Bit IEEE格式 一般指針 R1R3 存儲(chǔ)類(lèi)型在R3 高位R2 低R1 (4) SRC控制該控制指令將C文件編譯生成匯編文件(.SRC),該匯編文件可改名后,生成匯編.A

44、SM文件,再用A51進(jìn)行編譯。 第三節(jié) Keil C51軟件包中的通用文件在C51/LiB目錄下有幾個(gè)C源文件,這幾個(gè)C源文件有非常重要的作用,對(duì)它們稍事修改,就可以用在自己的專(zhuān)用系統(tǒng)中。 1. 動(dòng)態(tài)內(nèi)存分配init_mem.C:此文件是初始化動(dòng)態(tài)內(nèi)存區(qū)的程序源代碼。它可以指定動(dòng)態(tài)內(nèi)存的位置及大小,只有使用了 init_mem( )才可以調(diào)回其它函數(shù),諸如malloc calloc,realloc等。calloc.c:此文件是給數(shù)組分配內(nèi)存的源代碼,它可以指定單位數(shù)據(jù)類(lèi)型及該單元數(shù)目。malloc.c:此文件是 malloc的源代碼,分配一段固定大小的內(nèi)存。realloc.c:此文件是real

45、loc.c源代碼,其功能是調(diào)整當(dāng)前分配動(dòng)態(tài)內(nèi)存的大小。 2. C51啟動(dòng)文件STARTUP.A51啟動(dòng)文件STARTUP.A51中包含目標(biāo)板啟動(dòng)代碼,可在每個(gè)project中加入這 個(gè)文件,只要復(fù)位,則該文件立即執(zhí)行,其功能包括:l 定義內(nèi)部RAM大小、外部RAM大小、可重入堆棧位置l 清除內(nèi)部、外部或者以此頁(yè)為單元的外部存儲(chǔ)器l 按存儲(chǔ)模式初使化重入堆棧及堆棧指針l 初始化8051硬件堆棧指針l 向main( )函數(shù)交權(quán)開(kāi)發(fā)人員可修改以下數(shù)據(jù)從而對(duì)系統(tǒng)初始化 常數(shù)名 意義IDATALEN 待清內(nèi)部RAM長(zhǎng)度XDATA START 指定待清外部RAM起始地址XDATALEN 待清外部RAM長(zhǎng)度

46、IBPSTACK 是否小模式重入堆棧指針需初始化標(biāo)志,1為需要。缺省為0IBPSTACKTOP 指定小模式重入堆棧頂部地址XBPSTACK 是否大模式重入堆棧指針需初始化標(biāo)志,缺省為0XBPSTACKTOP 指定大模式重入堆棧頂部地址PBPSTACK 是否Compact重入堆棧指針,需初始化標(biāo)志,缺省為0PBPSTACKTOP 指定Compact模式重入堆棧頂部地址PPAGEENABLE P2初始化允許開(kāi)關(guān)PPAGE 指定P2值PDATASTART 待清外部RAM頁(yè)首址PDATALEN 待清外部RAM頁(yè)長(zhǎng)度提示:如果要初始化P2作為緊湊模式高端地址,必須:PPAGEENAGLE1,PPAGE為

47、P2值,例如指定某頁(yè) 1000H10FFH,則PPAGE10H,而且連接時(shí)必須如下:L51 PDATA(1080H),其中1080H是1000H10FFH中的任一個(gè)值。以下是STARTUP.A51代碼片斷,紅色是經(jīng)常可能需要修改的地 方:;-; This file is part of the C51 Compiler package; Copyright KEIL ELEKTRONIK GmbH 1990;-; STARTUP.A51: This code is executed after processor reset.; To translate this file use A51 w

48、ith the following invocation:; A51 STARTUP.A51; To link the modified STARTUP.OBJ file to your application use the following; L51 invocation:; L51 , STARTUP.OBJ ;-; User-defined Power-On Initialization of Memory; With the following EQU statements the initialization of memory; at processor reset can b

49、e defined:; ; the absolute start-address of IDATA memory is always 0IDATALEN EQU 80H ; the length of IDATA memory in bytes.;XDATASTART EQU 0H ; the absolute start-address of XDATA memoryXDATALEN EQU 0H ; the length of XDATA memory in bytes.;PDATASTART EQU 0H ; the absolute start-address of PDATA mem

50、oryPDATALEN EQU 0H ; the length of PDATA memory in bytes.; Notes: The IDATA space overlaps physically the DATA and BIT areas of the; 8051 CPU. At minimum the memory space occupied from the C51 ; run-time routines must be set to zero.;-; Reentrant Stack Initilization; The following EQU statements define the stack pointer for reentrant; functions and

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論