本文檔中使用如下約定:
舉例 描述
README.TXT 黑粗體用來表示執(zhí)行文件數(shù)據(jù)文件源文件環(huán)境變量和你在
命令提示行鍵入的命令
這些文字往往表示你必須按照字面的字符鍵入如CLS DIR
BL51.EXE
Courier 這種形式的字體用來表示在屏幕或打印機上出現(xiàn)的信息.
Variables 斜體字表示必須由你提供的信息如在語法字符串中的
"projectfile"表示你必須提供實際的項目名稱少數(shù)情況下斜體字
也用來表示強調(diào)
Elements that 省略號表示一個你可以替換的內(nèi)容
Repeat
Omitted code 垂直的省略號用來在源程序列表中表示一段被忽略的程序如
Void main (void) {
while (1);
[Optional Items] 方括號表示命令行或輸入域中的可選項如
C51 TEST.C PRINT [(filename)]
{ opt1 | opt2 } 包括在大括號中的被'|'分開的文字表示一組選項必須從中選一
Keys 以sans serif字體出現(xiàn)的字符表示鍵盤上實際的鍵,如:
"Press Enter to continue." 中的Enter表示鍵盤上的回車鍵.
Point 移動鼠標直到光標直到期望的條目上
Click 單擊鼠標.
Drag 鼠標拖動操作.
Double-Click 雙擊鼠標.
目錄
第 1 章 簡介 .......................................................... ......... ......... ......... .........9
手冊主題 ...................................................... ………………………….10
本文檔的修改 .................................................. ……………………….10
測試版和產(chǎn)品工具包 ............................................ …………………...11
用戶類型 ...................................................... …………………………..11
請求援助 ...................................................... …………………………..12
軟件開發(fā)流程 .................................................. ………………………..13
產(chǎn)品一覽 ...................................................... …………………………..16
第 2 章 安裝 .......................................................... ………………………..19
系統(tǒng)要求 ...................................................... …………………………..19
安裝詳細信息 .................................................. ………………………..19
文件的組織結構 ................................................ ………………………20
第 3 章 開發(fā)工具
uVision2 集成開發(fā)環(huán)境 .......................................……………………. 21
C51 優(yōu)化C交叉編譯器 ........................................... …………………32
A51 宏匯編器 .................................................. ………………………..49
BL51 代碼連接定位器 ........................................... ……………………51
LIB51 庫管理器 .................................................. ………………………54
OC51 分塊目標文件轉換器 ....................................... 55
OH51 目標文件到HEX格式的轉換器 ................................ 55
第 4 章 建立應用
創(chuàng)建項目 ...................................................... 57
項目對象和文件組 .............................................. 64
配置對話框................................................. 66
代碼分塊 ...................................................... 67
uVision2 功能.................................................. 69
編寫優(yōu)化代碼 .................................................. 78
技巧 .......................................................... 82
第 5 章 測試程序
uVision2 調(diào)試器................................................ 93
調(diào)試命令....................................................... 107
表達式......................................................... 110
技巧........................................................... 126
第 6 章 uVision2的調(diào)試功能
創(chuàng)建函數(shù)....................................................... 131
調(diào)用函數(shù)....................................................... 133
函數(shù)類型....................................................... 133
調(diào)試函數(shù)與C函數(shù)的差異.......................................... 147
dScope和uVision2調(diào)試器的差異 .................................. 148
第 7 章 示例程序
HELLO 你的第一個8051C程序..................................... 150
MEASURE 一個遠端測量系統(tǒng).......................................155
第 8 章 單片機實時操作系統(tǒng)
介紹............................................................169
單片機實時操作系統(tǒng)技術數(shù)據(jù) .....................................173
實時操作系統(tǒng)線程瀏覽............................................174
TRAFFIC 小型實時操作系統(tǒng)示例...................................176
實時操作系統(tǒng)涉及的調(diào)試 .........................................180
第 9 章 使用片上外圍設備
特殊功能寄存器 .................................................183
寄存器組 .......................................................184
中斷服務程序....................................................185
中斷使能寄存器..................................................187
并行I/O口 ......................................................187
定時/記數(shù)器.....................................................189
串行接口 .......................................................190
看門狗定時器 ...................................................193
數(shù)/模 轉換......................................................194
模/數(shù) 轉換......................................................195
低功耗模式......................................................196
第 10 章 CPU和程序啟動代碼..............................................197
第 11 章 使用Monitor-51 ................................................199
警告............................................................199
硬件和軟件要求..................................................200
串口線..........................................................201
uVision2 Monitor 驅動 ..........................................201
使用Monitor-51時uVision2的限制 ................................202
使用Monitor-51時的工具配置......................................204
Monitor-51 配置.................................................206
沖突的解決 .....................................................208
使用Monitor-51調(diào)試..............................................209
第 12 章 命令參考.......................................................211
uVision 2 命令行參數(shù) ...........................................211
A51/A251 宏匯編參數(shù) ............................................212
C51/C251 編譯器 ................................................213
L51/BL51 連接/重定位器..........................................215
L251 連接/重定位器 .............................................216
LIB51/L251 庫管理命令...........................................218
OC51 分塊目標文件轉換器 ........................................219
OH51 目標文件到HEX格式的轉換器 .................................219
OH251目標文件到HEX格式的轉換器 .................................219
索引....................................................................222
第1章 簡介
感謝您允許Keil Software為您提供8051系列單片機的軟件開發(fā)工具利用本工具您可
以開發(fā)所有8051系列單片機的嵌入式應用
.ü..?..?..?..?..?..
注意
盡管我們在本手冊中稱它為8051開發(fā)工具其實它支持所有的由8051家族派生而來的
類型
.ü..?..?..?..?..?..
Keil Software 的8051開發(fā)工具提供以下程序你可以用它們來編譯你的C源碼匯編
你的匯編源程序連接和重定位你的目標文件和庫文件創(chuàng)建HEX文件調(diào)試你的目標程
序從21頁開始的第三章開發(fā)工具一章中將對每一個程序進行詳細描述
.. Windows應用程序uVision2是一個集成開發(fā)環(huán)境它把項目管理源代碼編輯
程序調(diào)試等集成到一個功能強大的環(huán)境中
.. C51美國標準優(yōu)化C交叉編譯器從你的C源代碼產(chǎn)生可重定位的目標文件
.. A51宏匯編器從你的8051匯編源代碼產(chǎn)生可重定位的目標文件
.. BL51連接/重定位器組合你的由C51和A51產(chǎn)生的可重定位的目標文件生成絕
對目標文件
.. LIB51庫管理器組合你的目標文件生成可以被連接器使用的庫文件
.. OH51目標文件到HEX格式的轉換器從絕對目標文件創(chuàng)建Intel HEX 格式的文件
.. RTX-51實時操作系統(tǒng)簡化了復雜和對時間要求敏感的軟件項目
在16頁的產(chǎn)品一覽中將對由這些工具組成的開發(fā)套件進行描述它們是為專業(yè)開
發(fā)人員而設計的但所有層次的編程人員都可以用它們來獲得8051微控制器的絕大部分應
用
手冊主題
本手冊討論的主題有
.. 怎樣為你的應用選擇最好的工具包參照16頁的產(chǎn)品一覽
.. 怎樣在你的系統(tǒng)上安裝本軟件參照16頁安裝
.. 本開發(fā)工具的特征頁
.. 怎樣用uVision2 IDE創(chuàng)建一個完整的應用57頁
.. 怎樣調(diào)試程序怎樣用uVision2調(diào)試器模擬你的目標硬件93頁
.. 在C51編譯器中該如何訪問片上外圍設備和8051派生系列產(chǎn)品的特殊功能114
頁
.. 怎樣運行示例程序149頁
.ü..?..?..?..?..?..
注意
為了立即開始請參照第二章安裝軟件然后參照第七章運行示例程序
.ü..?..?..?..?..?..
本文檔的最后改動
本軟件和手冊最后一刻的變化和修改在RELEASE.TXT中位于\KEIL\UV2和
\KEIL\C51\HLP文件夾中
花點時間讀一下這些文件看看這些變化和修改是否對安裝產(chǎn)生影響
測試版工具包和產(chǎn)品工具包
Keil Software把軟件分成兩種類型測試版和正式版
測試版包括8051工具的測試版本和本用戶手冊你可以用它們產(chǎn)生目標代碼小于2K
字節(jié)的應用
此套件主要是讓你測試我們產(chǎn)品的效力并產(chǎn)生小的應用
正式版在16頁討論包括沒有限制的8051工具和全套手冊(含本手冊)正式版套
件包含1年的免費技術支持和產(chǎn)品升級升級通過www.keil.com提供
用戶類型
本手冊針對三種用戶測試用戶新用戶有經(jīng)驗的用戶
測試用戶是那些還沒有購買本軟件但已經(jīng)要求使用測試開發(fā)包以進一步了解本工具和
本工具的性能的用戶測試開發(fā)包包括有2K字節(jié)目標代碼限制的工具和幾個為8051MCU
系列產(chǎn)品而創(chuàng)建的應用即使你是一個測試用戶你最好也花點時間閱讀本手冊它解釋了
怎樣安裝本軟件為你提供本開發(fā)工具的初步信息并介紹了示例程序
新用戶是那些第一次購買本開發(fā)工具的用戶你所購買的軟件為你提供最新的開發(fā)工
具技術手冊和示例程序如果你對8051或本工具比較生疏花點時間學習本手冊中描述
的示例程序它們?yōu)樾掠脩艉蜎]有經(jīng)驗的用戶快速起步提供了一個指南和幫助
有經(jīng)驗的用戶是指那些以前已經(jīng)用過Keil 8051開發(fā)工具現(xiàn)在升級到最新版本的用戶
升級軟件產(chǎn)品包含最新的開發(fā)工具和示例程序
請求援助
Keil Software 的全體員工專注于為您提供最好的開發(fā)工具和文檔資料如果你對本手
冊有建議的話請跟我們聯(lián)系如果你認為你發(fā)現(xiàn)了一個軟件上問題請在聯(lián)系技術支持中心
前按下面的步驟做
1閱讀與你試圖完成的工作或任務相關的章節(jié)
2確定你所用的是最新的版本到www.keil.com核對升級內(nèi)容以確定你使用的是最新
版本
3分析所發(fā)現(xiàn)的問題確定它是匯編器的問題還是編譯器連接器庫管理器或其
他的開發(fā)工具的問題
4進一步通過減少你的代碼到幾行使問題更明確
如果你在經(jīng)過上述步驟后問題仍然存在請你向我們技術支持中心報告請包含你的產(chǎn)
品序列號和版本號我們傾向于你通過E-mail的方式發(fā)送如果你通過FAX聯(lián)系請確定
包含我們可以與你聯(lián)系上的你的名字和電話號碼(電話和傳真)
請盡可能詳細地描述你所遇到的問題你描述的越詳細我們就能越快地找到解決辦法
如果你能用僅僅一頁的代碼描述你遇到的問題請把它E-mail給我們?nèi)绻赡苷埓_定
你的問題能夠在開發(fā)工具上重復出現(xiàn)請避免發(fā)送整個應用代碼或很長的代碼給我們以免
延誤我們對你的答復
.ü..?..?..?..?..?..
注意
你總是可以從www.keil.com/support獲得技術支持,產(chǎn)品升級,應用筆記和示例程序
.ü..?..?..?..?..?..
軟件開發(fā)流程
當你使用Keil Software工具時你的項目開發(fā)流程和其它軟件開發(fā)項目的流程極其相
似
1創(chuàng)建一個項目從器件庫中選擇目標器件配置工具設置
2用C語言或匯編語言創(chuàng)建源程序
3用項目管理器生成你的應用
4修改源程序中的錯誤
5測試連接應用
一個完整的8051工具集的框圖可以最好地表述此開發(fā)流程每一個組件在下面詳細描
述
.ü..?..?..?..?..?..
uVision2 IDE
uVision2 集成開發(fā)環(huán)境集成了一個項目管理器一個功能豐富有錯誤提示的編輯器
以及設置選項生成工具在線幫助利用uVision2創(chuàng)建你的源代碼并把它們組織到一個
能確定你的目標應用的項目中去uVision2自動編譯匯編連接你的嵌入式應用并為你
的開發(fā)提供一個單一的焦點
C51編譯器和A51匯編器
源代碼由uVision2 IDE創(chuàng)建并被C51編譯或A51匯編編譯器和匯編器從源代碼生
成可重定位的目標文件
Keil C51編譯器完全遵照ANSI C語言標準支持C語言的所有標準特性另外直接
支持8051結構的幾個特性被添加到里面
Keil A51宏匯編器支持8051及其派生系列的全部指令集
LIB51 庫管理器
LIB51庫管理器允許你從由編譯器或匯編器生成的目標文件創(chuàng)建目標庫庫是一種被特
別地組織過并在以后可以被連接重用的對象模塊當連接器處理一個庫時僅僅那些被使用
的目標模塊才被真正使用
BL51 連接器/定位器
BL51 連接器/定位器利用從庫中提取的目標模塊和由編譯器或匯編器生成的目標模塊
創(chuàng)建一個絕對地址的目標模塊一個絕對地址目標模塊或文件包含不可重定位的代碼和數(shù)
據(jù)所有的代碼和數(shù)據(jù)被安置在固定的存儲器單元中此絕對地址目標文件可以用來
.. 寫入EPROM或其它存儲器件
.. 由uVision2調(diào)試器使用來模擬和調(diào)試
.. 由仿真器用來測試程序
uVision2 調(diào)試器
uVision2源代碼級調(diào)試器是一個理想地快速可靠的程序調(diào)試器此調(diào)試器包含一個高
速模擬器能夠讓你模擬整個8051系統(tǒng)包括片上外圍器件和外部硬件當你從器件庫中
選擇器件時這個器件的特性將自動配置
uVision2調(diào)試器為你在實際目標板上測試你的程序提供了幾種方法
.. 安裝MON51目標監(jiān)控器到你的目標系統(tǒng)并且通過Monitor-51接口下載你的程序
.. 利用高級的GDIAGDI接口把uVision2調(diào)試器綁定到你的目標系統(tǒng)
Monitor-51
uVision2調(diào)試器支持用Monitor-51進行目標板調(diào)試此監(jiān)控程序駐留在你的目標板的
存儲器里它利用串口和uVision2調(diào)試器進行通信利用Monitor-51uVision2調(diào)試器 可
以對你的目標硬件實行源代碼級的調(diào)試
RTX51實時操作系統(tǒng)
RTX51實時操作系統(tǒng)是一個針對8051系列的多任務核RTX51實時內(nèi)核從本質(zhì)上簡化
了對實時事件反應速度要求高的復雜應用系統(tǒng)的設計編程和調(diào)試RTX51實時內(nèi)核是完
全集成到C51編譯器中的從而方便使用任務描述表和操作系統(tǒng)的連接由BL51連接器/
定位器自動控制
產(chǎn)品一覽
Keil Software提供第一流的8051系列開發(fā)工具我們把我們的開發(fā)工具捆綁到不同的
開發(fā)包或工具套件17頁的對照表說明了整個Keil Software 8051開發(fā)工具每一個套件及
其內(nèi)容描述如下
PK51 專業(yè)開發(fā)套件
PK51專業(yè)開發(fā)套件包括了所有專業(yè)開發(fā)人員創(chuàng)建和調(diào)試復雜8051嵌入式應用系統(tǒng)所
要用到的一切工具PK51專業(yè)開發(fā)套件可以針對所有的8051及其派生系列進行配置使用
DK51開發(fā)套件
DK51開發(fā)套件是PK51專業(yè)開發(fā)套件的精簡版本它不包括小型RTX51實時操作系統(tǒng)
此套件可以針對所有的8051及其派生系列進行配置使用
CA51編譯套件
CA51編譯套件是那些需要C編譯器而不需要調(diào)試系統(tǒng)的開發(fā)人員的最好選擇CA51
開發(fā)包僅僅包含uVision2 IDEuVision2調(diào)試器不包括在內(nèi)此套件可以針對所有的8051
及其派生系列進行配置使用
A51匯編套件
A51匯編套件包括一個匯編器和你創(chuàng)建嵌入式應用所需要的所有功能此套件可以針對
所有的8051及其派生系列進行配置使用
RTX51 實時操作系統(tǒng)FR51
RTX51實時操作系統(tǒng)是一個8051系列MCU的實時內(nèi)核RTX51 FULL提供RTX51
TINY的所有功能和一些擴展功能并且包括CAN通信協(xié)議接口
開發(fā)套件和工具的對照表
利用此表選擇你所需要的開發(fā)套件.
.ü..?..?..?..?..?..
第2章 安裝
本章解釋如何設置操作環(huán)境以及如何在你的硬盤上安裝本軟件在開始安裝程序之前
請
.. 確認你的計算機系統(tǒng)符合最小的需求
.. 制作一份安裝盤的副本
系統(tǒng)需求
.. 為了取得比較好的運行效果最低的硬件和軟件配置必須滿足
.. 具有奔騰奔騰II或兼容的處理器的個人計算機
.. 操作系統(tǒng)為WIN95WIN98WINNT4.0或更高
.. RAM大于16MB
.. 20MB 的硬盤空余空間
安裝詳細說明
所有的Keil產(chǎn)品都帶有一個安裝程序安裝方便8051開發(fā)工具的安裝步驟如下
.. 插入Keil開發(fā)工具光盤
.. 從CD瀏覽界面選擇安裝軟件
.. 跟隨提示進行安裝操作
.ü..?..?..?..?..?..
注意
當你插入CD時你的計算機可能會自動瀏覽CD如果沒有運行
\KEIL\SETUP\SETUP.EXE安裝軟件
.ü..?..?..?..?..?..
文件夾組織結構
安裝程序復制開發(fā)工具到基本目錄的各個子目錄中默認的基本目錄是C:\KEIL下表
列出的文件夾結構是包括所有8051開發(fā)工具的全部安裝信息你的安裝信息由你購買的開
發(fā)套件決定
文件夾 描述
C:\KEIL\C51\ASM 匯編SFR定義文件和模板源程序文件
C:\KEIL\C51\BIN 8051工具的執(zhí)行文件
C:\KEIL\C51\EXAMPLES 示例應用
C:\KEIL\C51\RTX51 完全實時操作系統(tǒng)文件
C:\KEIL\C51\RTX_TINY 小型實時操作系統(tǒng)文件
C:\KEIL\C51\INC C編譯器包含文件
C:\KEIL\C51\LIB C編譯器庫文件啟動代碼和常規(guī)I/O資源
C:\KEIL\C51\MONITOR 目標監(jiān)控文件和用戶硬件的監(jiān)控配置
C:\KEIL\UV2 普通uVision2文件
在本使用指南中我們假定用戶采用默認的文件夾結構如果你安裝你的軟件到一個不
同的文件夾你必須調(diào)整路徑名以適應你的安裝
第3章 開發(fā)工具
Keil 8051開發(fā)工具提供數(shù)個十分有用的特性可以幫助你快速地成功開發(fā)嵌入式應用
這些工具使用簡單并保證你達到你的設計目的
uVision2 集成開發(fā)環(huán)境
uVision2 IDE 是一個基于Window的開發(fā)平臺包含一個高效的編輯器一個項目管理
器和一個MAKE工具
uVision2支持所有的KEIL 8051工具包括C編譯器宏匯編器連接/定位器目標
代碼到HEX的轉換器uVision2通過以下特性加速你的嵌入式系統(tǒng)的開發(fā)過程
.. 全功能的源代碼編輯器
.. 器件庫用來配置開發(fā)工具設置
.. 項目管理器用來創(chuàng)建和維護你的項目
.. 集成的MAKE工具可以匯編編譯和連接你的嵌入式應用
.. 所有開發(fā)工具的設置都是對話框形式的
.. 真正的源代碼級的對CPU和外圍器件的調(diào)試器
.. 高級GDIAGDI接口用來在目標硬件上進行軟件調(diào)試以及和Monitor-51進行
通信
.. 與開發(fā)工具手冊和器件數(shù)據(jù)手冊和用戶指南有直接的鏈接
.ü..?..?..?..?..?..
注意
uVision2調(diào)試器的特性只有PK51和DK51套件具備
.ü..?..?..?..?..?..
關于開發(fā)環(huán)境
uVision2 界面提供一個菜單一個工具條以便你快速選擇命令按鈕另外還有源代碼
的顯示窗口對話框和信息顯示uVision2允許同時打開瀏覽多個源文件
.ü..?..?..?..?..?..
菜單條工具條和快捷鍵
菜單條提供各種操作菜單如編輯操作項目維護開發(fā)工具選項設置調(diào)試程序
窗口選擇和處理在線幫助工具條按鈕允許你快速地執(zhí)行uVision2命令鍵盤快捷
鍵你自己可以配置允許你執(zhí)行uVision2命令下面的表格列出了uVision2菜單項命令
工具條圖標默認的快捷鍵以及他們的描述
文件菜單和命令File
菜單 工具條 快捷鍵 描述
New Ctrl+N 創(chuàng)建新文件
Open Ctrl+O 打開已經(jīng)存在的文件
Close 關閉當前文件
Save Ctrl+S 保存當前文件
Save all 保存所有文件
Save as 另外取名保存
Device Database 維護器件庫
Print Setup 設置打印機
Print Ctrl+P 打印當前文件
Print Preview 打印預覽
1-9 打開最近用過的文件
Exit 退出uVision2提示是否保存文件
編輯菜單和編輯器命令(Edit)
菜單 工具條 快捷鍵 描述
Home 移動光標到本行的開始
End 移動光標到本行的末尾
Ctrl+Home 移動光標到文件的開始
Ctrl+End 移動光標到文件的結束
Ctrl+<- 移動光標到詞的左邊
Ctrl+-> 移動光標到詞的右邊
Ctrl+A 選擇當前文件的所有文本內(nèi)容
Undo Ctrl+Z 取消上次操作
Redo Ctrl+Shift+Z 重復上次操作
Cut Ctrl+X 剪切所選文本
Ctrl+Y 剪切當前行的所有文本
Copy Ctrl+C 復制所選文本
Paste Ctrl+V 粘貼
Indent 將所選文本右移一個制表鍵的距離
Selected Text
Unindent 將所選文本左移一個制表鍵的距離
Selected Text
Toggle Bookmark Ctrl+F2 設置/取消當前行的標簽
Goto Next Bookmark F2 移動光標到下一個標簽處
Goto Previous Bookmark Shift+F2 移動光標到上一個標簽處
Clear All Bookmarks 清除當前文件的所有標簽
Find Ctrl+F 在當前文件中查找文本
F3 向前重復查找
Shift+F3 向后重復查找
Ctrl+F3 查找光標處的單詞
Ctrl+] 尋找匹配的大括號圓括號方括號
用此命令將光標放到大括號圓括
號或方括號的前面
Replace Ctrl+H 替換特定的字符
Find in Files 在多個文件中查找
/****************************譯者注-開始*************************************/
Ctrl+]命令在我的uVision2 2.20a中好象沒有作用另外我的uVision2的Edit菜單中
還有一個Goto Matching brace 命令在最后功能是選擇匹配的一對大括號圓括號或方括
號中的內(nèi)容但是在操作之前你必須把光標置于其中一個括號的旁邊前或后都可以
但是要注意必須緊靠
/****************************譯者注-結束*************************************/
選擇文本命令
在uVision2中你可以通過按住Shift鍵和相應的光標操作鍵來選擇文本如Ctrl+->
是移動光標到下一個詞那么Ctrl+Shift+-> 就是選擇當前光標位置到下一個詞的開始位
置間的文本
當然你也可以用鼠標來選擇文本操作如下
要選擇 鼠標操作
任意數(shù)量的文本 在你要選擇的文本上拖動鼠標
一個詞 雙擊此詞
一行文本 移動鼠標到此行的最左邊直到鼠標變成右指向的箭頭然
后單擊
多行文本 移動鼠標到此行的最左邊直到鼠標變成右指向的箭頭然
后相應拖動
一個距形框中的文本 按住Alt鍵然后相應拖動鼠標
視圖菜單View
菜單 工具條 快捷鍵 描述
Status Bar 顯示/隱藏狀態(tài)條
File Toolbar 顯示/隱藏文件菜單條
Build Toolbar 顯示/隱藏編譯菜單條
Debug Toolbar 顯示/隱藏調(diào)試菜單條
Project Window 顯示/隱藏項目窗口
Output Window 顯示/隱藏輸出窗口
Source Browser 打開資源瀏覽器
Disassembly Window 顯示/隱藏反匯編窗口
Watch & Call 顯示/隱藏觀察和堆棧窗口
Stack Window
Memory Window 顯示/隱藏存儲器窗口
Code Coverage Window 顯示/隱藏代碼報告窗口
Performance
Analyzer Window 顯示/隱藏性能分析窗口
Symbol Window 顯示/隱藏字符變量窗口
Serial Window #1 顯示/隱藏串口1的觀察窗口
Serial Window #2 顯示/隱藏串口2的觀察窗口
Toolbox 顯示/隱藏自定義工具條
Periodic Window Update 程序運行時刷新調(diào)試窗口
Workbook Mode 顯示/隱藏窗口框架模式
Options 設置顏色字體快捷鍵和編輯器的選項
項目菜單和項目命令Project
菜單 工具條 快捷鍵 描述
New Project 創(chuàng)建新項目
Import Vision1
Project 轉化uVision1的項目
Open Project 打開一個已經(jīng)存在的項目
Close Project 關閉當前的項目
Target Environment 定義工具包含文件和庫的路徑
Targets, Groups,Files 維護一個項目的對象文件組和文件
Select Device 選擇對象的CPU
for Target
Remove 從項目中移走一個組或文件.
Options Alt+F7 設置對象組或文件的工具選項
File Extensions 選擇不同文件類型的擴展名
Build Target F7 編譯修改過的文件并生成應用
Rebuild Target 重新編譯所有的文件并生成應用
Translate Ctrl+F7 編譯當前文件
Stop Build 停止生成應用的過程
1-9 打開最近打開過的項目
調(diào)試菜單和調(diào)試命令Debug
菜單 工具條 快捷鍵 描述
Start/Stop Ctrl+F5 開始/停止調(diào)試模式
Debugging
Go F5 運行程序直到遇到一個中斷
Step F11 單步執(zhí)行程序遇到子程序則進入
Step over F10 單步執(zhí)行程序跳過子程序
Step out of Ctrl+F11 執(zhí)行到當前函數(shù)的結束
Current function
Stop Running ESC 停止程序運行
Breakpoints 打開斷點對話框
Insert/Remove 設置/取消當前行的斷點
Breakpoint
Enable/Disable 使能/禁止當前行的斷點
Breakpoint
Disable All 禁止所有的斷點
Breakpoints
Kill All 取消所有的斷點
Breakpoints
Show Next 顯示下一條指令
Statement
Enable/Disable 使能/禁止程序運行軌跡的標識
Trace Recording
View Trace 顯示程序運行過的指令
Records
Memory Map 打開存儲器空間配置對話框
Performance 打開設置性能分析的窗口
Analyzer
Inline Assembly 對某一個行重新匯編可以修改匯編代碼
Function Editor 編輯調(diào)試函數(shù)和調(diào)試配置文件
外圍器件菜單Peripherals
菜單 工具條 快捷鍵 描述
Reset CPU 復位CPU
Interrupt, 打開片上外圍器件的設置對話框
I/O-Ports, 對話框的種類及內(nèi)容依賴于你選擇的CPU
Serial,
Timer,
A/D Converter,
D/A Converter,
I2C Controller,
CAN Controller,
Watchdog
工具菜單Tool
利用工具菜單你可以配置運行Gimpel PC-LintSiemens Easy-Case和用戶程序通
過Customize Tools Menu菜單你可以添加你想要添加的程序更詳細的信息請參考72
頁的Using the Tools Menu
菜單 工具條 快捷鍵 描述
Setup PC-Lint 配置Gimpel Software的PC-Lint程序
Lint 用PC-Lint處理當前編輯的文件
Lint all C Source Files 用PC-Lint處理你項目中所有的C源代碼文件
Setup Easy-Case 配置Siemens的Easy-Case程序
Start/Stop Easy-Case 運行/停止Siemens的Easy-Case程序
Show File (Line) 用Easy-Case處理當前編輯的文件
Customize Tools Menu 添加用戶程序到工具菜單中
軟件版本控制系統(tǒng)菜單SVCS
用此菜單來配置和添加軟件版本控制系統(tǒng)的命令更詳細的信息參見76頁的Using the
SVCS Menu
菜單 工具條 快捷鍵 描述
Configure 配置軟件版本控制系統(tǒng)的命令
Version Control
視窗菜單Window
菜單 工具條 快捷鍵 描述
Cascade 以互相重疊的形式排列文件窗口
Tile Horizontally 以不互相重疊的形式水平排列文件窗口
Tile Vertically 以不互相重疊的形式垂直排列文件窗口
Arrange Icons 排列主框架底部的圖標
Split 把當前的文件窗口分割為幾個
1-9 激活指定的窗口對象
幫助菜單Help
菜單 工具條 快捷鍵 描述
Help topics 打開在線幫助
About Vision 顯示版本信息和許可證信息
uVision2 有兩種操作模式
.. 創(chuàng)建模式讓你編譯應用中所有的文件以產(chǎn)生執(zhí)行程序此模式的特性在57頁
Creating Applications中描述
.. 調(diào)試模式提供一個非常強勁的調(diào)試器你可以用它來調(diào)試你的程序此模式的特
性在93頁Testing Programs中描述
在兩種模式下你都可以用源文件編輯器來編輯你的源代碼
C51優(yōu)化的C語言交叉編譯器
Keil C51交叉編譯器是一個基于ANSI C標準的針對8051系列MCU的C編譯器生
成的可執(zhí)行代碼快速緊湊在運行效率和速度上可以和匯編程序得到的代碼相媲美
.. 和匯編語言相比用C語言這樣的高級語言有很多優(yōu)勢比如
.. 對處理器的指令集不必了解8051 CPU的基本結構可以了解但不是必須的
.. 寄存器的分配以及各種變量和數(shù)據(jù)的尋址都由編譯器完成
.. 程序擁有了正式的結構由C語言帶來的并且能被分成多個單獨的子函數(shù)這
使整個應用系統(tǒng)的結構變得清晰同時讓源代碼變得可重復使用
.. 選擇特定的操作符來操作變量的能力提高了源代碼的可讀性
.. 可以運用和人的思維很接近的詞匯和算法表達式
.. 編寫程序和調(diào)試程序的時間得到很大程度的縮短
.. C運行連接庫包含一些標準的子程序如格式化輸出數(shù)字轉換浮點運算
.. 由于程序的模塊結構技術使得現(xiàn)有的程序段可以很容易的包含到新的程序中去
.. ANSI 標準的C語言是一種豐常方便的獲得廣泛應用的在絕大部分系統(tǒng)中都能
夠很容易得到的語言
因此如果需要現(xiàn)有的程序可以很快地移植到其他的處理器上節(jié)省投資
C51 語言的擴展
雖然C51是一個兼容ANSI的編譯器但為了支持8051系列MCU還是加入了一些擴
展的內(nèi)容C51編譯器的擴展內(nèi)容包括
.. 數(shù)據(jù)類型
.. 存儲器類型
.. 指針
.. 重入函數(shù)
.. 中斷服務程序
.. 實時操作系統(tǒng)
.. 和PL/M及A51源程序的接口
以下各節(jié)簡單地描述了上述的擴展特性
數(shù)據(jù)類型
本C51編譯器支持下表列出的各種規(guī)格的數(shù)據(jù)類型.除了這些數(shù)據(jù)類型以外變量可
以組合成結構聯(lián)合及數(shù)組除非特別說明這些變量都可以用指針存取
.ü..?..?..?..?..?..
注* bit, sbit sfr,和sfr16為8051硬件和C51及C251編譯器所特有它們不是ANSI
C 的一部分也不能用指針對它們進行存取
這些sbit sfr和sfr16類型的數(shù)據(jù)使你能夠操作8051MCU所提供的特殊功能寄存器例
如下面的表達式
sfr P0 = 0x80; /* Define 8051 P0 SFR */
聲明了一個變量P0并且把它和位于0x808051的端口0處的特殊功能寄存器聯(lián)系
在一起
當結果的數(shù)據(jù)類型和源數(shù)據(jù)類型不同時C51編譯器在數(shù)據(jù)類型間自動進行轉換例如
一個bit變量賦值給一個interger變量時將會被轉換為integer當然你可以用類型表示進
行強制轉換數(shù)據(jù)轉換時要注意有符號變量的轉換其符號是自動擴展的
存儲器類型
本C51編譯器支持8051及其派生類型的結構能夠訪問8051的所有存儲器空間具
有下表列出的存儲器類型的變量都可以被分配到某個特定的存儲器空間
存儲器類型 描述
code 程序空間64 Kbytes通過 MOVC @A+DPTR 訪問
data 直接訪問的內(nèi)部數(shù)據(jù)存儲器訪問速度最快128 bytes
idata 間接訪問的內(nèi)部數(shù)據(jù)存儲器可以訪問所有的內(nèi)部存儲器空間256
bytes
bdata 可位尋址的內(nèi)部數(shù)據(jù)存儲器可以字節(jié)方式也可以位方式訪問16 bytes
xdata 外部數(shù)據(jù)存儲器64 Kbytes通過MOVX @DPTR訪問
pdata 分頁的外部數(shù)據(jù)存儲器256 bytes通過 MOVX @Rn 訪問
訪問內(nèi)部數(shù)據(jù)存儲器將比訪問外部數(shù)據(jù)存儲器快的多由于這個原因你應該把頻繁使
用的變量放置在內(nèi)部數(shù)據(jù)存儲器中把很少使用的變量放在外部數(shù)據(jù)存儲器中這通過使用
SMALL模式將很容易就做到通過定義變量時包括存儲器類型你可以定義此變量存儲在
你想要的存儲器中
在變量的聲明中你可以包括存儲器類型和signed或unsigned屬性
char data var1;
char code text[] = "ENTER PARAMETER";
unsigned long xdata array[100];
float idata x,y,z;
unsigned int pdata dimension;
unsigned char xdata vector[10][4][4];
char bdata flags;
如果在變量的定義中沒有包括存儲器類型將自動選用默認或暗示的存儲器類型暗
示的存儲器類型適用于所有的全局變量和靜態(tài)變量還有不能分配在寄存器中的函數(shù)參數(shù)和
局部變量默認的存儲器類型由編譯器的參數(shù)SMALLCOMPACT及LARGE決定這些
參數(shù)定義了編譯時使用的存儲模式
存儲模式
存儲模式?jīng)Q定了默認的存儲器類型此存儲器類型將應用于函數(shù)參數(shù)局部變量和定義
時未包含存儲器類型的變量你可以在命令行用SMALLCOMPACT和LARGE參數(shù)定義
存儲模式定義變量時使用存儲器類型顯式定義將屏蔽默認存儲器類型
小(SMALL)模式
所有變量都默認在8051的內(nèi)部數(shù)據(jù)存儲器中這和用data顯式定義變量起到相同的作
用在此模式下變量訪問是非?焖俚娜欢袛(shù)據(jù)對象包括堆棧都必須放在內(nèi)部
RAM中堆棧空間面臨溢出因為堆棧所占用多少空間依賴于各個子程序的調(diào)用嵌套深度
在典型應用中如果具有代碼分段功能的BL51連接/定位器被配置成覆蓋內(nèi)部數(shù)據(jù)存儲器中
的變量時此SMALL模式是最好的選擇
緊湊COMPACT模式
此模式中所有變量都默認在8051的外部數(shù)據(jù)存儲器的一頁中地址的高字節(jié)往往通
過Port 2輸出其值必須由你在啟動代碼中設置編譯器不會為你設置這和用pdata顯式
定義變量起到相同的作用此模式最多只能提供256字節(jié)的變量這種限制來自于間接尋址
所使用的R0,R1MOVX @R0/R1這種模式不如SMALL模式高效所以變量的訪問不夠
快不過它比LARGE模式要快
大LARGE模式
在大模式下所有的變量都默認在外部存儲器中xdata這和用xdata顯式定義變量
起到相同的作用數(shù)據(jù)指針DPTR用來尋址通過DPTR進行存儲器的訪問的效率很低
特別是在對一個大于一個字節(jié)的變量進行操作時尤為明顯此數(shù)據(jù)訪問類型比SMALL和
COMPACT模式需要更多的代碼
.ü..?..?..?..?..?..
注意
你或許應該一直使用小模式它產(chǎn)生最快最緊湊效率最高的代碼
你最好顯式定義你的變量的存儲器類型只有當你的應用不能在SMALL模式下操作
時你才需要往上增加你的存儲模式
.ü..?..?..?..?..?..
指針
C51編譯器支持用星號*進行指針聲明你可以用指針完成在標準C語言中有的所
有操作
另外由于8051及其派生系列所具有的獨特結構C51編譯器支持兩種不同類型的指
針存儲器指針和通用指針
通用指針
通用或未定型的指針的聲明和標準C語言中一樣如
char *s; /* string ptr */
int *numptr; /* int ptr */
long *state; /* long ptr */
通用指針總是需要三個字節(jié)來存儲第一個字節(jié)是用來表示存儲器類型第二個字節(jié)是
指針的高字節(jié)第三字節(jié)是指針的低字節(jié)
通用指針可以用來訪問所有類型的變量而不管變量存儲在哪個存儲空間中因而許多
庫函數(shù)都使用通用指針通過使用通用指針一個函數(shù)可以訪問數(shù)據(jù)而不用考慮它存儲在
什么存儲器中
通用指針很方便但是也很慢在所指向目標的存儲空間不明確的情況下它們用的最
多
存儲器指針
存儲器指針或類型確定的指針在定義時包括一個存儲器類型說明并且總是指向此
說明的特定存儲器空間例如
char data *str; /* ptr to string in data */
int xdata *numtab; /* ptr to int(s) in xdata */
long code *powtab; /* ptr to long(s) in code */
正是由于存儲器類型在編譯時已經(jīng)確定通用指針中用來表示存儲器類型的字節(jié)就不再
需要了
指向idatadatabdata和pdata的存儲器指針用一個字節(jié)保存指向code和xdata的存
儲器指針用兩個字節(jié)保存使用存儲器指針比通用指針效率要高速度要快當然存儲器
指針的使用不是很方便在所指向目標的存儲空間明確并不會變化的情況下它們用的最多
存儲器指針和通用指針的比較
使用存儲器指針可以顯著的提高8051 C程序的運行速度
下面的示例程序說明了使用不同的指針在代碼長度占用數(shù)據(jù)空間和運行時間上的不
同
Description Idata Pointer Xdata Pointer Generic Pointer
C源程序 idata *ip; char xdata *xp; char *p;
char val; har val; char val;
val = *ip; val = *xp; val = *xp;
編譯后的
代碼 MOV R0,ip MOV DPL,xp +1 MOV R1,p + 2
MOV val,@R0 MOV DPH,xp MOV R2,p + 1
MOV A,@DPTR MOV R3,p
MOV val,A CALL CLDPTR
指針大小 1 byte 2 byte 3 byte
代碼長度 4 bytes 9 bytes 11 bytes + library call
執(zhí)行時間 4 cycles 7 cycles 13 cycles
重入函數(shù)
多個進程可以同時使用一個重入函數(shù)當一個重入函數(shù)被調(diào)用運行時另外的一個進程
可能中斷此運行過程然后再次調(diào)用此重入函數(shù)通常情況下C51函數(shù)不能被遞歸調(diào)用
也不能應用導致遞歸調(diào)用的結構有此限制是由于函數(shù)參數(shù)和局部變量是存儲在固定的地址
單元中重入函數(shù)特性允許你聲明一個重入函數(shù)即可以被遞歸調(diào)用的函數(shù)如
int calc (char i, int b) reentrant
{
int x;
x = table [i];
return (x * b);
}
重入函數(shù)可以被遞歸調(diào)用也可以同時被兩個或更多的進程調(diào)用重入函數(shù)在實時應用
中及中斷服務程序代碼和非中斷程序代碼必須共用一個函數(shù)的場合中經(jīng)常用到
對每一個重入函數(shù)來說根據(jù)存儲模式重入堆棧被安置在內(nèi)部或外部單元中
.ü..?..?..?..?..?..
注意
在一個基本函數(shù)的基礎上添加reentrant說明從而使它具有重入特性
需要注意的是,你可以選擇哪些必須的函數(shù)為重入函數(shù)而不需將全部程序聲明為重入
函數(shù)
把全部程序聲明為重入函數(shù)將增加目標代碼的長度并減慢運行速度
.ü..?..?..?..?..?..
中斷服務程序
C51編譯器允許你用C語言創(chuàng)建中斷服務程序你僅僅需要關心中斷號和寄存器組的
選擇編譯器自動產(chǎn)生中斷向量和程序的入棧及出棧代碼在函數(shù)聲明時包括interrupt
將把所聲明的函數(shù)定義為一個中斷服務程序另外你可以用using定義此中斷服務程序所
使用的寄存器組
unsigned int interruptcnt;
unsigned char second;
void timer0 (void) interrupt 1 using 2
{
if (++interruptcnt == 4000)
{ /* count to 4000 */
second++; /* second counter */
interruptcnt = 0; /* clear int counter */
}
}
參數(shù)傳遞
C51編譯器能在CPU寄存器中傳遞最多三個參數(shù)由于不用從存儲器中讀出和寫入?yún)?BR>數(shù)從而顯著提高了系統(tǒng)性能參數(shù)傳遞由REGPARMS和NOREGPARMS編譯參數(shù)所控制
下表列出了不同的參數(shù)和數(shù)據(jù)類型所占用的寄存器
參數(shù) char, int, long, generic
數(shù)目 1-byte pointer 2-byte pointer float pointer
1 R7 R6 & R7 R4 R7 R1 R3
2 R5 R4 & R5
3 R3 R2 & R3
如果沒有CPU寄存器供參數(shù)傳遞所用或太多的參數(shù)需要傳遞時地址固定的存儲器
將用來存儲這些額外的參數(shù)
函數(shù)返回值
函數(shù)返回值總是通過CPU寄存器進行下表列出了返回各種數(shù)據(jù)時所用的CPU寄存器
返回數(shù)據(jù)類型 寄存器 描述
bit Carry Flag
char,unsigned char,1-byte pointer R7
int, unsigned int, 2-byte pointer R6 & R7 MSB in R6, LSB in R7
long, unsigned long R4 R7 MSB in R4, LSB in R7
float R4 R7 32-Bit IEEE format
generic pointer R1 R3 Memory type in R3, MSB R2, LSB R1
寄存器優(yōu)化
根據(jù)程序前后的聯(lián)系C51編譯器分配最多7個寄存器來存儲寄存器變量C51編譯器
能分析每個程序模塊中對寄存器的修改連接程序產(chǎn)生一個全局的項目級的寄存器文件
此文件包含被外部程序改變的所有寄存器的信息因而C51編譯器知道整個應用中每個函
數(shù)所使用的寄存器并能為每個C函數(shù)優(yōu)化分配CPU寄存器
對實時操作系統(tǒng)的支持
C51編譯器很好地集成了RTX-51 Full和RTX-51 Tiny 多任務實時操作系統(tǒng)任務描述
表在連接過程中控制和產(chǎn)生關于RTX實時操作系統(tǒng)的詳細信息請參考169頁開始的
"RTX-51 Real-Time Operating System"一章
和匯編語言的接口
你可以很容易在C程序中調(diào)用匯編程序反之依然函數(shù)參數(shù)通過CPU寄存器傳遞
或使用NOREGPARMS參數(shù)指示編譯器通過固定的存儲器傳遞從函數(shù)返回的值總是通過
CPU寄存器傳遞除了直接產(chǎn)生目標代碼外你還可以用SRC編譯參數(shù)指示編譯器產(chǎn)生匯
編源代碼文件供A51 匯編器使用例如下面的C語言源代碼
unsigned int asmfunc1 (unsigned int arg)
{
return (1 + arg);
}
用SRC指示C51編譯器編譯時產(chǎn)生以下匯編文件
?PR?_asmfunc1?ASM1 SEGMENT CODE
PUBLIC asmfunc1
RSEG ?PR?_asmfunc1?ASM1
USING 0
asmfunc1:
;---- Variable 'arg?00' assigned to Register 'R6/R7' ----
MOV A,R7 ; load LSB of the int
ADD A,#01H ; add 1
MOV R7,A ; put it back into R7
CLR A
ADDC A,R6 ; add carry & R6
MOV R6,A
?C0001:
RET ; return result in R6/R7
你可以用#pragma asm 和 #pragma endasm 預處理指示器來在你的C語言程序中插
入?yún)R編指令
和PL/M-51的接口
Intel的PL/M-51是一種流行的編程語言在很多方面和C語言類似你很容易就可以
將C程序和PL/M-51程序聯(lián)接起來
在你用alien聲明PL/M-51函數(shù)后你就可以從C語言中調(diào)用它們所有在PL/M-51模
塊中定義的全局變量都可以在C語言程序中使用例如
extern alien char plm_func (int, char);
PL/M-51編譯器和Keil Software工具都產(chǎn)生OMF51格式的目標文件連接程序使用
OMF51文件來處理外部字符變量而不管它們在什么地方聲明和使用
代碼優(yōu)化
C51是一個杰出的優(yōu)化編譯器它通過很多步驟以確保產(chǎn)生的代碼是最有效率的最小
和/或最快編譯器通過分析初步的代碼 產(chǎn)生最終的最有效率的代碼序列以此來保證你的
C語言程序占用最少空間的同時運行的快而有效
C51編譯器提供9個優(yōu)化級別每個高一級的優(yōu)化級別都包括比它低的所有優(yōu)化級別的
優(yōu)化內(nèi)容以下列出的是目前C51編譯器提供的所有優(yōu)化級別的內(nèi)容
.. 常量折疊在表達式及尋址過程中出現(xiàn)的常量被綜合為一個單個的常量
.. 跳轉優(yōu)化采用反轉跳轉或直接指向最終目的的跳轉從而提升了程序的效率
.. 啞碼消除永遠不可能執(zhí)行到的代碼將自動從程序中剔除
.. 寄存器變量只要可能局部變量和函數(shù)參數(shù)被放在CPU寄存器中不需要為這
些變量再分配存儲器空間
.. 通過寄存器傳遞參數(shù)最多三個參數(shù)通過寄存器傳遞
.. 消除全局公用的子表達式只要可能程序中多次出現(xiàn)的相同的子表達式或地址計
算表達式將只計算一次
.. 合并相同代碼利用跳轉指令相同的代碼塊被合并
.. 重復使用入口代碼需要多次使用的共同代碼被移到子程序的前面以縮減代碼長
度
.. 公共塊子程序需要重復使用的多條指令被提取組成子程序指令被重新安排以最
大化一個共用子程序的長度
/********************譯者注-開始****************************/
對于操作硬件有時序要求的應用,慎用第9級優(yōu)化.
因為它將可能調(diào)整你的指令順序.
/********************譯者注-結束****************************/
對8051的特殊優(yōu)化
.. 窺孔優(yōu)化當能夠縮小代碼空間或執(zhí)行時間時復雜的操作被簡單的操作代替
.. 訪問優(yōu)化常量和變量被計算后直接包含在操作中
.. 擴展訪問優(yōu)化用DPTR做存儲器指針來增加代碼的密度
.. 數(shù)據(jù)覆蓋一個函數(shù)的數(shù)據(jù)和位變量空間是可覆蓋的BL51連接器將采用覆蓋技
術來分配變量空間
.. Case/Switch優(yōu)化根據(jù)使用的數(shù)字序列和位置用跳轉表或一連串的跳轉指令
來優(yōu)化switch及case結構
代碼生成選項
.. 空間優(yōu)化公共C操作被子程序代替以程序執(zhí)行速度的降低來換取程序代碼空
間的縮減
.. 時間優(yōu)化公共C操作被嵌入到程序中以程序代碼空間的增加來換取程序執(zhí)行
速度的提高
.. 不用絕對寄存器不用絕對寄存器地址訪問程序代碼依賴于寄存器的分段
.. 不用寄存器傳遞參數(shù)用局部數(shù)據(jù)段來傳遞參數(shù)而不用寄存器這是為了兼容早
期版本的C51編譯器PL/M-51編譯器和ASM-51匯編器
調(diào)試
C51編譯器使用Intel目標格式OMF51來產(chǎn)生目標文件和全部的字符變量信息而
且編譯器還包含所有必要的信息如變量名函數(shù)名行數(shù)以及uVision2調(diào)試器或任
何兼容Intel格式的仿真器用來逐條徹底地調(diào)試和分析程序所需要的信息
另外使用OBJECTEXTEND參數(shù)可以指示編譯器產(chǎn)生附加的變量類型信息到目標文
件中這樣利用相應的仿真器就可以顯示變量和結構的數(shù)據(jù)信息你可以向你的仿真器供
應商詢問是否支持Intel OMF51格式和Keil軟件生成的目標模塊
庫函數(shù)
C51編譯器包含有ANSI標準的7個不同的的編譯庫從而滿足不同功能的需要
庫文件 描述
C51S.LIB 小模式庫不支持浮點運算
C51FPS.LIB 小模式庫支持浮點運算
C51C.LIB ` 緊湊模式庫不支持浮點運算
C51FPC.LIB 緊湊模式庫支持浮點運算
C51L.LIB 大模式庫不支持浮點運算
C51FPL.LIB 大模式庫支持浮點運算
80C751.LIB Philips 8xC751及其派生系列使用的庫
和硬件相聯(lián)系的輸入/輸出操作的庫函數(shù)模塊的源代碼文件位于\KEIL\C51\LIB文件夾
中你可以利用這些文件來修改你的庫以適應你目標板上的任何器件的輸入/輸出操作
內(nèi)連的庫函數(shù)
本編譯器的庫中包含一定數(shù)量的函數(shù)是內(nèi)連函數(shù)內(nèi)連函數(shù)不產(chǎn)生ACALL或LCALL
指令來執(zhí)行庫函數(shù)以下的內(nèi)連函數(shù)產(chǎn)生內(nèi)連的代碼因而它比一個調(diào)用函數(shù)要快而有效
內(nèi)連函數(shù) 描述
_crol_ 字節(jié)左移
_cror_ 字節(jié)右移
_irol_ 整數(shù)左移
_iror_ 整數(shù)右移
_lrol_ 長整數(shù)左移
_lror_ 長整數(shù)右移
_nop_ 空操作
_testbit_ 判斷并清除8051 JBC 指令
編譯器的調(diào)用
通常情況下當你創(chuàng)建你的項目時C51編譯器由uVision2 IDE調(diào)用當然你也可以
在DOS方式在命令行鍵入C51來運行你的C源程序文件名必須和編譯控制參數(shù)一起在
命令行輸入如
>C51 MODULE.C COMPACT PRINT (E:M.LST) DEBUG SYMBOLS
C51 COMPILER V6.00
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
編譯器控制參數(shù)可以在命令行輸入也可以在文件中的開頭用#pragma 定義要想知道
全部的編譯器控制參數(shù)請參考213頁 的"C51/C251 Compiler"
示例程序
下面的程序顯示了C51編譯器的一些功能特性本C51編譯器根據(jù)編譯控制參數(shù)產(chǎn)生
相應的OMF51格式的目標文件
編譯器報告所有必要的信息如變量名函數(shù)名行數(shù)以及uVision2調(diào)試器或其它
仿真器用來詳細調(diào)試和分析程序所需要的信息
編譯后C51編譯器產(chǎn)生一個列表文件文件中包含源代碼指示信息匯編清單和
字符表
下頁中展示了一個C51編譯器生成的示例列表文件
.ü..?..?..?..?..?..
.. C51編譯器產(chǎn)生行號編譯時的時間和日期
.. 編譯器的運行和產(chǎn)生的目標文件的信息被記錄在案
.. 列表文件在每個源代碼前面包含行號和{}的嵌套層數(shù)
.. 如果錯誤或可能錯誤的代碼存在一個錯誤或告警信息將顯示出來
.. 選擇在Vision2-Options for Target – Listing 中的Assembly Code 代碼指示選項將
在列表文件的匯編代碼處加入原代碼所在的行號
.. 存儲器一覽表提供了8051存儲器占用信息
.. 程序中的錯誤和告警總數(shù)包括在文件的結尾處.
A51宏匯編器
本A51是一個8051MCU系列的宏匯編器它把匯編語言翻譯成機器代碼本A51匯
編器允許你定義你程序中的每一個指令在需要極快的運行速度很小的代碼空間精確的
硬件控制時使用本匯編器的宏特性讓公共代碼只需要開發(fā)一次從而節(jié)約了開發(fā)和維護的
時間
源碼級調(diào)試
本A51匯編器在生成的目標文件中包含全部的行號字符及其類型的信息這讓你的
調(diào)試器能夠精確顯示程序變量行號是為了uVision2調(diào)試器或第三方仿真器源代碼級調(diào)試
你匯編過的程序時使用的
功能一覽
本A51匯編器翻譯匯編源程序為可重定位的目標代碼它產(chǎn)生一個列表文件其中可
以包含或不包含字符表及交叉參考信息
本A51匯編器支持兩種宏處理
標準的宏處理
這是一個比較容易使用的宏處理它允許你在你的8051匯編代碼中定義和使用宏它
標準的宏語法和其它許多匯編器中使用的相同
宏處理語言(MPL)
是一個和Intel ASM51宏處理兼容的字符串替換工具MPL有幾個預先定義好的宏處理
功能來執(zhí)行一些有用的操作如字符串處理或數(shù)字處理
本A51匯編器宏處理的另一個有用的特性是根據(jù)命令行參數(shù)或匯編符號進行條件匯編
代碼段的條件匯編能幫助你實現(xiàn)最緊湊的代碼
它也讓你可以從一個匯編源代碼文件產(chǎn)生不同的應用
列表文件
下面是匯編器產(chǎn)生的列表文件的例子
.ü..?..?..?..?..?..
.. A51匯編器產(chǎn)生一個列表文件包括行號匯編時的時間和日期關于匯編器運行和目
標文件產(chǎn)生的信息被記錄下來
.. 通常情況下程序從EXTERNPUBLIC and SEGMENT 指示器開始列表文件包
含了每個源代碼的行號及每行產(chǎn)生的代碼
.. 列表文件包含了錯誤和告警信息錯誤和告警的位置被明顯的標識出來
.. 選擇在Vision2-Options for Target – Listing 中的Cross Reference 選項將在列表文
件列出源程序中所用到的所有字符
.. 存儲器組的占用信息和程序中的錯誤和告警總數(shù)包括在文件的結尾處.
BL51具有代碼分段功能的連接/重定位器
本BL51是具有代碼分段功能的連接/重定位器它組合一個或多個目標模塊成一個8051
的執(zhí)行程序此連接器處理外部和全局數(shù)據(jù)并將可重定位的段分配到固定的地址上
本BL51連接器處理由Keil C51編譯器A51匯編器和Intel PL/M-51編譯器ASM-51
匯編器產(chǎn)生的目標模塊連接器自動選擇適當?shù)倪\行庫并連接那些用到的模塊
你也可以在命令行上輸入相應的目標模塊的名字的組合來運行本連接器BL51連接器
默認的控制參數(shù)是經(jīng)過仔細選擇的因而不需要定義附加的控制參數(shù)就可以適應大多數(shù)應
用當然你可以很容易為你的應用作特定的設置
數(shù)據(jù)地址管理
本連接器通過覆蓋那些不會同時使用的函數(shù)變量的技術來管理8051有限的內(nèi)部存儲器
資源這極大地降低了大多數(shù)應用對存儲器的需求本BL51連接器分析函數(shù)間的引用以決
定存儲的覆蓋策略你可以用OVERLAY指示器來人為控制函數(shù)間的引用這些引用被連
接器用來確定哪些存儲器單元是獨占的NOOVERLAY指示器讓BL51不進行覆蓋連接
這在使用間接調(diào)用的函數(shù)時或為了調(diào)試而禁止覆蓋時比較有用.
代碼分段
本BL51連接器支持創(chuàng)建程序空間大于64KB的應用既然8051不能直接操作大于64KB
的代碼地址空間就必須由外部硬件來交換代碼段完成此功能的硬件必須要在8051中運
行的程序的控制中這就是大家所知的段(塊)切換
本BL51連接器讓你管理一個公共的區(qū)域和32個最大64KB空間的塊從而達到總共
2MB的分段程序空間支持外部硬件塊切換的軟件包括的一個匯編程序可以由你來編輯
以適應你應用中的特定硬件平臺
本BL51連接器讓你定義哪個段裝載哪個特定的程序模塊通過仔細考慮把各個函數(shù)
分配到不同的段中來創(chuàng)建一個非常大而有效的應用
公共段
段切換程序中的公共段是一塊在任何時候在所有的段中都可以訪問的存儲器此公共
段在物理上就不能切換出局或變換地址空間
在公共段中的代碼可以復制到每個段中如果切換整個程序空間或駐留在一個獨立的
地址空間或器件中公共段不用切換
公共段包含那些必須在所有時候都要用到的程序段和常量它還可以包括經(jīng)常使用的代
碼默認情況下以下的代碼內(nèi)容將自動分配在公共段中
.. 復位和中斷向量
.. 代碼常量
.. C51 中斷服務進程
.. 分段開關跳轉表
.. 一些C51實時運行庫函數(shù)
執(zhí)行其它段中的程序
分段代碼空間是通過附加的由軟件控制的地址線控制的這些地址線可以是由8051的
I/O口或位于存儲器空間的鎖存器來模擬本BL51連接器為位于其他段中的函數(shù)生成一個
跳轉表當你用C語言調(diào)用一個位于不同的段中的函數(shù)時它要先切換段再跳到目標程
序運行完成后再回到調(diào)用的那個段中去并繼續(xù)往下執(zhí)行這種段切換處理需要附加的
50個CPU指令周期和占用2Bytes堆?臻g
如果你把相關的函數(shù)分配在相同的段中將顯著的提高系統(tǒng)的性能那些需要從多個段中
經(jīng)常調(diào)用的函數(shù)應該位于公共段中
映象文件
下面是BL51產(chǎn)生的一個例子文件:
.ü..?..?..?..?..?..
.. BL51產(chǎn)生一個包含連接時的時間和日期的映象文件(*.M51)
.. BL51 顯示調(diào)用的命令和存儲模式
.. 應用中包含的每個模塊和庫模塊被列出來
.. 存儲器映象文件包含8051實際存儲器的使用信息
.. 覆蓋映象圖顯示了程序結構和每個函數(shù)的數(shù)據(jù)和位段
.. 錯誤和告警總數(shù)包括在文件的結尾處這些映象圖指出在連接定位時可能面臨的問題
LIB51庫管理器
本庫管理器讓你建立和維護庫文件一個庫文件是格式化的目標模塊由編譯器或匯編
器產(chǎn)生的集合庫文件提供了一個方便的方法來組合和使用大量的連接程序可能用到的目
標模塊利用uVision2 項目管理器的Options for Target– Output – Create Library選項可
以建造一個庫你也可以從命令行運行LIB51程序命令行參數(shù)參照218頁"LIB51 / L251
Library Manager Commands
使用庫有一系列優(yōu)點安全高速和減少磁盤空間僅僅是使用庫的一小部分原因另外
庫提供了一個好的分發(fā)大量函數(shù)而不用分發(fā)大量函數(shù)源代碼的手段例如ANSI C的庫是
作為一套庫文件提供的
uVision2 項目C:\KEIL\C51\RTX_TINY\RTX_TINY.UV2允許你修改和創(chuàng)建RTX51小型
實時操作系統(tǒng)庫你很容易創(chuàng)建你自己的庫用來包括象串行I/OCAN和閃存操作這樣一
些你自己一次又一次要用到的流程一旦這些流程調(diào)試無誤后你就可以把它們轉換成庫
由于庫只包含目標模塊不用在每個項目中重新編譯這些模塊所以生成應用的時間將縮短
連接定位程序連接最終應用是用到的庫文件庫中的模塊僅僅在需要的時候才被提取加
到程序中沒有被你的應用調(diào)用的庫函數(shù)不會出現(xiàn)在你的最終結果中連接器把從庫中提取
出來的模塊和其他目標模塊做同樣的處理
OC51 分段目標文件轉換器
此OC51轉換器為一個分段目標模塊中的每一個代碼段創(chuàng)建絕對的目標模塊分段目標
模塊是你生成一個分段代碼切換應用時由BL51創(chuàng)建的字符變量的調(diào)試信息被拷貝到轉換
后的絕對目標模塊中以便給uVision2調(diào)試器和其他仿真器使用
你可以從命令行用OC51去為你, 分段目標模塊中的每一個代碼段創(chuàng)建絕對目標模塊
然后你還可以用OH51目標代碼到HEX文件的轉換器為每一個絕對目標模塊產(chǎn)
生相應的Intel HEX格式的文件
OH51 目標代碼到HEX文件的轉換器
此轉換器為絕對目標模塊創(chuàng)建Intel HEX格式的文件絕對目標模塊可以由BL51或
OC51產(chǎn)生 Intel HEX文件是ASCII文件它用十六進制的數(shù)表示你的應用系統(tǒng)的目標模
塊它們可以很容易的下載到編程器以便寫入EPROMS器件
第4章 創(chuàng)建應用
我們提供了一個測試版本測試版本中包含示例程序和我們工具的受限使用版本從而
使你很容易的評估熟悉我們的系列產(chǎn)品測試版本中的示例程序同樣包含在正式版本中
注意
Keil C51測試版本在功能和你能夠創(chuàng)建的應用的代碼長度上都有限制關于這點的詳細
信息請參考版本發(fā)行說明要創(chuàng)建大的應用系統(tǒng)你必須購買其中一個開發(fā)包關于開
發(fā)包套件的詳細描述參考P16的產(chǎn)品一覽
本章描述了uVision2的創(chuàng)建模式并向你演示如何使用它來創(chuàng)建一個簡單的程序(譯者
注原文為示例程序)以及生成和維護項目的一些選項包括文件輸出選項C51編譯器
的關于代碼優(yōu)化的配置uVision2項目管理器的特性等
創(chuàng)建項目
uVision2包括一個項目管理器它可以使你的8051應用系統(tǒng)設計變得簡單要創(chuàng)建一
個應用你需要按下列步驟進行操作
.. 啟動uVision2新建一個項目文件并從器件庫中選擇一個器件
.. 新建一個源文件并把它加入到項目中
.. 增加并配置你選擇的器件的啟動代碼
.. 針對目標硬件設置工具選項
.. 編譯項目并生成可以編程PROM的HEX文件
這里將一步一步的進行描述從而指引你如何去創(chuàng)建一個簡單的uVision2項目
*啟動uVision2并創(chuàng)建一個項目
uVision2是一個標準Windows應用程序直接點擊程序圖標就可以啟動它要新建一
個項目文件從uVision2的Project菜單中選擇New Project這將打開一個標準的Windows
對話框此對話框要求你輸入項目文件名
我們建議你為每個項目建一個單獨的文件夾你可以在彈出的對話框中點擊新建文件夾
的圖標來得到一個空的文件夾然后選擇子文件夾并鍵入項目的名稱如Project1uVision2
將創(chuàng)建一個文件名為Project1.UV2的新項目文件新的項目文件包含了一個以默認的文件名
命名的目標和文件組你可以在項Project Window – Files看到這些名字
現(xiàn)在從菜單Project – Select Device for Target為你的項目選擇一個CPU彈出的對話
框中顯示的是器件數(shù)據(jù)庫你只要選擇所需要的MCU就可以了在例子程序中我們選擇
Philips 80C51RD + CPU該選擇就為80C51RD+器件設置了工具選項這種方式簡化了工具
的配置
.ü..?..?..?..?..?..
注意:
對于一些器件uVision2環(huán)境需要你手工輸入一些附加的參數(shù)仔細閱讀此選擇器件對
話框中Description下面的信息它可能提供了你所選擇器件的一些附加的說明
.ü..?..?..?..?..?..
一旦你從器件庫中選擇了一個CPU你就可以在項目窗口的Books頁打開此CPU的用
戶手冊這些用戶手冊是Keil開發(fā)工具光盤中的一部分
新建一個源文件
* 你可以用菜單選項File-New來新建一個源文件這將打開一個空的編輯窗口讓你輸入
你的源代碼當你把此文件另存為*.C的文件后uVision2將高亮顯示C語言語法字符我
們把我們的例子程序保存為MAIN.C
一旦你創(chuàng)建了源文件你就可以把它加入到你的項目中uVision2提供了幾種手段讓你
把源文件加入到項目中例如你可以右擊Project窗口– Files頁中的文件組來彈出快捷菜
單菜單中的Add Files選項打開一個標準的文件對話框從對話框中選擇你剛剛生成的文
件MAIN.C
.ü..?..?..?..?..?..
增加和配置啟動代碼.
文件STARTUP.A51是大多數(shù)不同的8051CPU準備的啟動代碼啟動代碼清除數(shù)據(jù)存
儲器并初始化硬件和重入函數(shù)堆棧指針另外一些8051派生產(chǎn)品要求初始化CPU來迎合
你設計中的相應的硬件例如,Philips 8051RD+提供的片上xdata RAM應該在啟動代碼中啟
用假如你需要修改啟動文件來迎合你的目標硬件你應該把文件STARTUP.A51復制一份
到你的項目文件夾中
為你選擇的CPU的配置文件創(chuàng)建一個文件組是一個良好的習慣用菜單Project –
Targets, Groups, Files 打開對話框來添加一個名為System Files的文件組到你的目標中
也在此對話框中你用Add Files to Group按鈕把文件STARTUP.A51添加到你的項目中
項目窗口的文件頁列出了你項目的所有條目.
現(xiàn)在,你的uVision2的Project Window – Files應該顯示上圖中的文件結構在項目窗
口中雙擊文件名STARTUP.A51你就可以把它在編輯器中打開然后按照P197頁的第十章
(CPU and C Startup Code)的描述來配置啟動代碼 如果你使用你所選擇器件的片上RAM
在啟動代碼中的設置必須匹配Options – Target對話框中的設置下面來討論Options –
Target對話框
為目標設置工具選項
uVision2 允許你為你的目標硬件設置選項Options for Target對話框可以通過工具條圖
標打開在目標的各個頁中你可以定義和你的目標硬件及你所選器件的片上元件相關的所
有參數(shù)下圖顯示了我們例子的設置
.ü..?..?..?..?..?..
下表描述了目標對話框的一些選項
對話框條目
描述
Xtal
定義CPU時鐘對于大多數(shù)應用中和實際的XTAL頻率相同
Memory Model
定義編譯器的存儲模式對于一個新的應用默認的是SMALL模
式參照P78 存儲模式和存儲器類型的討論
Allocate On-chip
Use multiple DPTR
registers
定義在啟動代碼中使能的片上元器件的使用如果你使用片上xdata
RAM那你應該在文件STARTUP.A51中使能XRAM的訪問
Off-chip Memory
在此定義你目標硬件上所有的外部存儲器區(qū)域
Code Banking
Xdata Banking
為代碼和數(shù)據(jù)的分段Banking定義參數(shù)詳細信息參照P67 代
碼分段Code Banking
.ü..?..?..?..?..?..
注意
有些選項只有在你使用LX51連接器時才有用LX51連接器只在PK51中提供.
.ü..?..?..?..?..?..
Build項目并生成HEX文件
通常情況下在Options – Target對話框中的設置已經(jīng)足夠使你開始一個新的應用
通過單擊工具條上的Build目標的圖標你可以編譯所有的源文件并生成應用當你的應用
中有語法錯誤時uVision2將在Output Window – Build頁顯示這些錯誤和告警信息雙擊
一個信息將打開此信息對應的文件并定位到語法錯誤處
一旦你成功的生成了你的應用你就可以開始調(diào)試了uVision2調(diào)試器功能的講述請參
照P93頁Chapter 5的Testing Programs"在你調(diào)試完你的應用后需要創(chuàng)建一個HEX
文件來燒片子或軟件模擬當Options for Target – Output中的輸出HEX文件使能時
uVision2每進行一次Build都生成HEX文件如果定義了Options for Target – Output中
的Run User Program #1 選項時在生成操作完成后將自動運行此處定義的操作如編
程PROM器件
現(xiàn)在你能夠修改已經(jīng)存在的源文件或添加一個新的源文件到項目中Build目標工具條
按鈕只編譯修改過的或新加進來的文件然后生成執(zhí)行文件uVision2維護一個文件包含清
單從而知道某個源文件用到的所有的包含文件而且工具配置的選項也被保存在此清單中
所以uVision2能夠只編譯那些需要重新編譯的文件利用Rebuild All Target(原文為Rebuild
Target)命令所有的文件都被重新編譯而不論是否被修改過
項目目標和文件組
通過使用不同的項目目標uVision2允許你為一個應用創(chuàng)建幾個不同的程序你也許需
要一個目標用來測試另一個目標是你應用系統(tǒng)的發(fā)行版本在同一個項目文件中允許每
個目標進行獨立的工具設置
文件組是用來讓你把項目中相關的文件放在一組這在要求把文件按功能塊組織和確定
你的軟件開發(fā)團體中的工程師們的職責時特別有用我們已經(jīng)在本例子中使用了文件組去分
離與CPU相聯(lián)系的文件和其它文件利用這個技術可以輕松的管理擁有幾百個文件的復
雜項目
Project – Targets, Groups, Files 對話框允許你創(chuàng)建項目目標和文件組我們已經(jīng)用
此對話框增加了系統(tǒng)配置文件下圖中顯示了一個例子項目的結構
項目窗口向你展示所有的組和相聯(lián)系的文件文件按照顯
示的順序編譯和連接你可以通過拖放來移動文件的位置你
也可以單擊目標或組的名字去修改它右擊將打開彈出菜單
彈出菜單可以讓你
1)設置工具選項
2)刪除條目
3)添加文件到組
4)打開文件
在Build工具條上你可以快速改變當前的目標
瀏覽項目窗口中的文件和文件組的屬性
在項目窗口的文件頁中用不同的圖標來標識不同的文件和文件組屬性下面是這些圖標
及其對應的屬性的描述
此圖標是在文件圖標上加一箭頭而成用來表示被編譯連接到項目中去的文件
*
文件圖標用來表示不被連接到項目中去的文件典型的如文檔文件另外在文件的
屬性窗口中取消"Include in Target Build"復選項,將使該文件剔除出項目剔除出項目
的文件也用此圖標參照87頁的文件和文件組的詳細選項 – 屬性對話框
*
圖標上有一把鑰匙用來表示只讀文件典型的如被軟件版本控制系統(tǒng)(SVCS)控制的
文件因為SVCS把他所控制的文件的本地拷貝設置為只讀屬性參照76頁的"使用
SVCS菜單"
此圖標左邊有三個點用來表示有特殊選項的文件(圖4)或文件組(圖5)參照87頁的
文件和文件組的詳細選項 – 屬性對話框
*
.ü..?..?..?..?..?.. 注意
不同的圖標讓你能夠快速瀏覽到一個項目不同的目標中的工具設置
你所看到的圖標總是反映當前所選目標的屬性例如你在一個目標中對一個文件或文
件組設置了特殊選項那只有在你選擇了此目標時那些你設置了特殊選項的文件的圖標上
才會有三個點
.ü..?..?..?..?..?..
/*********************************譯者注-開始**********************************/
第二個圖標為文件圖標所有屬性文件的圖標都以此為基礎再加上箭頭鑰匙三點
中的零到三個來表示文件對于所在目標的屬性更進一步說只讀是屬于文件自己的即
一個文件具有只讀屬性那它在任何目標中都具有但是否包含在項目中是否設置了特
殊選項,是文件對于目標的屬性即在一個目標中的一個文件的圖標上有箭頭和(或)三點,在
另一個目標中并不一定如此
/*********************************譯者注-結束**********************************/
瀏覽配置對話框
此選項對話框讓你設置所有的工具選項通過Project Window – Files中的彈出式菜
單你可以為文件組或者一個單獨的文件設置不同的選項在此處的描述中你僅僅能夠獲
得對話框的相應的標簽頁利用對話框中的幫助按鈕你可以獲得大多數(shù)對話框條目的幫助
下表描述了目標對話框的選項
對話框的標簽頁
描述
Target
定義你應用的硬件詳細信息參見第62頁
Output
定義Keil工具的輸出文件并讓你定義生成處理后執(zhí)行的用戶程序更
多信息參見P82
Listing
定義Keil工具輸出的所有列表文件
C51
設置C51編譯器的特別的工具選項如代碼優(yōu)化或變量分配更多
信息參見P80
A51, AX51
設置匯編器的特別的工具選項如宏處理
L51 Locate
LX51 Locate
定義不同類型的存儲器和存儲器的不同段的位置典型情況下你可
以選擇"Memory Layout from Target Dialog"來獲得自動設置如下圖
所示更多信息參見P86
L51 Misc
LX51 Misc
其它的與連接器相關的設置如告警或存儲器指示
Debug
Vision2 Debugger的設置更多信息參見P101
Properties
文件和文件組的文件信息和特別選項參照P87的"File and Group
Specific Options – Properties Dialog"
在L51標簽頁中一旦你使能Use Memory Layout from Target Dialog選項uVision2
使用從你所選擇器件和目標標簽頁中所得到的存儲器信息你還可以添加附加的段到這些設
置中
代碼分塊Code Banking
一個標準的8051器件能尋址64KB的代碼空間為了突破64KB程序空間的限制Keil
8051工具支持代碼分塊這個技術讓你管理一個公共的區(qū)域和32個每個最大達64KB的塊,
從而達到總共2MB的代碼切換空間
例如你的硬件設計可以包括一個位于
0x0000-0x7fff空間的32KB的ROM如你所知的公共
區(qū)域或公共ROM和四塊位于0x8000-0xffff空間的
32KB的ROM如你所知的代碼塊ROM通常情況
下代碼塊通過端口線選擇右圖顯示了此應用的存
儲器結構
代碼分段在Options for Target – Target標簽
頁中使能和配置在此對話框中輸入你硬件支持
的代碼分塊的個數(shù)和分塊的區(qū)域上例中的存儲
器分塊的配置如右圖所示
為了配置你的分塊的硬件你需要將文件
C51\LIB\L51_BANK.A51加入到你的項目中復制
此文件到你的項目文件夾把它和你項目中的其它
源文件放在一起并添加它到你項目的一個文件組
文件C51\LIB\L51_BANK.A51必須修改以便迎合你
的目標硬件
每個文件或文件組通過其Options – Properties對話框可以被定義到一個特定的代碼
塊中
來打開此文件或文件組的Options –
Properties對話框此對話框允許你選擇
哪個代碼塊或公共區(qū)域
公
進程和數(shù)據(jù)常量如中斷進程中
斷和復位向量字符串常量和塊切換進程
所以連接器只把一個模塊中程序段定
位到相應的塊區(qū)域中數(shù)據(jù)常量放在公共
區(qū)域中如果你能夠確定某些常量段的信
息只被某個特定的代碼塊訪問你可以在
Options forarget – L51 Misc中用
BANKx來指示連接器把這些常量段定位
到此特定的代碼塊中
以上的步驟完成了你的代
用你的PROM編程器把這些HEX文件寫到你的
的配置uV
塊從而讓你能夠調(diào)試程序
如果你在Options for Target –
Outpt對話框中使能"Create E
選uVision2將為每個代碼塊生成 一個
從地址0開始的64KB的物理映像你需要
EPROM中相應的存儲空間中去
uVision2包含許多強大
*菜單Edit – Find
編輯器將定位到匹配此字符串的文本行
*
單iew – Source Browser去打開資源瀏覽器窗口
.ü..?..?..?..?..?..
此瀏覽
排
資
S
#匹配數(shù)字0-9
$ 匹配任意字符
* 匹配任意字符串
選擇需要顯示的符號的類型
選擇一個文件顯示此文件中的符號資源
Memory Sp
定義需要顯示的符號的存儲類
下
代碼
*#*
代表的符號為下劃線開頭接字母a,任一字母任一數(shù)字
可加任何字符
_*ABC
下劃線加任意字符或不加然后接ABC
右擊資
瀏覽器Definitions and references框中顯
定
容對于函數(shù)你還可以看到調(diào)用和被調(diào)用的關系圖在此
Definitions ad references框中還為你提供了一些附加的信
息
符號
[D]
[R]
[r]
[w]
r/w]
/寫操作處
[&]
址引用處
目
快捷鍵
F
Shift+F1
跳轉到
Ctrl+
跳轉到下一處的引用或定義處
Ctrl+Num–
跳轉到前一處的引用或定義處
開
一個鍵序列可以用來從uVision
參數(shù)傳遞中一個鍵序列是鍵碼和文件碼的組合下面列出有效的鍵碼和文件碼
鍵碼 定義由文件碼所確定的文件的路徑
%
#
名如C:\MYPROJECT\PROJECT
%
包含擴展名的文件名,是不包含路徑:PROJECT1.UV2
@
不包含路徑和擴展名的文件名如PROJECT1
$
文件夾名如C:\MYPROJECT
~
當前光標所在位置的行號僅僅在文件碼為F時效
^
當前光標所在位置的列號僅僅在文
碼
文件碼為F時有效要在用戶程序的命令行使用$, #, , @,
#
文件碼
F
回項目文件如果選擇的文件組名則返回當
P
中的文件
當前項目名如PROJECT.UV2
連接器輸出文
H
HEX 應用文件PROJECT1.H86
uVision2 可執(zhí)行文件如C:\KEIL\UV2\UV2.EXE
以下是應用在
件碼 定義插入在用戶程序命令行上的文件名或參數(shù)
Q
R
持修正碼的字符串
C
為SVCS系統(tǒng)保持校驗碼的字符串
U
用戶名在SVCS-Configure Version Co
V
文件名在SVCS-Configure Version
Q,
U 和 V能和鍵碼%組合使用
使用工具
通過工具菜單
菜單可以通過菜單Tools –
Customizeools Menu...打開對話
框在此對話框中配置外部用戶應
用的參數(shù)右邊的對話框示例了一
個工具設置
上圖所示的話
擴
此
描述
對話框條目
Menu Con
前選擇
項
如果選中那么在你點擊此菜單時一個對話框將彈出提示你輸入用戶
程序的
Run Minimize
Command
如果選中將使此應用程序運行時的窗口最小化
輸入你點擊此菜單時運
Initial Folder
應用程序的當前工作目錄如果為空uVision2
Arguments
傳遞給應用程序的命令行參數(shù)
基于應用
的命令行輸出被復制到一臨時文件當此應用執(zhí)行完成后此臨時文
件的內(nèi)容將
tput Window -Build頁列出
運
Gimpel Software
標
顯著地減少你花費在目標應用上的調(diào)試精力
在你的PC機上安裝PC-Lint然
后在Tools
輸入?yún)?shù)本例顯示了一個典型的
PC-Lint的配置
為了在Ouu
lint你的源代碼了菜單Tools – Lint運行PC-Lint
得到正確
KEIL\C51\BIN文件夾中的配置文件
在安裝
來檢查當前
中所有的C源文件PC-Lint的輸出信息被重定向到Output Window-Build頁雙擊
PC-Lint的輸出信息將使編輯器定位到相應的位置
的
置
Siemens Easy-Case
Vision2
文檔編輯器你可以
Easy-Case
安裝asy-Case:為了在Easy-Case中使用Visio調(diào)試器命令文件
C:\KEIL\UV2\UV2EASYP
EASY-CP
C:\>CD C:\WINNT
C:\WINNT>COPY EASY-CPP.INI+C:\KEIL\UV2\UV2EASY-CPP.INI EASY-CPP.INI
在Vision2的Tools
Easy-Case對話框中輸入
EASYCPP
了的配置
你可以用Tools – Start/Stop Easy-Case來啟動
在當前位置打開Vison2中活動編輯器中的文件
利用
E
E
使用SVCS菜單
提供預先配置的模板
描述
控
配
此菜單的配置通SVCS –
Customize SVCS Menu對話框行
此對話框的
對話框條目
Template
ser Name
在參數(shù)
Database
SVCS系統(tǒng)使用的數(shù)據(jù)庫的文件名或路徑通過%V文件碼傳遞
顯示在SVC菜單中的文本行可以包括鍵碼和文件碼
快捷鍵對于當前被選中的菜單行你可以定義以下列出的選項
Query f
允許你在執(zhí)行此SVCS命令前詢問一些附加的信息注釋將被復制到
Comment
個臨時文件中此文件通過文件碼%Q作為一個參數(shù)傳遞給SVCS命令
版本和校驗信息通過文件碼%R和%C作為字符串傳遞
CheckPoint
Run MinimCommaArgument
如果你想以最小化的窗口來執(zhí)行應用使能此選項
當你點擊此SVCS菜單項時將調(diào)用的程序文件
Environment
在執(zhí)行此SVCS程序前需要設置的環(huán)境變量
命令行SV
應用程序的輸出被復制到一個臨時文件中
件的內(nèi)容被列
在Output Window – Build頁
如右圖所示是一個
S
Window –
兩個單獨的文件項目設置保存在*.UV2文件中此文件將被
指導編譯生成應用代碼uVision2的本地配置被保存在*.OPT文
SVCS
參數(shù)目標名使用*.UV2
格式的項目名如你所見
的文件的本地拷貝是一個
只讀文件所以它的圖標
上有一個鑰匙樣符號
uVisio項目被保存為
SVCS查找并且可以用
件
下表列出了典型的SVCS菜單項
其它增加的
SVCS菜單項 描述
Check Out
并把
ndo Check
取消Check Out操作
Out
Put Current
把文件保存到SVCS的數(shù)據(jù)庫中但對本地文件仍然可以修改
Version
Version
Project
ifferences
History
你也許要
.ü..?..?..?..?..?..
SSUSER環(huán)境變量使用工作站的登錄名
MKS
這邊是一個本地的發(fā)送郵箱形式的工作空間
Intersolv PVCS 在創(chuàng)建和維護項目上
.ü..?..?..?..?..?..
編
工具設置都能產(chǎn)生良
存
照35頁的存儲模式
其它C51編譯器指
還有好幾個其它的C51編譯參數(shù)能夠改善代碼質(zhì)量這些參數(shù)的選擇由Options –
C51對話框提供在一個應用中你可以用不同的編譯設置來編譯C程序模塊通過列表
文件你可以比較由不同的編譯設置編譯生成的代碼的質(zhì)量
并
令
D't use absolute
register accesses
禁止使用寄存器R0-R7的絕對地址訪由于C51不能使用ARx符號
所以代碼將有一點點增加比如用PUSH和POP指令時需要插入
替代代碼然而代碼也將不依賴于寄存器
Interrupt vectors at
inter
String 的源文件的各個
8051 CPU
數(shù)或長
是一個控制器用8位字節(jié)如char和unsigned char的操作比用
型的操作要更有效
技
接下來的一節(jié)
你不會常用
入uVision1的
目到uVision2
你可以用下面的步驟
來把在uVision1中創(chuàng)建的項目導入到uVision2中
isi
很重要的一點是新
的uVision2項目必須創(chuàng)建在你已經(jīng)存在的uVision1項目文件夾中
t
已經(jīng)存在的uV
n1項目只有新項目的文件列表是空的時此菜單才是可用的
Options for Ta
t-Target對話框選項來定義你目標硬件的存儲器結構一旦你這樣做了
ns for Target – L51 Locate對話框中的UseM
arget Dialog選項
并在此對話框中刪除用戶類型和用戶區(qū)域的設置
注意
由于uVision2在許多方面和以的
換為
如
能復制到
.ü..?..?..?..?..?..
.ü..?..?..?..?..?..
彈出一個提示對
而從刪除也許原文相關部分應翻譯為并且此對話框中已經(jīng)刪除了用戶類型和用
戶區(qū)域的設置
Build后運行外部程序
Options for Target – Output對話框允許你輸入最多兩個用戶程序在Build成功后開
始執(zhí)行使用鍵序列碼你可以從uVision2項目管理中傳遞參數(shù)到這些用戶程序中
你可以在編輯器窗口中使用瀏覽器的信息選擇你想要尋找的條
目右擊打開彈出式菜單或使用下面的快捷鍵
12 跳轉到定義處
跳轉到引用處將光標置到符號引
Ctrl+Num+
上例中User Program #1的調(diào)用參數(shù)是帶絕對路徑的Hex格式的輸出文件如
C:\MYPROJECT\PROJECT1.HEXUser Program #的用參數(shù)僅僅是連接器的輸出
文件PROJECT1的名不帶后綴和參數(shù)"-p"表示的向項目的路徑:\MYPRJECT
如果你的文件夾名字中包含如~,#等特字
為列表文件和目標文件指定單獨的文件夾
.. Options for Target –
目標文件視為有效即使你修改了你的項目目標Build Target命令也只是重新編譯那
些修改過的文件
..
提供同樣的功能
用uVisio
器件庫中沒有列出的微控制
的
..
e
MODP2 Philips and Temic各種器件的雙數(shù)據(jù)指針
MOD517DP Infineon C500列器件的多用途數(shù)據(jù)指針
MOD517AU Inineon C500系列器件的算術邏輯單元
MOD_CONT 使能支持Dallas 390 Contigious模式
創(chuàng)建一個庫文件
在Options for Target – Output對話框中選擇創(chuàng)建庫文件uVision2將調(diào)用庫管理器
是連接/定位器
L51 Misc選項頁的輸入將被忽略同時在目標頁中的CPU和儲存器的設置也無關緊要
C
all Settings from Current Target從一個已經(jīng)存在的目標復制工具設置到當前的目標的步驟
如下
1
2選擇你想要復制工具設置的目標為當前目標
能Copy all Settings from Current Target后再把剛剛刪除的目標加進來
代碼到絕對
器空間
需
代碼段放在特定的存儲器地
要放在0xC000地址處這個結構體在文件ALMCTRL.C中定義并且這個模塊只包含此
結構體的聲明
unsigned ch
unsigned char status;
};
struct alarm_st xdata alarm_control;
段
為的段放在xdata儲存
C51提供關鍵詞_at_和一些能夠存取
"
.ü..?..?..?..?..?..
.ü..?..?..?..?..?..
, Type, Size
文件和文件組的特定選項 - 屬性對話框
uVision2允許你通過Project Window – Files頁的彈出式菜單設
定
以
選項為灰色
框
Last Change
Include in 禁止此選項
例中我們?yōu)槲?/P>
FILE1.C定義的屬性為編譯時遇到告
編
編
請核對你是否能
你的C
提供了幾個內(nèi)聯(lián)的函數(shù)
不需要插入?yún)R編指令
C
.ü..?..?..?..?..?..
.ü..?..?..?..?..?..
使用用戶編譯器
如果你增加一個帶未知文件后綴
件
編譯器將從用戶文件產(chǎn)生一個源文件
將此源文件編譯成能夠連接到你的應用中的目標文件
使用Intel PL/M-5
如果你還有Intel PL/M-51源文件需要包含到你的uVision2項
目中你可以以用戶文件的形式增加這些源文件到uVision2項目
樹中另外你也必須插入由PL/M51生成的*.OBJ文件和Intel
PLM51.LIB
Project – File Ex
不同的編譯器
通過Project Window – Files頁的彈出式菜單你可以為一
不同選項在對話框頁中有三態(tài)選擇如果一個
你
該
打開菜單時將列出所有工具的詳細的信息在你向我們報告