官术网_书友最值得收藏!

1.1 Keil C51的使用

單片機(jī)的源程序是在哪里進(jìn)行編寫(xiě)的?是在哪里將其調(diào)試并生成.HEX文件的?其實(shí)這些工作在單片機(jī)的一些編譯軟件中就可以完成。單片機(jī)程序的編譯調(diào)試軟件比較多,如51匯編集成開(kāi)發(fā)環(huán)境、偉福仿真軟件、Keil單片機(jī)開(kāi)發(fā)系統(tǒng)等。

Keil C51是當(dāng)前使用最廣泛的基于80C51單片機(jī)內(nèi)核的軟件開(kāi)發(fā)平臺(tái)之一,由德國(guó)Keil Software公司推出。μVision4是Keil Software公司推出的關(guān)于51系列單片機(jī)的開(kāi)發(fā)工具。μVision4集成開(kāi)發(fā)環(huán)境IDE是一個(gè)基于Windows的軟件開(kāi)發(fā)平臺(tái),集編輯、編譯、仿真于一體,支持匯編語(yǔ)言和C語(yǔ)言的程序設(shè)計(jì)。一般來(lái)說(shuō),Keil 51和μVision4指的是μVision4集成開(kāi)發(fā)環(huán)境。

Keil C51可以從相關(guān)網(wǎng)站下載并安裝。安裝好后,雙擊桌面上的快捷圖標(biāo),或者在“開(kāi)始”菜單中選擇“Keil μVision4”,即可啟動(dòng)Keil μVision4集成開(kāi)發(fā)環(huán)境,如圖1-1所示。

圖1-1 啟動(dòng)Keil μVision4后畫(huà)面

1. 創(chuàng)建項(xiàng)目

Keil μVision4中有一個(gè)項(xiàng)目管理器,它包含了程序的環(huán)境變量和編輯有關(guān)的全部信息,為單片機(jī)程序的管理帶來(lái)了很大的方便。

〖創(chuàng)建新項(xiàng)目的操作步驟〗

(1)啟動(dòng)μVision4,創(chuàng)建一個(gè)項(xiàng)目文件,并從元器件數(shù)據(jù)庫(kù)中選擇一款合適的CPU。

(2)創(chuàng)建一個(gè)新的源程序文件,并把這個(gè)源程序文件添加到項(xiàng)目中。

(3)設(shè)置工具選項(xiàng),使之適合目標(biāo)硬件。

(4)編譯項(xiàng)目,并生成一個(gè)可供PROM編程的.HEX文件。

1)啟動(dòng)μVision4并創(chuàng)建一個(gè)項(xiàng)目文件 μVision4是一個(gè)標(biāo)準(zhǔn)的Windows應(yīng)用程序,直接在桌面上雙擊圖標(biāo)就可啟動(dòng)它。在μVision4中執(zhí)行菜單命令“Project”→“New Project”,彈出“Create New Project”對(duì)話框,在此可以輸入項(xiàng)目名稱。建議每個(gè)項(xiàng)目使用一個(gè)獨(dú)立的文件夾。

輸入新建項(xiàng)目名后,單擊“確定”按鈕,彈出如圖1-2所示的“Select Device for Target 'Target 1'”對(duì)話框。在此對(duì)話框中根據(jù)需要選擇合適的單片機(jī)型號(hào)。執(zhí)行菜單命令“Project”→“Select Device for Target”也會(huì)彈出圖1-2所示的對(duì)話框。

圖1-2 “Select Device for Target 'Target 1'”對(duì)話框

在圖1-2中,左邊“Data base”欄列出了各廠商名及其產(chǎn)品,右邊“Description”欄是對(duì)該選中單片機(jī)的說(shuō)明。選擇了目標(biāo)器件后,單擊“OK”按鈕,將彈出圖1-3所示的對(duì)話框。在此對(duì)話框中,詢問(wèn)用戶是否將標(biāo)準(zhǔn)的8051啟動(dòng)代碼復(fù)制到項(xiàng)目文件夾并將該文件添加到項(xiàng)目中。在此單擊“否”按鈕,項(xiàng)目窗口中將不添加啟動(dòng)代碼;單擊“是”按鈕,項(xiàng)目窗口中將添加啟動(dòng)代碼。二者的區(qū)別如圖1-4所示。

