keilc詳細中文手冊_第1頁
keilc詳細中文手冊_第2頁
keilc詳細中文手冊_第3頁
keilc詳細中文手冊_第4頁
keilc詳細中文手冊_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Keil C51 使用詳解V1.0第一章 Keil C51 開發(fā)系統(tǒng)基本知識. 6第一節(jié) 系統(tǒng)概述 . 6第二節(jié) Keil C51 單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu). 6第三節(jié) Keil C51 工具包的安裝. 71. C51 for Dos 72. C51 for Windows 的安裝及注意事項:. 7第四節(jié) Keil C51 工具包各部分功能及使用簡介. 71. C51 與 A51. 72. L51 和 BL51. 83. DScope51, Tscope51 及 Monitor51. 84. Ishell 及 uVision. 9第二章 Keil C51 軟件使用詳解. 10第一節(jié) Kei

2、l C51 編譯器的控制指令. 101 . 源文件控制類. 102 .目標文件(Object)控制類:103 .列表文件(listing)控制類:10第二節(jié)dScope51的使用111. dScope51 for Dos 112. dScope for Windows 12第三節(jié) Monitor51 及其使用. 131. Monitor51 對硬件的要求. 132. Mon51 的使用 . 133. MON51 的配置 . 134. 串口連接圖:. 135. MON51 命令及使用. 14第四節(jié) 集成開發(fā)環(huán)境(IDE)的使用141. Ishell for Dos 的使用 . 142. uVis

3、ion for windows 的使用 . 15第三章 Keil C51 vs 標準 C. 15第一節(jié) Keil C51 擴展關(guān)鍵字. 15第二節(jié) 內(nèi)存區(qū)域(Memory Areas): . 161. Pragram Area: . 162. Internal Data Memory: 163. External Data Memory. 164. Speciac Function Register Memory. 16第三節(jié) 存儲模式 . 161. Small 模式.162. Compact 模式.173. large 模式.17第四節(jié)存儲類型聲明. 17第五節(jié) 變量或數(shù)據(jù)類型. 17第六節(jié)

4、位變量與聲明. 171. bit 型變量 . 172. 可位尋址區(qū)說明20H 2FH. 18第七節(jié) Keil C51 指針 . 181. 一般指針. 182. 存儲器指針. 183. 指針轉(zhuǎn)換. 18第八節(jié) Keil C51 函數(shù) . 191. 中斷函數(shù)聲明:. 192. 通用存儲工作區(qū). 193. 選通用存儲工作區(qū)由using x聲明,見上例。194. 指定存儲模式.195. #pragma disable.196. 遞歸或可重入函數(shù)指定. 197. 指定 PL/M 51 函數(shù) . 20第四章 Keil C51 高級編程. 20第一節(jié) 絕對地址訪問. 201. 絕對宏:. 202. _at_

5、關(guān)鍵字213. 連接定位控制. 21第二節(jié) Keil C51 與匯編的接口. 211. 模塊內(nèi)接口. 212. 模塊間接口. 21第三節(jié) Keil C51 軟件包中的通用文件. 221. 動態(tài)內(nèi)存分配. 222. C51 啟動文件STARTUP.A51. 223. 標準輸入輸出文件. 254. 其它文件. 25第四節(jié) 段名協(xié)定與程序優(yōu)化. 251. 段名協(xié)定(SegmentNamingConventions) 252. 程序優(yōu)化. 25第五章 Keil C51 庫函數(shù)參考. 26第一節(jié)本征庫函數(shù)(intrinsic routines)和非本征證庫函數(shù)26第二節(jié) 幾類重要庫函數(shù). 261. 專用

6、寄存器include 文件 . 262. 絕對地址include 文件 absacc.h. 263. 動態(tài)內(nèi)存分配函數(shù),位于stdlib.h 中 . 274. 緩沖區(qū)處理函數(shù)位于“string.h 中 ”. 275. 輸入輸出流函數(shù),位于“stdio.h 中 ”. 27第三節(jié) Keil C51 庫函數(shù)原型列表. 271. CTYPE.H. 272. INTRINS.H. 273. STDIO.H. 284. STDLIB.H. 285. STRING.H. 28第六章 Keil C51 例子: Hello.c. 29第一節(jié) uVision for Windows 的使用步驟. 29第二節(jié) Is

7、hell for Dos 使用步驟. 30第七章 Keil C51 的代碼效率. 30第一節(jié)存儲模式的影響. 30第二節(jié)程序結(jié)構(gòu)的影響. 31第八章 dScope for Windows 使用詳解. 32第一節(jié) 概述 . 321. 主窗口(Mainframe Window) . 322. 調(diào)試窗口(DEBUG Window) . 323. 命令窗口(Command Window) . 324. 觀察窗口(Watch Window) . 325. 寄存器窗口(Registe Window) . 326. 串口窗口(Serical Windows) . 327. 性能分析窗口. 328. 內(nèi)存窗口

