KeilC51開發(fā)系統(tǒng)基本知識_第1頁
KeilC51開發(fā)系統(tǒng)基本知識_第2頁
KeilC51開發(fā)系統(tǒng)基本知識_第3頁
KeilC51開發(fā)系統(tǒng)基本知識_第4頁
KeilC51開發(fā)系統(tǒng)基本知識_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Keil C51開發(fā)系統(tǒng)基本知識1. 第一節(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界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面詳細介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用

2、。2. 第二節(jié)Keil C51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)C51工具包的整體結(jié)構(gòu),如圖所示,其中 uVision與Ishell分別是 C51 for Windows 和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標文件(.OBJ)。目標文件可由 LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由0H51轉(zhuǎn)換成標準的 Hex文件,以供調(diào)試器 dScope51或tScope51使用進 行源代碼級調(diào)試,也可由

3、仿真器使用直接對目標板進行調(diào)試,也可以直接寫入程序存貯器如EPROM 中。圖(1) C51工具包整體結(jié)構(gòu)圖3. 第三節(jié)Keil C51工具包的安裝1. 1. C51 for Dos在Windows下直接運行軟件包中 DOSC51DOS.exe然后選擇安裝目錄即可。完畢后欲使系統(tǒng)正常 工作須進行以下操作(設(shè)C:C51為安裝目錄):修改 Autoexec.bat,加入path=C:C51BinSet C51LIB=C:C51LIBSet C51INC=C:C51INC 然后運行Autoexec.bat2. 2. C51 for Win dows 的安裝及注意事項:在Windows下運行軟件包中 W

4、INSetup.exe,最好選擇安裝目錄與C51 for Dos相同,這樣設(shè)置最簡單(設(shè)安裝于C:C51目錄下)。然后將軟件包中crack目錄中的文件拷入 C:C51Bin目錄下。4. 第四節(jié)Keil C51工具包各部分功能及使用簡介1. 1. C51 與 A511. (1) C51C51是C語言編譯器,其使用方法為:C51 sourcefile編譯控制指令或者C51 comma ndfile其中sourcefile為C源文件(.C)。大量的編譯控制指令完成C51編譯器的全部功能。包控C51輸岀文件C丄ST,.OBJ,.I和.SRC文件的控制。源文件(.C)的控制等,詳見第五部分的具體介紹。而

5、Commandfile為一個連接控制文件其內(nèi)容包括:.C源文件及各編譯控制指令,它沒有固定的名字,開發(fā)人員可根據(jù)自己的習慣指定,它適于用控制指令較多的場合。2. A51A51是匯編語言編譯器,使用方法為:A51 sourcefile編譯控制指令 或 A51 commandfile其中sourcefile為匯編源文件(.asm或.a51),而編譯控制指令的使用與其它匯編如ASM語言類似,可參考其他匯編語言材料。Commandfile同C51中的Commandfile類似,它使 A51使用和修改方便。2. 2. L51 和 BL511. L51L51是Keil C51軟件包提供的連接/定位器,其功

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

7、繁瑣的格式,由于目標模塊庫文件大多不止1個,因而第2種方法較多見,這個文件名字也可由使用者隨意指定。2. (2) Bl51BL51也是C51軟件包的連接/定位器,其具有 L51的所有功能,此外它還具有以下3點特別之處:a. 可以連接定位大于 64kBytes的程序。b. 具有代碼域及域切換功能(CodeBa nking & Bank Switchi ng)c. 可用于RTX51操作系統(tǒng)RTX51是一個實時多任務(wù)操作系統(tǒng),它改變了傳統(tǒng)的編程模式,甚至不必用main()函數(shù),單片機系統(tǒng)軟件向RTOS發(fā)展是一種趨勢,這種趨勢對于186和386及68K系列CPU更為明顯和必須,對8051因CPU較為簡