startup.a51文件是大部分8051CPU及其派生產(chǎn)品的啟動(dòng)程序,啟動(dòng)程序的操作包括清除數(shù)據(jù)存儲(chǔ)器內(nèi)容、初始化硬件及可重入堆棧指針。一些8051派生的CPU需要初始化代碼以使配置符合硬件上的設(shè)計(jì)。例如,Philips的8051RD+片內(nèi)xdata RAM需通過(guò)在啟動(dòng)程序中的設(shè)置才能使用。應(yīng)按照目標(biāo)硬件的要求來(lái)創(chuàng)建相應(yīng)的startup.a51文件,或者直接將它從安裝路徑的\C51\LIB文件夾中復(fù)制到項(xiàng)目文件中,并根據(jù)需要進(jìn)行更改。

圖1-3 詢問(wèn)是否添加啟動(dòng)代碼對(duì)話框

圖1-4 是否添加啟動(dòng)代碼的區(qū)別

2)創(chuàng)建新的源程序文件 單擊圖標(biāo)或執(zhí)行菜單命令“File”→“NEW”,就可以創(chuàng)建一個(gè)源程序文件。該命令會(huì)打開(kāi)一個(gè)空的編輯器窗口,在編輯窗口中輸入源代碼,如圖1-5所示。源代碼可以用匯編語(yǔ)言或單片機(jī)C語(yǔ)言進(jìn)行書(shū)寫(xiě),源代碼輸入完成后,執(zhí)行菜單命令“File”→“Save as…”或“Save”,即可對(duì)源程序進(jìn)行保存。在保存時(shí),文件名只能由字符、字母或數(shù)字組成,并且一定要帶擴(kuò)展名(使用匯編語(yǔ)言編寫(xiě)的源程序的擴(kuò)展名為.A51或.ASM;使用單片機(jī)C語(yǔ)言編寫(xiě)的源程序的擴(kuò)展名為.C)。源程序保存好后,源程序窗口中的關(guān)鍵字呈彩色高亮度顯示。

圖1-5 源程序編輯窗口

源程序文件創(chuàng)建好后,可以把這個(gè)文件添加到項(xiàng)目中。在μVision4中,添加的方法有多種。如圖1-6所示,在“Source Group 1”上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“Add Files to Group 'Source Group 1'”,在彈出的“Add Files to Group 'Source Group 1'”對(duì)話框中選擇剛才創(chuàng)建的源程序文件即可將其添加到項(xiàng)目中。

圖1-6 在項(xiàng)目中添加源程序文件

3)為目標(biāo)設(shè)定工具選項(xiàng) 單擊圖標(biāo)或執(zhí)行菜單命令“Project”→“Options for Target”,將會(huì)出現(xiàn)“Options for Target 'Target 1'”對(duì)話框,如圖1-7所示。在“Target”選項(xiàng)卡中可以對(duì)目標(biāo)硬件及所選器件片內(nèi)部件進(jìn)行參數(shù)設(shè)定。表1-1描述了“Target”選項(xiàng)卡的選項(xiàng)說(shuō)明。

表1-1 “Target”選項(xiàng)卡的選項(xiàng)說(shuō)明

標(biāo)準(zhǔn)的80C51的程序存儲(chǔ)器空間為64KB,若程序存儲(chǔ)器空間超過(guò)64KB時(shí),可在“Target”選項(xiàng)卡中對(duì)“Code Banking”欄進(jìn)行設(shè)置。Code Banking為地址復(fù)用,可以擴(kuò)展現(xiàn)有的CPU程序存儲(chǔ)器尋址空間。復(fù)選“Code Banking”欄后,用戶根據(jù)需求在“Banks”中選擇合適的塊數(shù)。在Keil C51中,用戶最多能使用32塊64KB的程序存儲(chǔ)空間,即2MB的空間。

4)編譯項(xiàng)目并創(chuàng)建HEX文件 在“Target”選項(xiàng)卡中設(shè)置好參數(shù)后,就可對(duì)源程序進(jìn)行編譯。單擊圖標(biāo)或執(zhí)行菜單命令“Project”→“Build Target”,可以編譯源程序并生成應(yīng)用。當(dāng)所編譯的程序有語(yǔ)法錯(cuò)誤時(shí),μVision4將會(huì)在“Build Output”窗口中顯示錯(cuò)誤和警告信息,如圖1-8所示。雙擊某一條信息,光標(biāo)將會(huì)停留在μVision4文本編輯窗口中出現(xiàn)該錯(cuò)誤或警告的源程序位置上。