8、(Memory Window) . 329. 符號瀏覽窗口(Symbol Browser Window) . 3310. 調(diào)用線窗口(Call Stack Window). 3311. 代碼覆蓋窗口. 3312. 外圍設(shè)備窗口(peripherals) 33第二節(jié)dScope for Windows基本操作331. 指定初始化文件. 332. 觀察變量. 333. 顯示 RAM 的值 . 344. 觀察堆棧. 345. 中斷處理程序調(diào)試. 346. 性能分析(Performance Analyzer: PA) . 34第三節(jié)dScope for Windows命令文件的編制 341. 地址空間

9、及地址空間類型. 342. 常量. 353. 變量. 364. 運算符. 385. 表達式. 386. 數(shù)組. 387. 結(jié)構(gòu)和聯(lián)合. 388. 指針: . 389. dScope命令語句.3810. 函數(shù)43第一章Keil C51 開發(fā)系統(tǒng)基本知識 第一節(jié)系統(tǒng)概述Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開 發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯 的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全 Windows界面。另外重要的一點,只

10、要看一下編譯后生成的匯編代碼,就能體 會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊 湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面詳細介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用。第二節(jié)Keil C51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)C51工具包的整體結(jié)構(gòu),如圖(1)所示,其中uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào) 試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標文件(.OBJ)。目標文件可

11、 由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標準的Hex文件,以供調(diào)試器dScope51 或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標板進行調(diào)試,也可以直接寫入程序存貯器如EPROM 中。圖 (1) C51 工具包整體結(jié)構(gòu)圖第三節(jié) Keil C51 工具包的安裝1. C51 for Dos在 Windows下直接運行軟件包中 DOSC51DOS.exe然后選擇安裝目錄即可。完畢后欲使系統(tǒng)正常工作須進行以下操作(設(shè) C:C51 為安裝目錄):修改 Autoexec.bat,力口入path=C:C51

12、BinSet C51LIB=C:C51LIBSet C51INC=C:C51INC然后運行Autoexec.bat2. C51 for Windows 的安裝及注意事項:在Windows下運行軟件包中 WINSetup.exe,最好選擇安裝目錄與 C51 for Dos相同,這樣設(shè)置最簡單(設(shè)安裝于C:C51目錄下)。然后將軟件包中crack目 錄中的文件拷入C:C51Bin 目錄下。第四節(jié) Keil C51 工具包各部分功能及使用簡介1. C51 與 A511) ) C51C51 是 C 語言編譯器,其使用方法為:C51 sourcefile編譯控制指令或者 C51 commandfile其

13、中sourcefile為C源文件(.C)。大量的編譯控制指令完成 C51編譯器的全 部功能。包控 C51輸出文件C.LST, .OBJ, .I和.SRC文件的控制。源文件(.C) 的控制等,詳見第五部分的具體介紹。而 Commandfile 為一個連接控制文件其內(nèi)容包括:.C 源文件及各編譯控制指令,它沒有固定的名字,開發(fā)人員可根據(jù)自己的習慣指定,它適于用控制指 令較多的場合。2) ) A51A51 是匯編語言編譯器,使用方法為:A51 sourcefile編譯控制指令或 A51 commandfile其中sourcefile為匯編源文件(.asm或.a51),而編譯控制指令的使用與其它匯編

14、如 ASM 語言類似,可參考其他匯編語言材料。Commandfile 同 C51 中的 Commandfile 類似,它使A51 使用和修改方便。3) L51 和 BL51(1) L51L51是Keil C51軟件包提供的連接/定位器,其功能是將編譯生成的 OBJ文 件與庫文件連接定位生成絕對目標文件(.ABS),其使用方法為:L51 目標文件列表庫文件列表 to outputfile 連接控制指令或L51 Commandfile源程序的多個模塊分別經(jīng)C51與A51編譯后生成多個OBJ文件,連接時, 這些文件全列于目標文件列表中,作為輸入文件,如果還需與庫文件(.LiB)相連接,則庫文件也必須