8、單,程序結(jié)構(gòu)等都不太復(fù)雜,RTX51作用顯得不太突岀,其專業(yè)版軟件PK51軟件包甚至不包括 RTX51Full,而只有一個 RTX51TINY 版本的 RTOS。RTX51 TINY 適用于 無外部RAM的單片機系統(tǒng),因而可用面很窄,在本文中不作介紹。Bank switching技術(shù)因使用很少也不作介紹。3. 3. DScope51, Tscope51 及 Monitor511. dScope51dScope51是一個源級調(diào)試器和模擬器,它可以調(diào)試由C51編譯器、A51匯編器、PL/M-51編譯器及ASM 51匯編器產(chǎn)生的程序。它不需目標板(for windows也可通過 mon51接目標板)

9、,只能進行軟件模擬,但其功能強大,可模擬CPU及其外圍器件,如內(nèi)部串口,外部 I/O及定時器等,能對嵌入式軟件功能進行有效測試。其使用方法為:DS51debugfileINIT(i nitfile)其中debugfile是一個Hex格式的8051文件,即待調(diào)試的文件其為可選的,可在進入dScope51后用load命令裝入。Initfile為一個初使化文件,它在啟動dScope51后,在debugfile裝入前裝入,裝有一些dScope的初使化參數(shù)及常用調(diào)試函數(shù)等。下面是一個dScope.ini文件(for dos)的內(nèi)容:Load .ds518051.iofMap 0,0xffffdScope

10、51 for Windows則直接用鼠標進入,然后用load裝入待調(diào)文件。2. tScope51與dScope51不同的是Scope51必須帶目標板,目前它可以通過兩種方式訪問目標板。(1)通過EMul51在線仿真器,tScope51為該仿真器準備了一個動態(tài)連接文件EMUL51.IOT,但該方法必須配合該仿真器。(2)通過Monitov51監(jiān)控程序,這種方法是可行的,tScope51為訪問Monitor51專門帶有MON51.IOT連接程序,使用時可通過串口及監(jiān)控程序來調(diào)試目標板。其使用方法為:TS51INIT(file_ n ame.i ni)其中file_name.ini為一個初使化文件。

11、進入TS51后,必須裝入IOT文件,可用的有 M0N51.I0T及EMUL51.I0T 兩種,如裝入 M0N51 .IOT :Load.C:C51TS51MON51.IOT CPUTYPE(80517)可惜的是tScope51只有for Dos的版本。3. Mo nitor 51Monitor51是一個監(jiān)控程序通過PC機的串口與目標板進行通信,Monitor操作需要 MON51或dScope51 for Windows,后面部分將對 Monitor51做較為詳細的介紹。4. 4. Ishell 及 uVision1. (1) Ishell for Dos這是一個for Dos的IDE,直接在命

12、令行鍵入Ishell,則進入該環(huán)境,它使用簡單方便。其命令行與DOS命令行具有同樣的功能,對單模塊的Project直接由菜單進行編譯連接,對多模塊的project。則通過批處理,BAT文件進行編譯連接,然后通過菜單控制由dScope51或tScope51對程序進行調(diào)試,因為是for dos的,不做太詳細介紹。2. uVisio n for Win dowsuVision for Windows 是一個標準的 Windows應(yīng)用程序,它是 C51的一個集成軟件開發(fā)平臺,具有源代碼編輯、project管理、集成的 make等功能,它的人機界面友好,操作方便,是開發(fā)者的首選,具體配置及使用見第五部分

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

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

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

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