圖1-7 “Options for Target 'Target 1'”對(duì)話框

圖1-8 錯(cuò)誤和警告信息

若成功創(chuàng)建并編譯了應(yīng)用程序,就可以開(kāi)始調(diào)試。當(dāng)程序調(diào)試好后,要求創(chuàng)建一個(gè)HEX文件,生成的.HEX文件可以下載到EPROM編程器或模擬器中。

若要?jiǎng)?chuàng)建HEX文件,必須將“Options for Target 'Target 1'”對(duì)話框中的“Output”選項(xiàng)卡下的“Create HEX File”復(fù)選框選中,如圖1-9所示。

圖1-9 選中“Create HEX File”

2. 仿真設(shè)置及窗口介紹

1)仿真設(shè)置 使用μVision4調(diào)試器可對(duì)源程序進(jìn)行測(cè)試,μVision4提供了兩種操作工作模式,這兩種模式可以在“Option for Target 'Target 1'”對(duì)話框的“Debug”選項(xiàng)卡中選擇,如圖1-10所示。

圖1-10 仿真設(shè)置

? Use Simulator:軟件仿真模式,將μVision4調(diào)試器配置成純軟件產(chǎn)品,能夠仿真8051系列產(chǎn)品的絕大多數(shù)功能而不需要任何硬件目標(biāo)板,如串行口、外部I/O和定時(shí)器等,這些外圍部件設(shè)置是在從元器件數(shù)據(jù)庫(kù)選擇CPU時(shí)選定的。

? Use:硬件仿真,如TKS Debugger,用戶可以直接把這個(gè)環(huán)境與仿真程序或Keil監(jiān)控程序相連。

(1)CPU仿真:μVision4仿真器可以模擬16MB的存儲(chǔ)器,該存儲(chǔ)器被映射為讀、寫(xiě)或代碼執(zhí)行訪問(wèn)區(qū)域。除了將存儲(chǔ)器映射外,仿真器還支持各種80C51派生產(chǎn)品的集成外圍器件。在“Debug”選項(xiàng)卡中可以選擇和顯示片內(nèi)外圍部件,也可通過(guò)設(shè)置其內(nèi)容來(lái)改變各種外設(shè)的值。

(2)啟動(dòng)調(diào)試:源程序編譯好后,選擇相應(yīng)的仿真操作模式,可啟動(dòng)源程序的調(diào)試。單擊圖標(biāo)或執(zhí)行菜單命令“Debug”→“Star/Stop Debug Session”,即可啟動(dòng)μVision4的調(diào)試模式,如圖1-11所示。

(3)斷點(diǎn)的設(shè)定:在編輯源程序過(guò)程中,或者在程序尚未編譯前,用戶可以設(shè)置執(zhí)行斷點(diǎn)。μVision4中可用不同的方法來(lái)定義斷點(diǎn)。

圖1-11 調(diào)試界面

? 在文本編輯框中或反匯編窗口中選定所在行,然后單擊“File Toolbar”按鈕或單擊圖標(biāo)

? 在文本編輯窗口或反匯編窗口本地菜單上單擊鼠標(biāo)右鍵,打開(kāi)快捷菜單進(jìn)行斷點(diǎn)設(shè)置。

? 執(zhí)行菜單命令“Debug”→“Breakpoint”,打開(kāi)“Breakpoint”對(duì)話框,在這個(gè)對(duì)話框中可以查看定義或更改斷點(diǎn)的設(shè)置。

? 在“Command”窗口中可以使用BreakSet、BreakKill、BreakList、BreakEnable和BreakDisable等命令。

(4)目標(biāo)程序的執(zhí)行:目標(biāo)程序的執(zhí)行可使用以下方法操作:

? 執(zhí)行菜單命令“Debug”→“Run”,或者直接單擊圖標(biāo)

? 在文本編輯窗口或反匯編窗口單擊鼠標(biāo)右鍵,在彈出的快捷菜單上選擇“Run till Cursor line”命令。