15、列在其后。outputfile 為輸文件名,缺少時為第一模塊名 , 后 綴 為 .ABS 。 連 接 控 制 指 令 提 供 了 連 接 定 位 時 的 所 有 控 制 功 能 。 Commandfile 為連接控制文件,其具體內(nèi)容是包括了目標文件列表,庫文件列表及輸出文件、連接控制命令,以取代第一種繁瑣的格式,由于目標模塊庫文件大多不止1 個,因而第2 種方法較多見,這個文件名字也可由使用者隨意指定。(2) Bl51BL51 也是 C51 軟件包的連接/定位器,其具有L51 的所有功能,此外它還具有以下3 點特別之處:a.可以連接定位大于64kBytes的程序。b. 具有代碼域及域切換功能(

16、CodeBanking & Bank Switching)c. 可用于 RTX51 操作系統(tǒng)RTX51 是一個實時多任務(wù)操作系統(tǒng),它改變了傳統(tǒng)的編程模式,甚至不必用 main( )函數(shù),單片機系統(tǒng)軟件向RTOS 發(fā)展是一種趨勢,這種趨勢對于186和386及68K系列CPU更為明顯和必須,對8051因CPU較為簡單,程序結(jié)構(gòu)等都不太復(fù)雜,RTX51 作用顯得不太突出,其專業(yè)版軟件PK51 軟件包甚至不包括 RTX51Full ,而只有一個RTX51TINY 版本的RTOS。 RTX51 TINY 適用于無外部 RAM 的單片機系統(tǒng),因而可用面很窄,在本文中不作介紹。Bankswitchi

17、ng 技術(shù)因使用很少也不作介紹。3. DScope51, Tscope51 及 Monitor51(1) dScope51dScope51是一個源級調(diào)試器和模擬器,它可以調(diào)試由C51編譯器、A51匯編器、 PL/M-51 編譯器及ASM 51 匯編器產(chǎn)生的程序。它不需目標板(forwindows 也可通過mon51 接目標板),只能進行軟件模擬,但其功能強大,可模擬 CPU 及其外圍器件,如內(nèi)部串口,外部I/O 及定時器等,能對嵌入式軟件功能進行有效測試。其使用方法為:DS51debugfileINIT(initfile)其中debugfile是一個Hex格式的8051文件,即待調(diào)試的文件其為

18、可選的,可在進入dScope51 后用 load 命令裝入。Initfile 為一個初使化文件,它在啟動dScope51 后,在 debugfile 裝入前裝入,裝有一些dScope 的初使化參數(shù)及常用調(diào)試函數(shù)等。下面是一個dScope.ini文件(for dos)的內(nèi)容:Load .ds518051.iofMap 0,0xffffdScope51 for Windows則直接用鼠標進入,然后用load裝入待調(diào)文件。(2) tScope51與dScope51不同的是Scope51必須帶目標板,目前它可以通過兩種方式訪 問目標板。(1)通過EMul51在線仿真器,tScope51為該仿真器準備了

19、一個動態(tài) 連接文件EMUL51.IOT ,但該方法必須配合該仿真器。(2)通過Monitov51監(jiān)控 程序,這種方法是可行的,tScope51為訪問Monitor51專門帶有MON51.IOT連 接程序,使用時可通過串口及監(jiān)控程序來調(diào)試目標板。其使用方法為:TS51INIT(file_name.ini)其中 file_name.ini 為一個初使化文件。進入 TS51 后,必須裝入IOT 文件,可用的有MON51.IOT 及 EMUL51.IOT兩種,如裝入MON51.IOT:Load.C:C51TS51MON51.IOT CPUTYPE(80517)可惜的是tScope51只有for Dos

20、的版本。(3) Monitor 51Monitor51 是一個監(jiān)控程序通過PC 機的串口與目標板進行通信,Monitor操作需要 MON51或dScope51 for Windows后面部分將對 Monitor51做較為詳細 的介紹。4. Ishell 及 uVision(1) Ishell for Dos這是一個for Dos的IDE,直接在命令行鍵入Ishell,則進入該環(huán)境,它使用 簡單方便。其命令行與DOS命令行具有同樣的功能,對單模塊的 Project直接由 菜單進行編譯連接,對多模塊的 project。則通過批處理,BAT文件進行編譯連 接,然后通過菜單控制由dScope51或tS

21、cope51對程序進行調(diào)試,因為是for dos 的,不做太詳細介紹。(2) uVision for WindowsuVision for Windows 是一個標準的Windows 應(yīng)用程序,它是C51 的一個集成軟件開發(fā)平臺,具有源代碼編輯、project管理、集成的make等功能,它的人機界面友好,操作方便,是開發(fā)者的首選,具體配置及使用見第五部分。第二章Keil C51 軟件使用詳解第一節(jié)Keil C51 編譯器的控制指令C51 編譯器的控制指令分為三類:源文件控制類,目標文件控制類及列表控制類。1 . 源文件控制類NOEXTEND : C51 源文件不允許使用ANSI C 擴展功能。