17、converter :顯示A/D轉(zhuǎn)換器狀態(tài)無時,則提示“無”。Serial :串口信息顯示,包括串口模式、波特產(chǎn)等 Other :其它器件,如為 8031則顯示“無”3. 單步或“ Go”執(zhí)行“F8單步執(zhí)行,“ F5”全速執(zhí)行到斷點?;蜻x主菜單中Trace單步執(zhí)行CPU中的Go全速執(zhí)行。4. (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

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

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

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

21、串口使用;(5) 6 Bytes的空余堆棧。2. 2. Mon51的使用Mon51的使用途徑有三種方式:(1) Dos行命令方式即先用in stall對MON51進行配置,然后用 MON51進入Mon itor狀態(tài),啟用各種命令對Mon itor51進行調(diào)試。tScope51方式啟動tScope51裝入TS51目錄下的MON51 .IOT驅(qū)動文件,與目標板通信。 dScope51 for Windows 方式在選CPU驅(qū)動文件時,選“ MON51.dll”,則檢查目標板并進入MON51狀態(tài)。3. 3. MON51的配置(1) MON51 for Dos 的配置運行in stall文件(在 MO

22、N51目錄下),不同的參數(shù)可以配置不同的硬件環(huán)境。INSTALL Serialtypexdstastartcodestartba nkPROMCHECK,具體說明見 MON51 幫助文件或使用手冊。 M0N51 for Win dows 的配置在啟用MON51.dll時,會使得系統(tǒng)自動檢查目標板連接,如配置不對,則彈岀Configuration對話框,設(shè)置PC串口,波特率等,完畢單擊“apply ”有效。4. 4.串口連接圖:收發(fā)交叉互連,RTS、CTS直連,DSR、DTR直連,具體引腳排列參考串口資料。5. 5. MON51命令及使用詳細的MON51命令可參閱幫助。4. 第四節(jié)集成開發(fā)環(huán)境(

23、IDE)的使用1. 1. Ishell for Dos 的使用進入Ishell之后看到兩個窗口:一個是文件窗口,一個是 Dos命令行窗口,窗口上方是下拉式的命 令菜單,其中的 Files控制文件窗口的顯隱。使用Ishell,第一步就是配置系統(tǒng),即要學習兩個文件的修改與創(chuàng)建:1. (1) Ishell.CFG 文件每一個project都有一個Ishell.CFG,其中存放有“ Option菜單和Setup菜單下的部分信息;Bellen abled、 Mono chrome en abled 、 Editor Selected 、 CRT Lines、 target en virome nt、 n

24、 ame of user edit、 Automatic load for configuration enabled 、 file window enabled 、 file specification for file window 、 tran slate comma nd line con trols、project n ame 等。對每個project都必須設(shè)置以上信息,然后存盤setup 的的save,這樣才可正式開始下面工作。2. IShell.col 文件對IDE顏色設(shè)置,如不改動,可以缺省為主。3. CDF文件該文件位于BIN目錄下,每一文件定義一組外部函數(shù)工具包,即定義外部

25、環(huán)境如8051.CDF,USER.CDF等,開發(fā)者可修改 CDF文件,供自己使用,至于 CDF文件內(nèi)容可查看一下8051.CDF即可知道。注意.CDF文件是Ishell系統(tǒng)的核心所在,不同的 CDF文件可使本IDE適用于不同的編 譯、連接系統(tǒng),即本IDE并不僅適于 C51。下面談一談Automake工具:C51的Automake是一個project管理器,在 8051工具包中以 OBJECT文件形式保留了一個 project 的信息,AutoMake用這些信息來進行 project管理,一旦手工建立一個 project,Automake可生成一 個新的OBJECT, AutoMake利用此文件

26、來編譯那些修改過的文件。Automake支持C51、A51、L51/BL51、C166、A166、L166等編譯連接器。點中主菜單中的Automake即運行本工具。Ishell for Dos 使用比較繁瑣,推薦使用uVision for windows。2. 2. uVisio n for wi ndows 的使用uVision是一個標準的 windows應(yīng)用程序,其編譯功能、文件處理功能、project處理功能、窗口功能以及工具引用功能(如A51、C51、PL/M41、BL51 dScope等)等都較Ishell for Dos要強得多。uVision采用BL51作連接器,因為 BL51兼

27、容L51,所以一切能在 Dos下工作的project都可以到 uVision中進行連接調(diào)試。uVision采用dScope for windows作調(diào)試器,該調(diào)試器支持 M0N51及系統(tǒng)模擬兩種方式,功能較 for DOS要強大好用,調(diào)試功能強大。Option菜單下的各項要會使用,其中A51、C51、PL/M51、BL51定義各文件所使用的編譯、連接控制指令,dScope定義一個dScope初始化文件。 Make則是定義一個 make文件。進入調(diào)試是在 RUN菜單下運行dScope。(3) project中包括新建、打開、修改、更新、編譯、連接等poject處理,具體使用可參考后面的例子。3.

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

29、g reentrant xdata compact sbit data sfr2. 第二節(jié)內(nèi)存區(qū)域(Memory Areas):1. 1. Pragram Area :由Code說明可有多達 64kBytes的程序存儲器2. 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. 3. External Data Memory外部RAM視使用情況可由以下關(guān)鍵字標識:xdata :可指定多達 64KB的外部直接尋

30、址區(qū),地址范圍0000H0FFFFHpdata:能訪問1頁(25bBytes)的外部 RAM,主要用于緊湊模式(Compact Model)。4. 4. Speciac Fun cti on 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=0xcc T2H=0xCDsbit

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

32、51文件中說明,也可用 pdata指定,優(yōu)點是空間較 Small為寬裕速度較 Small慢,較 large要快, 一種中間狀態(tài)。3. 3. large 模式所有缺省變量可放在多達64KB的外部RAM區(qū),優(yōu)點是空間大,可存變量多,缺點是速度較慢。提示:存儲模式在C51編譯器選項中選擇。4. 第四節(jié)存儲類型聲明變量或參數(shù)的存儲類型可由存儲模式指定缺省類型,也可由關(guān)鍵字直接聲明指定。各類型分別用: code,data,idata,xdata,pdata 說明,例:data uar1char code array = hello! ” ;unsigned char xdata arr1044;5. 第

33、五節(jié)變量或數(shù)據(jù)類型C51提供以下幾種擴展數(shù)據(jù)類型:bit位變量值為0或1sbit從字節(jié)中定義的位變量0或1sfr sfr字節(jié)地址 0255 sfr16 sfr 字地址 0 65535 其余數(shù)據(jù)類型如:char,enum,short,int,long,float 等與 ANSI C 相同。6. 第六節(jié)位變量與聲明1. 1. bit型變量bit型變量可用變量類型,函數(shù)聲明、函數(shù)返回值等,存貯于內(nèi)部RAM20H2FH。 用# pragma disable說明函數(shù)和用usign指定的函數(shù),不能返回bit值。一個bit變量不能聲明為指針,如bit *ptr ;是錯誤的(3)不能有bit數(shù)組如:bit a

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

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

36、器的指針作為一個實參傳遞給需要一般指針的函數(shù)時,指針自動轉(zhuǎn)化。l如果不說明外部函數(shù)原形,基于存儲器的指針自動轉(zhuǎn)化為一般指針,導(dǎo)致錯誤,因而請用“# include說明所有函數(shù)原形。l可以強行改變指針類型。8. 第八節(jié)Keil C51函數(shù)C51函數(shù)聲明對 ANSI C作了擴展,具體包括:1. 1.中斷函數(shù)聲明: 中斷聲明方法如下:void serialSR () interrupt 4 using 1 _/* ISR */為提高代碼的容錯能力,在沒用到的中斷入口處生成iret語句,定義沒用到的中斷。/* defi ne not used in terrupt, so gen erate IRET

37、 in their entrance */void externOSR() interrupt 0 /* not used */ void timerO_ISR () interrupt 1 /* not used */ void extern1SR() interrupt 2 /* not used */ void timer1_ISR () interrupt 3 /* not used */ void serial_ISR () interrupt 4 /* not used */2. 2.通用存儲工作區(qū)3. 3.選通用存儲工作區(qū)由using x聲明,見上例。4. 4.指定存儲模式由 s

38、mall compact 及 large 說明,例如:void fun 1(void) small 提示:small說明的函數(shù)內(nèi)部變量全部使用內(nèi)部RAM。關(guān)鍵的經(jīng)常性的耗時的地方可以這樣聲明,以提咼運行速度。5. 5. #pragma disable在函數(shù)前聲明,只對一個函數(shù)有效。該函數(shù)調(diào)用過程中將不可被中斷。6. 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ù)??梢杂靡韵聝煞N方法解決函數(shù)重入:a、 在相應(yīng)的

39、函數(shù)前使用前述“#pragma disable聲明,即只允許主程序或中斷之一調(diào)用該函數(shù);b、將該函數(shù)說明為可重入的。如下:void fun c(param.) ree ntra nt;KeilC51編譯后將生成一個可重入變量堆棧,然后就可以模擬通過堆棧傳遞變量的方法。 由于一般可重入函數(shù)由主程序和中斷調(diào)用,所以通常中斷使用與主程序不同的R寄存器組。另外,對可重入函數(shù),在相應(yīng)的函數(shù)前面加上開關(guān)“#pragma noaregs”,以禁止編譯器使用絕對寄存器尋址,可生成不依賴于寄存器組的代碼。7. 7.指定PL/M 51函數(shù) 由alien指定。4. 第四章Keil C51高級編程本章討論以下內(nèi)容:l

40、絕對地址訪問lC與匯編的接口l C51軟件包中的通用文件l段名轉(zhuǎn)換與程序優(yōu)化1. 第一節(jié)絕對地址訪問C51提供了三種訪問絕對地址的方法:1. 1.絕對宏:在程序中,用# include ”可使用其中定義的宏來訪問絕對地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD具體使用可看一看 absacc.h便知例如:rval=CBYTE0x0002;指向程序存貯器的 0002h地址rval=XWORD 0x0002; 指向外 RAM 的 0004h 地址2. 2. _at_關(guān)鍵字直接在數(shù)據(jù)定義后加上 _at_ con st即可,但是注意:(1)

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

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

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

44、unsigned int 2_byte 指針 R6 & R7 雙字節(jié)由 R6 和 R7 返回,MSB 在 R6long&unsigned long R4 R7 MSB 在 R4, LSB 在 R7float R4 R7 32Bit IEEE 格式一般指針R1R3存儲類型在 R3高位R2低R1SRC控制該控制指令將 C文件編譯生成匯編文件 (.SRC),該匯編文件可改名后,生成匯編.ASM文件,再用A51進行編譯。3. 第三節(jié)Keil C51軟件包中的通用文件在C51LiB目錄下有幾個 C源文件,這幾個 C源文件有非常重要的作用,對它們稍事修改,就可以 用在自己的專用系統(tǒng)中。1. 1.動態(tài)內(nèi)存分

45、配init_mem.C :此文件是初始化動態(tài)內(nèi)存區(qū)的程序源代碼。它可以指定動態(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. 2. C51 啟動文件 STARTUP.A51啟動文件STARTUP.A51中包含目標板啟動代碼,可在每個project中加入這個文件,只

46、要復(fù)位,則該文件立即執(zhí)行,其功能包括:l定義內(nèi)部RAM大小、外部 RAM大小、可重入堆棧位置l清除內(nèi)部、外部或者以此頁為單元的外部存儲器l按存儲模式初使化重入堆棧及堆棧指針l初始化8051硬件堆棧指針l向main()函數(shù)交權(quán)開發(fā)人員可修改以下數(shù)據(jù)從而對系統(tǒng)初始化常數(shù)名意義IDATALEN 待清內(nèi)部 RAM 長度XDATA START 指定待清外部 RAM起始地址XDATALEN 待清外部RAM長度IBPSTACK是否小模式重入堆棧指針需初始化標志,1為需要。缺省為 0IBPSTACKTOP指定小模式重入堆棧頂部地址XBPSTACK是否大模式重入堆棧指針需初始化標志,缺省為0XBPSTACKTO

47、P指定大模式重入堆棧頂部地址PBPSTACK是否Compact重入堆棧指針,需初始化標志,缺省為 0PBPSTACKTOP指定Compact模式重入堆棧頂部地址PPAGEENABLE P2 初始化允許開關(guān)PPAGE指定P2值PDATASTART 待清外部RAM頁首址PDATALEN待清外部RAM頁長度提示:如果要初始化 P2作為緊湊模式高端地址,必須: PPAGEENAGLE = 1,PPAGE為P2值,例 如指定某頁1000H 10FFH,貝U PPAGE = 10H,而且連接時必須如下:L51 PDATA(1080H),其中 1080H 是 1000H 10FFH 中的任一個值。以下是ST

48、ARTUP.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.J;To translate this file use A51 with the following invocation:J;A51 STARTUP.A51J;To li nk the modified STARTUP.OBJ file to your a

49、pplication use the follow ing;L51 in vocati on:J;L51 , STARTUP.OBJ ;User-defined Power-On Initialization of MemoryJ;With the following EQU statements the initialization of memory;at processor reset can be defi ned:J;the absolute start-address of IDATA memory is always 0 IDATALEN EQU 80H ; the len gt

50、h of IDATA memory in bytes.JXDATASTART EQU 0H ; the absolute start-address of XDATA memory XDATALEN EQU 0H ; the len gth of XDATA memory in bytes.JPDATASTART EQU 0H ; the absolute start-address of PDATA memory PDATALEN EQU 0H ; the len gth of PDATA memory in bytes.J;Notes: The IDATA space overlaps p

51、hysically the DATA and BIT areas of the ;8051 CPU. At minimum the memory space occupied from the C51;run-time routi nes must be set to zero.;Reentrant Stack In itilizati onJ;The following EQU statements define the stack pointer for reentrant;fun cti ons and in itialized it:J;Stack Space for ree ntra

52、 nt fun cti ons in the SMALL model.IBPSTACK EQU 0 ; set to 1 if small reentrant is used. IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest locatio n+1.J;Stack Space for reentrant functions in the LARGE model.XBPSTACK EQU 0 ; set to 1 if large reentrant is used. XBPSTACKTOP EQU 0FFFFH+1; set top o

53、f stack to highest location+1.J;Stack Space for ree ntra nt fun ctio ns in the COMPACT model. PBPSTACK EQU 0 ; set to 1 if compact ree ntrant is used. PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest locatio n+1.;Page Definition for Using the Compact Model with 64 KByte xdata RAMJ;The following

54、 EQU statements define the xdata page used for pdata;variables. The EQU PPAGE must con form with the PPAGE con trol used ;in the lin ker in vocati on.PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. PPAGE EQU 0 ; define PPAGE number.3. 3.標準輸入輸岀文件putchar.cputchar.c是一個低級字符輸岀子程,開發(fā)人員可修改后應(yīng)用到自己的硬件系統(tǒng)

55、上,例如向CLD或LEN輸岀字符。缺?。簆utchar.c是向串口輸岀一個字符XON|XOFF是流控標志,換行符“*n”自動轉(zhuǎn)化為回車/換行“ n”。getkey.cgetkey函數(shù)是一個低級字符輸入子程,該程序可用到自己硬件系統(tǒng),如矩陣鍵盤輸入中,缺省時通 過串口輸入字符。4. 4.其它文件還包括對 Watch-Dog有獨特功能的INIT.A51函數(shù)以及對8XC751適用的函數(shù),可參考源代碼。4. 第四節(jié) 段名協(xié)定與程序優(yōu)化1. 1.段名協(xié)定(Segment Naming Conventions)C51編譯器生成的目標文件存放于許多段中,這些段是代碼空間或數(shù)據(jù)空間的一些單元,一個段可以是可重定位的,也可以是絕對段,每一個可重定位的段都有一個類型和名字,C51段名有以下規(guī)定:每個段名包括前綴與模塊名兩部分,前綴表示存儲類型,模塊名則是被編譯的模塊的名字,例如:? CO ? main1 :表示main1模塊中的代碼段中的常數(shù)部分? PR ? function1 ? module表module模塊中函數(shù)function1的可執(zhí)

溫馨提示

  • 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

提交評論