? 在“Command”窗口中可以使用Go、Ostep、Pstep、Tsetp命令。

2)主要窗口介紹 在μVision4中有許多的工作窗口,這些窗口有些是在編譯狀態(tài)下有效,有些是在調(diào)試狀態(tài)下有效,但多數(shù)窗口只在調(diào)試狀態(tài)下有效。表1-2列出了μVision4中的主要工作窗口。

表1-2 1Vision4中的主要工作窗口

(1)反匯編窗口:在進(jìn)行程序調(diào)試及分析時(shí),經(jīng)常會(huì)用到反匯編。反匯編窗口同時(shí)顯示目標(biāo)程序、編譯的匯編程序和二進(jìn)制文件,如圖1-12所示。

在程序調(diào)試狀態(tài)下,執(zhí)行菜單命令“View”→“Disassembly Window”,即可打開(kāi)反匯編窗口。當(dāng)反匯編窗口作為當(dāng)前活動(dòng)窗口時(shí),若單步執(zhí)行指令,所有的程序?qū)凑誄PU指令(即匯編)來(lái)單步執(zhí)行,而不是C語(yǔ)言的單步執(zhí)行。

(2)CPU寄存器窗口:在程序調(diào)試狀態(tài)下,執(zhí)行菜單命令“View”→“Registers Window”,將打開(kāi)CPU寄存器窗口,在此窗口中將顯示CPU寄存器相關(guān)內(nèi)容,如圖1-13所示。

(3)存儲(chǔ)器窗口:在程序調(diào)試狀態(tài)下,執(zhí)行菜單命令“View”→“Memory Window”→“Memory #1”,將打開(kāi)存儲(chǔ)器窗口。存儲(chǔ)器窗口最多可以通過(guò)4個(gè)不同的頁(yè)觀察4個(gè)不同的存儲(chǔ)區(qū),每頁(yè)都能顯示存儲(chǔ)器中的內(nèi)容,如圖1-14所示。

圖1-12 反匯編窗口

圖1-13 CPU寄存器窗口

圖1-14 存儲(chǔ)器窗口

在“Address”欄中輸入地址值后,顯示區(qū)域直接該地址的內(nèi)容。若要更改地址中的內(nèi)容,只需在該地址上雙擊鼠標(biāo)左鍵,并輸入新的內(nèi)容即可。

(4)串行窗口:μVision4提供了4個(gè)專門(mén)用于串行調(diào)試輸入和輸出的窗口,被模擬仿真的CPU串行口數(shù)據(jù)輸出將在該窗口進(jìn)行顯示,輸入串行窗口中的字符將會(huì)被輸入到模擬的CPU中。

在程序調(diào)試狀態(tài)下,執(zhí)行菜單命令“View”→“Serial Window”→“UART #1”,即可打開(kāi)串行調(diào)試窗口。

3.Keil程序調(diào)試與分析

前面講述了如何在Keil中建立、編譯、連接項(xiàng)目,并獲得目標(biāo)代碼,但是做到這一步僅代表源程序沒(méi)有語(yǔ)法錯(cuò)誤,至于源程序中存在的其他錯(cuò)誤,必須通過(guò)調(diào)試才能發(fā)現(xiàn)并解決。事實(shí)上,除了極簡(jiǎn)單的程序外,絕大多數(shù)的程序都要通過(guò)反復(fù)調(diào)試才能得到正確的結(jié)果,因此,調(diào)試是軟件開(kāi)發(fā)中的一個(gè)重要環(huán)節(jié)。

1)寄存器和存儲(chǔ)器窗口分析 進(jìn)入調(diào)試狀態(tài)后,執(zhí)行菜單命令“Debug”→“Run”,或者單擊圖標(biāo),全部運(yùn)行源程序。執(zhí)行菜單命令“Debug”→“Step”,或者單擊圖標(biāo),單步運(yùn)行源程序。源程序運(yùn)行過(guò)程中,項(xiàng)目工作區(qū)(Project Workspace)“Registers”選項(xiàng)卡中顯示相關(guān)寄存器當(dāng)前的內(nèi)容。若在調(diào)試狀態(tài)下未顯示此窗口,可執(zhí)行菜單命令“View”→“Project Window”將其打開(kāi)。