22、DEFINE(DF):定義預(yù)處理(在C51命令行)。2 .目標文件(Object)控制類:COMPACT LARGE SMALL 選編譯模式DEBUG(DB) 包含調(diào)試信息,以供仿真器或dSCope51 使用。NOAMAKE(NOAM) 禁止 AutoMake 信息記錄NOREGPARMS 禁止用寄存器傳遞參數(shù)OBJECTEXTEND(OE) Object文件包含附加變量類型信息OPTIMIZE(OT) 指定優(yōu)化級別REGFILE(RF) 指定一個寄存器使用的文件以供整體優(yōu)化用REGISTERBANK(RB) 指定一個供絕對寄存器訪問的寄存器區(qū)名SRC 不生成目標文件只生成匯編源文件其它控件不

23、常用。3 .列表文件(listing)控制類:CODE(CD):向列表文件加入?yún)R編列表LISTINCLUDE(LC):顯示 indude文件SYMBOLS(SB) :列表文件包括模塊內(nèi)所有符號的列表WARNINGLEVEL(WL) :選擇“警告”級別第二節(jié)dScope51的使用1. dScope51 for Dos總的來說dScope51具有以下特性:高級語言顯示模式集成硬件環(huán)境模擬單步或“GO” 執(zhí)行模式存儲器、寄存器及變量訪問 Watch 表達式之值函數(shù)與信號功能下面,具體說明在進入dScope51 for Dos 之后,如何實現(xiàn)上述功能,dScope51 采用下拉菜單格式和窗口顯示控制,

24、共有l(wèi)anguage、 serial、 exe、register四個窗口,其中exe為命令行窗口,language為程序窗口,serial為串口 窗,register為寄存器窗。(1) 高級語言顯示模式單 擊 主 菜 單 中 的 “ View” , 第 一 欄 中 的 三 條 命 令 “ Highlevel 、” “Mixed"、“Assembly”分別對所裝入的程序按照“高級”、“混合級”及“匯編級”三種方式顯示,以方便調(diào)試使用。(2) 集成硬件環(huán)境模擬顯示主菜單中“Peripheral 各條能顯示模擬硬件環(huán)境的狀態(tài),其中: ”i/o Port:顯示各I/O 口之值,對8031而言

