第一節(jié) 系統(tǒng)概述
Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)
性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。
Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯
后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。
在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。
第二節(jié) Keil C51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)
第三節(jié) Keil C51工具包各部分功能及使用簡介
1 )C51與A51
1.1 C51
C51是C語言編譯器,其使用方法為:
C51 sourcefile[編譯控制指令]或者C51 @ commandfile
其中sourcefile為C源文件(.C)
編譯控制指令完成C51編譯器的全部功能,包控C51輸出文件C.LST,.OBJ,.I和.SRC文件的控制。
源文件(.C)的控制等。
而Commandfile為一個連接控制文件其內(nèi)容包括:.C源文件及各編譯控制指令,它沒有固定的名字,開發(fā)人員可根據(jù)自
己的習(xí)慣指定,它適于用控制指令較多的場合。
1.2 A51
A51是匯編語言編譯器,使用方法為:
A51 sourcefile[編譯控制指令]或A51 @ commandfile
其中sourcefile為匯編源文件(.asm或.a51)
編譯控制指令的使用與其它匯編如ASM語言類似,可參考其他匯編語言材料。
Commandfile同C51中的Commandfile類似,它使A51使用和修改方便。
2) L51和BL51
2.1 L51
L51是Keil C51軟件包提供的連接/定位器,其功能是將編譯生成的OBJ文件與庫文件連接定位生成絕對目標(biāo)文件
(.ABS),其使用方法為:
L51 目標(biāo)文件列表[庫文件列表] [to outputfile] [連接控制指令]
或 L51 @Commandfile
源程序的多個模塊分別經(jīng)C51與A51編譯后生成多個OBJ文件,連接時,這些文件全列于目標(biāo)文件列表中,作為輸入文件
,如果還需與庫文件(.LIB)相連接,則庫文件也必須列在其后。outputfile為輸文件名,缺少時為第一模塊名,后綴為
.ABS。連接控制指令提供了連接定位時的所有控制功能。
Commandfile為連接控制文件,其具體內(nèi)容是包括了目標(biāo)文件列表,庫文件列表及輸出文件、連接控制命令,以取代第
一種繁瑣的格式,由于目標(biāo)模塊庫文件大多不止1個,因而第2種方法較多見,這個文件名字也可由使用者隨意指定。
2. 2 BL51
BL51也是C51軟件包的連接/定位器,其具有L51的所有功能,此外它還具有以下3點特別之處:
a. 可以連接定位大于64kBytes的程序。
b. 具有代碼域及域切換功能(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),因而可用面很窄,在本文中不作介紹。Bank switching技術(shù)因使用很少也不作介紹。
3. 3. DScope51,Tscope51及Monitor51
1. (1) dScope51
dScope51是一個源級調(diào)試器和模擬器,它可以調(diào)試由C51編譯器、A51匯編器、PL/M-51編譯器及ASM-51匯編器產(chǎn)生的程序。它不需目標(biāo)板(for windows也可通過mon51接目標(biāo)板),只能進行軟件模擬,但其功能強大,可模擬CPU及其外圍器件,如內(nèi)部串口,外部I/O及定時器等,能對嵌入式軟件功能進行有效測試。
其使用方法為:
DS51[debugfile][INIT(initfile)]
其中debugfile是一個Hex格式的8051文件,即待調(diào)試的文件其為可選的,可在進入dScope51后用load命令裝入。
Initfile為一個初使化文件,它在啟動dScope51后,在debugfile裝入前裝入,裝有一些dScope的初使化參數(shù)及常用調(diào)試函數(shù)等。下面是一個dScope.ini文件(for dos)的內(nèi)容:
Load ....ds518051.iof
Map 0,0xffff
dScope51 for Windows則直接用鼠標(biāo)進入,然后用load裝入待調(diào)文件。
2. (2) tScope51
與dScope51不同的是Scope51必須帶目標(biāo)板,目前它可以通過兩種方式訪問目標(biāo)板。(1) 通過EMul51在線仿真器,tScope51為該仿真器準(zhǔn)備了一個動態(tài)連接文件EMUL51.IOT,但該方法必須配合該仿真器。(2) 通過Monitov51監(jiān)控程序,這種方法是可行的,tScope51為訪問Monitor51專門帶有MON51.IOT連接程序,使用時可通過串口及監(jiān)控程序來調(diào)試目標(biāo)板。
其使用方法為:
TS51[INIT(file_name.ini)]
其中file_name.ini為一個初使化文件。
進入TS51后,必須裝入IOT文件,可用的有MON51.IOT及EMUL51.IOT兩種,如裝入MON51.IOT:
Load.C:C51TS51MON51.IOT CPUTYPE(80517)
可惜的是tScope51只有for Dos的版本。
3. (3) Monitor 51
Monitor51是一個監(jiān)控程序通過PC機的串口與目標(biāo)板進行通信,Monitor操作需要MON51或dScope51 for Windows,后面部分將對Monitor51做較為詳細的介紹。
4. 4. Ishell及uVision
1. (1) Ishell for Dos
這是一個for Dos的IDE,直接在命令行鍵入Ishell,則進入該環(huán)境,它使用簡單方便。其命令行與DOS命令行具有同樣的功能,對單模塊的Project直接由菜單進行編譯連接,對多模塊的project。則通過批處理,BAT文件進行編譯連接,然后通過菜單控制由dScope51或tScope51對程序進行調(diào)試,因為是for dos的,不做太詳細介紹。
2. (2) uVision for Windows
uVision for Windows是一個標(biāo)準(zhǔn)的Windows應(yīng)用程序,它是C51的一個集成軟件開發(fā)平臺,具有源代碼編輯、project管理、集成的make等功能,它的人機界面友好,操作方便,是開發(fā)者的首選,具體配置及使用見第五部分。
2. 第二章 Keil C51軟件使用詳解
1. 第一節(jié) Keil C51編譯器的控制指令
C51編譯器的控制指令分為三類:源文件控制類,目標(biāo)文件控制類及列表控制類。
1. 1. 源文件控制類
NOEXTEND:C51源文件不允許使用ANSI C擴展功能。
DEFINE(DF):定義預(yù)處理(在C51命令行)。
2. 2. 目標(biāo)文件(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 不生成目標(biāo)文件只生成匯編源文件
其它控件不常用。
3. 3. 列表文件(listing)控制類:
CODE(CD):向列表文件加入?yún)R編列表
LISTINCLUDE(LC):顯示indude文件
SYMBOLS(SB):列表文件包括模塊內(nèi)所有符號的列表
WARNINGLEVEL(WL):選擇“警告”級別
2. 第二節(jié) dScope51的使用
1. 1. dScope51 for Dos
總的來說dScope51具有以下特性:
l 高級語言顯示模式
l 集成硬件環(huán)境模擬
l 單步或“GO”執(zhí)行模式
l 存儲器、寄存器及變量訪問
l Watch表達式之值
l 函數(shù)與信號功能
下面,具體說明在進入dScope51 for Dos之后,如何實現(xiàn)上述功能,dScope51采用下拉菜單格式和窗口顯示控制,共有l(wèi)anguage、serial、exe、register四個窗口,其中exe為命令行窗口,language為程序窗口,serial為串口窗,register為寄存器窗。
1. (1) 高級語言顯示模式
單擊主菜單中的“View”,第一欄中的三條命令“Highlevel”、“Mixed”、“Assembly”分別對所裝入的程序按照“高級”、“混合級”及“匯編級”三種方式顯示,以方便調(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)),則當(dāng)中斷申請時,顯示中斷源信息。比如當(dāng)中斷發(fā)生時會顯示:
“interrupt Timer 0 occured”等
A/D converter:
顯示A/D轉(zhuǎn)換器狀態(tài)無時,則提示“無”。
Serial:串口信息顯示,包括串口模式、波特產(chǎn)等
Other:其它器件,如為8031則顯示“ 無”
3. (3) 單步或“Go”執(zhí)行
“F8”單步執(zhí)行,“F5”全速執(zhí)行到斷點。或選主菜單中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命令;用以顯示結(jié)構(gòu)或數(shù)組的內(nèi)容。欲使此命令有效,C51編譯器必須有DB及OBJECTEXTEND兩條。
反匯編命令:U
5. (5) “Watch”表達式之值
在View菜單的“Watch”一欄中有四項:其中包括定義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 ptime→hour
>WS some_record[o],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 Windows
dScope for windows具有dScope for dos的全部功能,此外,它還具有以下明顯的優(yōu)點:
(1) 標(biāo)準(zhǔn)的Windows界面,操作更容易更簡單;
(2) 常用操作多用對話框,而非Dos的行命令方式;
(3) 窗口資源更加豐富:存儲器窗口、覆蓋率分析、運行狀態(tài)分析窗口,加強了調(diào)試功能;
因為dScope for Windows功能強大,具體操作在第八章詳細介紹。
3. 第三節(jié) Monitor51及其使用
1. 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. 2. Mon51的使用
Mon51的使用途徑有三種方式:
(1) Dos行命令方式
即先用install對MON51進行配置,然后用MON51進入Monitor狀態(tài),啟用各種命令對Monitor51進行調(diào)試。
(2) tScope51方式
啟動tScope51裝入TS51目錄下的MON51.IOT驅(qū)動文件,與目標(biāo)板通信。
(3) dScope51 for Windows方式
在選CPU驅(qū)動文件時,選“MON51.dll”,則檢查目標(biāo)板并進入MON51狀態(tài)。
3. 3. MON51的配置
(1) MON51 for Dos的配置
運行install文件(在MON51目錄下),不同的參數(shù)可以配置不同的硬件環(huán)境。INSTALL Serialtype [xdstastart[codestart[bank][PROMCHECK]]],具體說明見MON51幫助文件或使用手冊。
(2) MON51 for Windows的配置
在啟用MON51.dll時,會使得系統(tǒng)自動檢查目標(biāo)板連接,如配置不對,則彈出“Configuration”對話框,設(shè)置PC串口,波特率等,完畢單擊“apply”有效。
4. 4. 串口連接圖:
收發(fā)交叉互連,RTS、CTS直連,DSR、DTR直連,具體引腳排列參考串口資料。
5. 5. MON51命令及使用
詳細的MON51命令可參閱幫助。
4. 第四節(jié) 集成開發(fā)環(huán)境(IDE)的使用
1. 1. Ishell for Dos的使用
進入Ishell之后看到兩個窗口:一個是文件窗口,一個是Dos命令行窗口,窗口上方是下拉式的命令菜單,其中的Files控制文件窗口的顯隱。
使用Ishell,第一步就是配置系統(tǒng),即要學(xué)習(xí)兩個文件的修改與創(chuàng)建:
1. (1) Ishell.CFG文件
每一個project都有一個Ishell.CFG,其中存放有“Option菜單和Setup菜單下的部分信息;Bell enabled、Monochrome enabled、Editor Selected、CRT Lines、target enviroment、name of user edit、Automatic load for configuration enabled、file window enabled、file specification for file window、translate command line controls、project name等。
對每個project都必須設(shè)置以上信息,然后存盤“setup”的的“save”,這樣才可正式開始下面工作。
2. (2) IShell.col文件
對IDE顏色設(shè)置,如不改動,可以缺省為主。
3. (3) CDF文件
該文件位于BIN目錄下,每一文件定義一組外部函數(shù)工具包,即定義外部環(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工具包中以O(shè)BJECT文件形式保留了一個project的信息,AutoMake用這些信息來進行project管理,一旦手工建立一個project,Automake可生成一個新的OBJECT,AutoMake利用此文件來編譯那些修改過的文件。
Automake支持C51、A51、L51/BL51、C166、A166、L166等編譯連接器。點中主菜單中的Automake即運行本工具。
Ishell for Dos使用比較繁瑣,推薦使用uVision for windows。
2. 2. uVision for windows的使用
uVision是一個標(biāo)準(zhǔn)的windows應(yīng)用程序,其編譯功能、文件處理功能、project處理功能、窗口功能以及工具引用功能(如A51、C51、PL/M41、BL51 dScope等)等都較Ishell for Dos要強得多。
uVision采用BL51作連接器,因為BL51兼容L51,所以一切能在Dos下工作的project都可以到uVision中進行連接調(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。
(3) project中包括新建、打開、修改、更新、編譯、連接等poject處理,具體使用可參考后面的例子。
3. 第三章 Keil C51 vs 標(biāo)準(zhǔn)C
深入理解并應(yīng)用C51對標(biāo)準(zhǔn)ANSIC的擴展是學(xué)習(xí)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 alien interrupt small
bdata large _task_ Code bit pdata
using reentrant xdata compact sbit data sfr
2. 第二節(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é) 00H~7FH
idata:間接尋址區(qū),包括整個內(nèi)部RAM區(qū) 00H~FFH
bdata:可位尋址區(qū), 20H~2FH
3. 3. External Data Memory
外部RAM視使用情況可由以下關(guān)鍵字標(biāo)識:
xdata:可指定多達64KB的外部直接尋址區(qū),地址范圍0000H~0FFFFH
pdata:能訪問1頁(25bBytes)的外部RAM,主要用于緊湊模式(Compact Model)。
4. 4. Speciac Function Register Memory
8051提供128Bytes的SFR尋址區(qū),這區(qū)域可位尋址、字節(jié)尋址或字尋址,用以控制定時器、計數(shù)器、串口、I/O及其它部件,可由以下幾種關(guān)鍵字說明:
sfr:字節(jié)尋址 比如 sfr P0=0x80;為PO口地址為80H,“=”后H~FFH之間的常數(shù)。
sfr16:字尋址,如sfr16 T2=0xcc;指定Timer2口地址T2L=0xcc T2H=0xCD
sbit:位尋址,如sbit EA=0xAF;指定第0xAF位為EA,即中斷允許
還可以有如下定義方法:
sbit 0V=PSW^2;(定義0V為PSW的第2位)
sbit 0V=0XDO^2;(同上)
或bit 0V-=0xD2(同上)。