在源程序運(yùn)行過(guò)程中,可以通過(guò)存儲(chǔ)器窗口(Memory Window)來(lái)查看存儲(chǔ)區(qū)中的數(shù)據(jù)。在存儲(chǔ)器窗口的上部,有供用戶輸入存儲(chǔ)器類型的起始地址的文本輸入欄,用于設(shè)置關(guān)注對(duì)象所在的存儲(chǔ)區(qū)域和起始地址,如“D:0x30”。其中,前綴表示存儲(chǔ)區(qū)域,冒號(hào)后為要觀察的存儲(chǔ)單元的起始地址。常用的存儲(chǔ)區(qū)前綴有“d”或“D”(表示內(nèi)部RAM的直接尋址區(qū))、“i”或“I”(表示內(nèi)部RAM的間接尋址區(qū))、“x”或“X”(表示外部RAM區(qū))、“c”或“C”(表示ROM區(qū))。由于P0端口屬于SFR(特殊功能寄存器),片內(nèi)RAM字節(jié)地址為80H,所以在存儲(chǔ)器窗口的上部輸入“d:80h”時(shí),可查看P0端口的當(dāng)前運(yùn)行狀態(tài)為FE,如圖1-15所示。

2)延時(shí)子程序的調(diào)試與分析 在源程序編輯狀態(tài)下,執(zhí)行菜單命令“Project”→“Options for Target 'Target 1'”,或者在工具欄中單擊圖標(biāo),再在彈出的對(duì)話框中選擇“Target”選項(xiàng)卡。在“Target”選項(xiàng)卡的“Xtal(MHz):”欄中輸入12,即設(shè)置單片機(jī)的晶振頻率為12MHz。然后在工具欄中單擊圖標(biāo),對(duì)源程序再次進(jìn)行編譯。

執(zhí)行菜單命令“Debug”→“Start/Stop Debug Session”,或者在工具欄中單擊圖標(biāo),進(jìn)入調(diào)試狀態(tài)。在調(diào)試狀態(tài)下,單擊圖標(biāo),使光標(biāo)首次指向LCALL DELAY后,項(xiàng)目工作區(qū)“Registers”選項(xiàng)卡的Sys項(xiàng)中sec為0.00000400,如圖1-16所示,表示進(jìn)入首次運(yùn)行到LCALL DELAY時(shí)花費(fèi)了0.00000400s。再次單擊圖標(biāo),光標(biāo)指向“RL A”,Sys項(xiàng)的sec為0.79846900,如圖1-17所示。因此,DELAY的延時(shí)時(shí)間為二者之差,即0.79846500s,也就是說(shuō)延時(shí)約為0.8s。

圖1-15 存儲(chǔ)器窗口

圖1-16 光標(biāo)首次指向LCALL DELAY

圖1-17 光標(biāo)首次指向“RL A”

3)P0端口運(yùn)行模擬分析 執(zhí)行菜單命令“Debug”→“Start/Stop Debug Session”,或者在工具欄中單擊圖標(biāo),進(jìn)入調(diào)試狀態(tài)。

執(zhí)行菜單命令“Peripherals”→“I/O Ports”→“Port 0”,將彈出“Parallel Port 0”窗口。“Parallel Port 0”窗口的最初狀態(tài)如圖1-18(a)所示,表示P0端口的初始值為0xFF,即FFH。單擊圖標(biāo)或多次單擊圖標(biāo)后,“Parallel Port 0”窗口的狀態(tài)將會(huì)發(fā)生變化,如圖1-18(b)所示,表示P0端口當(dāng)前為0xFB,即FBH。

圖1-18 P0端口狀態(tài)

主站蜘蛛池模板: 安仁县| 清流县| 邯郸县| 徐水县| 台州市| 阿勒泰市| 上饶市| 山阳县| 城市| 大荔县| 枣强县| 马尔康县| 长阳| 宜川县| 理塘县| 汉源县| 河东区| 卓资县| 景德镇市| 宜丰县| 宿州市| 兴安盟| 柯坪县| 库尔勒市| 三都| 墨江| 安仁县| 尤溪县| 抚宁县| 剑河县| 房产| 斗六市| 双桥区| 苏尼特左旗| 龙岩市| 曲周县| 中牟县| 长子县| 方城县| 新竹市| 延寿县|