25、SFR中的P1、P2、P3、P0與弓I 腳之值分別列出:Interrupt:顯示5個中斷源的入口模式是否允許,優(yōu)先級等中斷狀態(tài)。Timer:顯示各定時/計數(shù)器的模式,初始值狀態(tài)等。int Message中斷信息允許,如為允許("也現(xiàn)),則當中斷申請時,顯示中斷源信息。比如當中斷發(fā)生時會顯示:“interrupt Timer 0 occurec等”A/D converter:顯示 A/D 轉(zhuǎn)換器狀態(tài)無時,則提示“無”。Serial:串口信息顯示,包括串口模式、波特產(chǎn)等Other:其它器彳如為8031則顯示“無”(3) 單步或“Go” 執(zhí)行“F8”單步執(zhí)行,“ F5”全速執(zhí)行到斷點?;蜻x

26、主菜單中Trace單步執(zhí)行CPU 中的 Go 全速執(zhí)行。(4) 存儲器寄存器及變量訪問外部存儲器管理 MAP菜單:設(shè)置(set)、取消(reset卜顯示(Display)處理可用存儲空間。修改Code代碼:ASM命令存儲器顯示命令:D 類別為(X、 D、 I、 B、 C)修改存儲器命令:E 有以下幾種命令EB、 EC、 EI、 EL、 EF、 EP復(fù)雜數(shù)據(jù)類型顯示:Object 命令;用以顯示結(jié)構(gòu)或數(shù)組的內(nèi)容。欲使此命令有效, C51 編譯器必須有DB 及 OBJECTEXTEND 兩條。反匯編命令:U(5) “ Watch達式之值在 View 菜 單 的 “ Watch” 一 欄 中 有 四

27、 項 : 其 中 包 括 定 義 Watch Point(Define)、刪除 Watch Point(remove,kill all),及自動更新選項。也可用WS、 WK 等命令代替,下面具體看“表達式”類型:dScope51 一次最多可設(shè)16 個 WtchPoint 表達式,顯示于Watch Window 之中,表達式可以是簡單變量,也可是復(fù)雜數(shù)據(jù)類型如結(jié)構(gòu)、數(shù)組和指向結(jié)構(gòu)的指針等,例如:>WS *ptime>WS ptimehour>WS some_recordo, analog 等等(6) 關(guān)于 .IOF 文件啟動DS51后必須裝入.IOF文件才能使CPU及Perip

28、heral各項起作用,這個函數(shù)的使用是依據(jù)8051 系列 CPU 的不同特點,裝入8051 各 CPU 硬件設(shè)備模擬驅(qū)動文件,比如8031CPU 就必須 load DS51 目錄下的8051.IOF。2. dScope for WindowsdScope for windows具有dScope for dos的全部功能,止匕外,它還具有以下明顯的優(yōu)點:(1) 標準的 Windows 界面,操作更容易更簡單;(2)常用操作多用對話框,而非 Dos的行命令方式;(3) 窗口資源更加豐富:存儲器窗口、覆蓋率分析、運行狀態(tài)分析窗口,加強了調(diào)試功能;因為dScope for Windows功能強大,具體

29、操作在第八章詳細介紹。第三節(jié) Monitor51 及其使用1. Monitor51 對硬件的要求(1) 硬件系統(tǒng)為51 系列CPU;(2) 帶 5K 外部程序存儲器(從 O 地址開始),存放Monitor51 程序;(3) 256Bytes的外部數(shù)據(jù)存儲器以及5K的跟蹤緩沖區(qū),止匕外,外部數(shù)據(jù)存儲器必須足夠容納所有應(yīng)用程序代碼及數(shù)據(jù),且所有外部數(shù)據(jù)存儲器必須為馮諾伊曼存儲器,即能一致訪問 XDATA與Code空間。(4) 一個定時器作為波特率發(fā)生器供串口使用;(5) 6 Bytes的空余堆棧。2. Mon51 的使用Mon51 的使用途徑有三種方式:(1) Dos行命令方式即先用 instal

30、l 對 MON51 進行配置,然后用MON51 進入 Monitor 狀態(tài),啟用各種命令對Monitor51 進行調(diào)試。(2) tScope51 方式啟動tScope51裝入TS51目錄下的MON51.IOT驅(qū)動文件,與目標板通信。(3) dScope51 for Windows 方式在選 CPU 驅(qū)動文件時,選“MON51.dll ”,則檢查目標板并進入MON51 狀態(tài)。3. MON51 的配置(1) MON51 for Dos 的配置運行 install 文件(在MON51 目錄下),不同的參數(shù)可以配置不同的硬件環(huán)境。INSTALL Serialtype xdstastartcodesta

31、rtbankPROMCHECK,具體說明 見 MON51 幫助文件或使用手冊。(2) MON51 for Windows 的配置在啟用 MON51.dll 時,會使得系統(tǒng)自動檢查目標板連接,如配置不對,則彈出“ Configuration 對話框,設(shè)置 ”PC 串口,波特率等,完畢單擊“apply ”有效。4. 串口連接圖:收發(fā)交叉互連,RTS、 CTS 直連,DSR、 DTR 直連,具體引腳排列參考串口資料。5. MON51 命令及使用 詳細的 MON51 命令可參閱幫助。第四節(jié)集成開發(fā)環(huán)境(IDE)的使用1. Ishell for Dos 的使用進入Ishell之后看到兩個窗口: 一個是文

32、件窗口,一個是Dos命令行窗口,窗口上方是下拉式的命令菜單,其中的Files控制文件窗口的顯隱。使用Ishell,第一步就是配置系統(tǒng),即要學習兩個文件的修改與創(chuàng)建:(1) Ishell.CFG 文件每一個project都有一個Ishell.CFG,其中存放有“ Option菜單和Setup菜單下的部分信息;Bell enabled、 Monochrome enabled、 Editor Selected、 CRTLines、 target enviroment、 name of user edit、 Automatic load for configuration enabled、 file

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

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

35、6、 L166 等編譯連接器。點中主菜單中的Automake即運行本工具。Ishell for Dos 使用比較繁瑣,推薦使用uVision for windows 。2. uVision for windows 的使用uVision 是一個標準的windows 應(yīng)用程序,其編譯功能、文件處理功能、project 處理功能、窗口功能以及工具引用功能(如 A51 、 C51、 PL/M41 、 BL51dScope等)等都較Ishell for Dos要強得多。uVision 采用 BL51 作連接器,因為BL51 兼容 L51 ,所以一切能在Dos 下工作的project都可以到uVision

36、中進行連接調(diào)試。uVision 采用 dScope for windows 作調(diào)試器,該調(diào)試器支持MON51 及系統(tǒng)模擬兩種方式,功能較for DOS 要強大好用,調(diào)試功能強大。注意:(1) Option 菜單下的各項要會使用,其中A51 、 C51、 PL/M51 、 BL51 定義各文件所使用的編譯、連接控制指令,dScope定義一個dScope初始化文件。Make 則是定義一個make文件。(2) 進入調(diào)試是在RUN 菜單下運行dScope。project中包括新建、打開、修改、更新、編譯、連接等 poject處理,具體使用可參考后面的例子。第三章 Keil C51 vs 標準 C深入理

37、解并應(yīng)用C51 對標準 ANSIC 的擴展是學習C51 的關(guān)鍵之一。因為大多數(shù)擴展功能都是直接針對8051 系列 CPU 硬件的。大致有以下8 類: 8051 存儲類型及存儲區(qū)域存儲模式存儲器類型聲明變量類型聲明位變量與位尋址特殊功能寄存器 (SFR) C51 指針函數(shù)屬性具體說明如下(8031 為缺省CPU)。第一節(jié) Keil C51 擴展關(guān)鍵字C51 V4.0 版本有以下擴展關(guān)鍵字(共 19個 ):_at_idatasfr16alieninterruptsmallbdatalarge_task_Codebitpdatausingreentrant xdatacompactsbitdata

38、sfr第二節(jié) 內(nèi)存區(qū)域(Memory Areas):1. Pragram Area:由Code說明可有多達64kBytes的程序存儲器2. Internal Data Memory:內(nèi)部數(shù)據(jù)存儲器可用以下關(guān)鍵字說明:data:直接尋址區(qū),為內(nèi)部 RAM的低128字節(jié) 00H7FHidata:間接尋址區(qū),包括整個內(nèi)部 RAM區(qū)00HFFHbdata:可位尋址區(qū),20H2FH3. External Data Memory外部 RAM 視使用情況可由以下關(guān)鍵字標識:xdata:可指定多達64KB的外部直接尋址區(qū),地址范圍 0000H0FFFFHpdata:能訪問1頁(25bBytes)的外部RAM

39、,主要用于緊湊模式(CompactModel)。4. Speciac Function Register Memory8051提供128Bytes的SFR尋址區(qū),這區(qū)域可位尋址、字節(jié)尋址或字尋址,用以控制定時器、計數(shù)器、串口、I/O 及其它部件,可由以下幾種關(guān)鍵字說明:sfr:字節(jié)尋址 比如sfr P0=0x80;為PO 口地址為80H, “ = "后HFFH 之間的常數(shù)。sfr16 : 字 尋 址 , 如 sfr16 T2=0xcc; 指 定 Timer2 口 地 址 T2L=0xccT2H=0xCDsbit:位尋址,如sbit EA=0xAF;指定第0xAF位為EA,即中斷允許

40、還可以有如下定義方法:sbit0V=PSWA2;(定義 0V 為 PSW 的第 2 位)sbit 0V = 0XDOA2;(同上)或 bit 0V- = 0xD2(同上)。第三節(jié) 存儲模式存儲模式?jīng)Q定了沒有明確指定存儲類型的變量,函數(shù)參數(shù)等的缺省存儲區(qū)域,共三種:1. Small 模式所有缺省變量參數(shù)均裝入內(nèi)部RAM ,優(yōu)點是訪問速度快,缺點是空間有限,只適用于小程序。2. Compact 模式所有缺省變量均位于外部 RAM區(qū)的一頁(256Bytes),具體哪一頁可由P2 口 指定,在STARTUP.A51文件中說明,也可用pdata指定,優(yōu)點是空間較 Small 為寬裕速度較Small 慢,

41、較 large 要快,是一種中間狀態(tài)。3. large 模式所有缺省變量可放在多達64KB 的外部 RAM 區(qū),優(yōu)點是空間大,可存變量多,缺點是速度較慢。提示:存儲模式在C51 編譯器選項中選擇。第四節(jié) 存儲類型聲明變量或參數(shù)的存儲類型可由存儲模式指定缺省類型,也可由關(guān)鍵字直接聲明指定。各類型分別用:code,data,idata,xdata,pdat說明,例:data uar1char code array = "hello! ” ;unsigned char xdata arr1044;第五節(jié) 變量或數(shù)據(jù)類型C51 提供以下幾種擴展數(shù)據(jù)類型:bit 位變量值為0或 1sbit 從

42、字節(jié)中定義的位變量0 或 1sfr sfr字節(jié)地址 0255sfr16 sfr 字地址 0 65535其余數(shù)據(jù)類型如:char,enum,short,int,long,float等與 ANSI C 相同。第六節(jié) 位變量與聲明1. bit 型變量bit 型 變 量 可 用 變 量 類 型 , 函 數(shù) 聲 明 、 函 數(shù) 返 回 值 等 , 存 貯 于 內(nèi) 部 RAM20H 2FH。注意: 用# pragma disable說明函數(shù)和用“ usign指定的函數(shù),不能返回bit值。(2) 一個bit變量不能聲明為指針,如bit *ptr;是錯誤的 不能有bit數(shù)組如:bit arr5;錯誤。2. 可

43、位尋址區(qū)說明20H 2FH可作如下定義:int bdata i;char bdata arr3,然后:sbit bito = in0; sbit bit15=I八15;sbit arr07=arr0八7; sbit arr15=arriA7 ;第七節(jié) Keil C51 指針C51 支持一般指針(Generic Pointer那存儲器指針(Memory_Specific Pointer).1. 一般指針一般指針的聲明和使用均與標準C 相同,不過同時還可以說明指針的存儲類型,例如:long * state為一個指向long型整數(shù)的指針,而state本身則依存儲模式存放。char * xdata p

44、tr; ptr為一個指向char數(shù)據(jù)的指針,而ptr本身放于外部RAM 區(qū),以上的long,char等指針指向的數(shù)據(jù)可存放于任何存儲器中。一般指針本身用3 個字節(jié)存放,分別為存儲器類型,高位偏移,低位偏移量。2. 存儲器指針基于存儲器的指針說明時即指定了存貯類型,例如:char data * str;str指向 data 區(qū)中 char型數(shù)據(jù)int xdata * pow; pow 指向外部RAM 的 int 型整數(shù)。這種指針存放時,只需一個字節(jié)或2 個字節(jié)就夠了,因為只需存放偏移量。3. 指針轉(zhuǎn)換即指針在上兩種類型之間轉(zhuǎn)化:當基于存儲器的指針作為一個實參傳遞給需要一般指針的函數(shù)時,指針 自動

45、轉(zhuǎn)化如果不說明外部函數(shù)原形,基于存儲器的指針自動轉(zhuǎn)化為一般指針,導(dǎo)致錯誤,因而請用“ include 說明所有函數(shù)原形?!笨梢詮娦懈淖冎羔橆愋汀5诎斯?jié) Keil C51 函數(shù)C51 函數(shù)聲明對ANSI C 作了擴展,具體包括:1. 中斷函數(shù)聲明:中斷聲明方法如下:void serial_ISR () interrupt 4 using 1/* ISR */為提高代碼的容錯能力,在沒用到的中斷入口處生成iret 語句,定義沒用到的中斷。/* define not used interrupt, so generate "IRET" in their entrance */vo

46、id extern0_ISR() interrupt 0/*notused*/void timer0_ISR () interrupt 1/*notused*/void extern1_ISR() interrupt 2/*notused*/void timer1_ISR () interrupt 3/*notused*/void serial_ISR () interrupt 4/* not used */2. 通用存儲工作區(qū)3. 選通用存儲工作區(qū)由using x聲明,見上例。4. 指定存儲模式由 small compact 及 large 說明,例如:void fun1(void) sma

47、ll 提示:small說明的函數(shù)內(nèi)部變量全部使用內(nèi)部RAM。關(guān)鍵的經(jīng)常性的耗 時的地方可以這樣聲明,以提高運行速度。5. #pragma disable在函數(shù)前聲明,只對一個函數(shù)有效。該函數(shù)調(diào)用過程中將不可被中斷。6. 遞歸或可重入函數(shù)指定在主程序和中斷中都可調(diào)用的函數(shù),容易產(chǎn)生問題。因為51 和 PC 不同,PC 使用堆棧傳遞參數(shù),且靜態(tài)變量以外的內(nèi)部變量都在堆棧中;而51 一般使用寄存器傳遞參數(shù),內(nèi)部變量一般在RAM 中,函數(shù)重入時會破壞上次調(diào)用的數(shù)據(jù)。可以用以下兩種方法解決函數(shù)重入:a、在相應(yīng)的函數(shù)前使用前述“ #pragma disable聲明,即只允許主程序或中斷之一調(diào)用該函數(shù);b、

48、將該函數(shù)說明為可重入的。如下:void func(param.) reentrant;KeilC51 編譯后將生成一個可重入變量堆棧,然后就可以模擬通過堆棧傳遞變量的方法。由于一般可重入函數(shù)由主程序和中斷調(diào)用,所以通常中斷使用與主程序不同的 R 寄存器組。另外,對可重入函數(shù),在相應(yīng)的函數(shù)前面加上開關(guān)“ #pragma noaregs,"以 禁止編譯器使用絕對寄存器尋址,可生成不依賴于寄存器組的代碼。7. 指定PL/M 51 函數(shù)由 alien 指定。第四章Keil C51高級編程本章討論以下內(nèi)容:絕對地址訪問C 與匯編的接口C51 軟件包中的通用文件段名轉(zhuǎn)換與程序優(yōu)化第一節(jié) 絕對地址

49、訪問C51 提供了三種訪問絕對地址的方法:1. 絕對宏:在程序中,用“# include<absacc.h>即可使用其中定義的宏來訪問絕對地址, 包括:CBYTE 、 XBYTE 、 PWORD 、 DBYTE 、 CWORD 、 XWORD 、 PBYTE 、 DWORD具體使用可看一看 absacc.h便知例如:rval=CBYTE0x0002;指向程序存貯器的0002h地址rval=XWORD 0x0002; 指向外 RAM 的 0004h 地址2. _at_關(guān)鍵字直接在數(shù)據(jù)定義后加上_at_ const即可,但是注意:(1)絕對變量不能被初使化;(2)bit型函數(shù)及變量不能

50、用_at_指定。例如:idata struct link list _at_ 0x40;指定 list 結(jié)構(gòu)從 40h 開始。xdata char text25b _at_0xE00Q 指定 text 數(shù)組從 0E000H 開始提示:如果外部絕對變量是I/O 端口等可自行變化數(shù)據(jù),需要使用 volatile 關(guān)鍵字進行描述,請參考absacc.h。3. 連接定位控制此法是利用連接控制指令 code xdata pdata data bdata對“段”地址進行,如要 指定某具體變量地址,則很有局限性,不作詳細討論。第二節(jié) Keil C51 與匯編的接口1.模塊內(nèi)接口方法是用# pragma語句具

51、體結(jié)構(gòu)是:#pragma asm 匯編行#pragma endasm這種方法實質(zhì)是通過asm與ndasm告訴C51編譯器中間行不用編譯為匯編 行,因而在編譯控制指令中有 SRC以控制將這些不用編譯的行存入其中。 2.模塊間接口C模塊與匯編模塊的接口較簡單,分別用 C51與A51對源文件進行編譯, 然后用L51將obj文件連接即可,關(guān)鍵問題在于 C函數(shù)與匯編函數(shù)之間的參數(shù) 傳遞問題,C51中有兩種參數(shù)傳遞方法。(1)通過寄存器傳遞函數(shù)參數(shù)最多只能有3個參數(shù)通過寄存器傳遞,規(guī)律如下表:參數(shù)數(shù)目CharIntlong,float一般指針1R7R6 & R7R4 R7R1 R32R5R4 &a

52、mp; R5R4 R7R1 R33R3R2 & R3R1 R3(2)通過固定存儲區(qū)傳遞(fixed memory)這種方法將bit型參數(shù)傳給一個存儲段中:? function_name?BIT將其它類型參數(shù)均傳給下面的段:? function_name?BYTE,且按照預(yù)選順序存放。至于這個固定存儲區(qū)本身在何處,則由存儲模式默認。(3)函數(shù)的返回值函數(shù)返回值一律放于寄存器中,有如下規(guī)律:Return typeRegistev說明Bit標志位由具體標志位返回char/unsigned char 1_byte指針R7單字節(jié)由R7返回int/unsigned int2_byte指針R6 &a

53、mp; R7雙字節(jié)由R6和R7返回,MSB在R6long&unsigned longR4 R7MSB 在 R4, LSB 在 R7FloatR4 R732Bit IEEE 格式一般指針R1 R3存儲類型在R3高位R2低R1(4) SRC控制該控制指令將C文件編譯生成匯編文件(.SRC),該匯編文件可改名后,生成匯 編.ASM文件,再用A51進行編譯。第三節(jié)Keil C51軟件包中的通用文件在C51LiB目錄下有幾個C源文件,這幾個C源文件有非常重要的作用, 對它們稍事修改,就可以用在自己的專用系統(tǒng)中。1. 動態(tài)內(nèi)存分配init_mem.C:此文件是初始化動態(tài)內(nèi)存區(qū)的程序源代碼。它可以指

54、定動態(tài) 內(nèi)存的位置及大小,只有使用了 init_mem()才可以調(diào)回其它函數(shù),諸如 malloc calloc,realloc 等。calloc.c:此文件是給數(shù)組分配內(nèi)存的源代碼,它可以指定單位數(shù)據(jù)類型及 該單元數(shù)目。malloc.c:此文件是malloc的源代碼,分配一段固定大小的內(nèi)存。realloc.c:此文件是realloc.c源代碼,其功能是調(diào)整當前分配動態(tài)內(nèi)存的大 小。2. C51 啟動文件 STARTUP.A51啟動文件STARTUP.A51中包含目標板啟動代碼,可在每個 project中力口入 這個文件,只要復(fù)位,則該文件立即執(zhí)行,其功能包括: 定義內(nèi)部RAM大小、外部RAM大小、可重入堆棧位置 清除內(nèi)部、外部或

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論