GOODKeil工程文件的建立設置與目標文件的獲得_第1頁
GOODKeil工程文件的建立設置與目標文件的獲得_第2頁
GOODKeil工程文件的建立設置與目標文件的獲得_第3頁
GOODKeil工程文件的建立設置與目標文件的獲得_第4頁
GOODKeil工程文件的建立設置與目標文件的獲得_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實例教程(一)Keil工程建立及設置作者:教程來源:本站原創(chuàng)點擊數(shù):1700 更新時間:2008-7-23匕“Keil工程文件的建立、設置與目標文件的獲得單片機開發(fā)中除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要 變?yōu)镃PU可以執(zhí)行的機器碼有兩種方法,一種是手工匯編,另一種是機器匯編,目 前已極少使用手工匯編的方法了。機器匯編是通過匯編軟件將源程序變?yōu)闄C器碼, 用于MCS-5單片機的匯編軟件有早期的A51,隨著單片機開發(fā)技術的不斷發(fā)展,從 普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機的開發(fā)軟件也在不斷發(fā)展, Keil軟件是目前最流行開發(fā) MCS-5系列單片機的軟件,這從近年來各仿真

2、機廠商 紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、 庫管理和一個功能強大的仿真調試器等在內的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision )將這些部份組合在一起。運行 Keil軟件需要Pentium或以上的CPU 16MB或更多 RAM 20M以上空閑的硬盤空間、 WIN98 NT WIN2000 WINXP等操作 系統(tǒng)。掌握這一軟件的使用對于使用51系列單片機的愛好者來說是十分必要的,如 果你使用C語言編程,那么Keil幾乎就是你的不二之選(目前在國內你只能買到 該軟件、而你買的仿真機也很可能只支持該軟件),即使不使用C語言而僅用匯編 語言編程,其方

3、便易用的集成環(huán)境、強大的軟件仿真調試工具也會令你事半功倍。我們將通過一些實例來學習 Keil軟件的使用,在這一部份我們將學習如何輸入 源程序,建立工程、對工程進行詳細的設置,以及如何將源程序變?yōu)槟繕舜a。圖 1所示電路圖使用89C51單片機作為主芯片,這種單片機性屬于MCS-5系列,其內部 有4K的FLASH ROM可以反復擦寫,非常適于做實驗。89C51的 P1引腳上接8個發(fā)光 二極管,引腳上接4個按鈕開關,我們的第一個任務是讓接在 P1引腳上的發(fā)光二極 管依次循環(huán)點亮。一、Keil工程的建立首先啟動Keil軟件的集成開發(fā)環(huán)境,這里假設讀者已正確安裝了該軟件, 可以 從桌面上直接雙擊uVis

4、ion的圖標以啟動該軟件。UVison啟動后,程序窗口的左邊有一個工程管理窗口,該窗口有3個標簽,分別是Files、Regs和Books,這三個標簽頁分別顯示當前項目的文件結構、CPU勺寄存器及部份特殊功能寄存器的值(調試時才出現(xiàn))和所選CPU勺附加說明文件,如果是第一次啟動Keil,那么這三個標簽頁全是空的。圖1簡單的鍵盤、顯示板1、源文件的建立使用菜單“ File -NeW或者點擊工具欄的新建文件按鈕,即可在項目窗口的右側打開一個新的文本編緝窗口,在該窗口中輸入以下匯編語言源程序,例1:MOV A,#OFEHMAIN:MOVP1 ,ARLALCALLDELAYAJMPMAINDELAY:M

5、OVR7,#255D1:MOVR6,#255DJNZR6,$DJNZR7,D1RETEND保存該文件,注意必須加上擴展名(匯編語言源程序一般用asm或 a51為擴展名), 這里假定將文件保存為。需要說明的是,源文件就是一般的文本文件,不一定使用Keil軟件編寫,可以使用任意文本編緝器編寫,而且,Keil的編緝器對漢字的支持不好,建議使用UltraEdit之類的編緝軟件進行源程序的輸入。2、建立工程文件在項目開發(fā)中,并不是僅有一個源程序就行了,還要為這個項目選擇CPU( Keil支持數(shù)百種CPU而這些CPU的特性并不完全相同),確定編譯、匯編、連接的參數(shù), 指定調試的方式, 有一些項目還會有多個

6、文件組成等,為管理和使用方便, Keil 使 用工程( Project )這一概念,將這些參數(shù)設置和所需的所有文件都加在一個工程 中,只能對工程而不能對單一的源程序進行編譯(匯編)和連接等操作,下面我們 就一步一步地來建立工程。圖3加入文件圖2選擇目標 CPU點擊“ Project -New Project”菜單,出現(xiàn)一個對話框,要求給將要建立的 工程起一個名字,你可以在編緝框中輸入一個名字(設為exam。,不需要擴展名。點擊“保存”按鈕, 出現(xiàn)第二個對話框, 如圖2所示,這個對話框要求選擇目標 CPU (即你所用芯片的型號),Keil支持的CPU多,我們選擇Atmel公司的89C51芯片。

7、點擊ATME前面的“+”號,展開該層,點擊其中的89C51,然后再點擊“確定”按 鈕,回到主界面,此時,在工程窗口的文件頁中, 出現(xiàn)了“ Target 1”,前面有“ +” 號,點擊“ +”號展開,可以看到下一層的“ Source GroupT,這時的工程還是一 個空的工程,里面什么文件也沒有,需要手動把剛才編寫好的源程序加入,點擊 “Source Group1 ”使其反白顯示,然后,點擊鼠標右鍵,出現(xiàn)一個下拉菜單,如圖3所示。選中其中的“ Add file to Group ” Source Group1 ”,出現(xiàn)一個對話框, 要求尋找源文件, 注意,該對話框下面的“文件類型”默認為 Cso

8、urce file(*.c) , 也就是以C為擴展名的文件,而我們的文件是以 asm為擴展名的,所以在列表框中 找不到,要將文件類型改掉,點擊對話框中“文件類型”后的下拉列表,找到并選中“ Asm Source File(*a51,*asm),這樣,在列表框中就可以找到文件了。ihdcutV endor : Atm elDevice: 89C51Family: IICS-51b普 gDe scripti qhi:I Sai lii l-ilfljlU ;ill*yleir 零遷2備!3i IXS:89C5285CE139CZ0518SC405139C558SF51ar?F51CS7F52 39

9、C1051 39CL051UAtm el87F5LC;CS1 1 ull S l 匚MOCullei wi th r;Lt Lvsl Pi 32 I/O lints 2 Tifftsr/Courtt srs? E lit terr up I; saurtfss 4 K FlAh Mm12B Bvt nuhin R iMI 確定 I 取消 ;_j Tarftt 1Select Devic for Tfirgftt I fir get I,Ofti ms for Group f Sour c Group V|Add Jilas to Group Source Croup LJXargets Gro

10、ups FilesR ano vs Group Sour m Group 1 and itm FilesOjen F:Lt-|g| Rebu.ild target iXj 鈕iL坎 targetTranslate File 基 Step bmldleyi qe f pf Target Tajr耳wt 雙擊文件,將文件加入項目,注意,在文件加入項目后,該對話框并不消失, 等待繼續(xù)加入其它文件,但初學時常會誤認為操作沒有成功而再次雙擊同一文件, 這時會出現(xiàn)如圖4所示的對話框,提示你所選文件已在列表中,此時應點擊“確 定”,返回前一對話框,然后點擊“ Close”即可返回主界面,返回后,點擊“ So

11、urce Group 1 ”前的加號,會發(fā)現(xiàn)文件已在其中。雙擊文件名,即打開該源程序。圖4】、工程的詳細設置工程建立好以后,還要對工程進行進一步的設置,以滿足要求。首先點擊左邊Project窗口的Target 1,然后使用菜單“ Project -Option for target targetl ”即出現(xiàn)對工程設置的對話框,這個對話框可謂非常復雜,共 有8個頁面,要全部搞清可不容易,好在絕大部份設置項取默認值就行了。圖5對目標進行設置設置對話框中的Target頁面,如圖5所示,Xtal后面的數(shù)值是晶振頻率值,默 認值是所選目標CPU勺最高可用頻率值,對于我們所選的AT89C5而言是24M該數(shù)

12、 值與最終產生的目標代碼無關,僅用于軟件模擬調試時顯示程序執(zhí)行時間。正確設 置該數(shù)值可使顯示時間與實際所用時間一致,一般將其設置成與你的硬件所用晶振頻率相同,如果沒必要了解程序執(zhí)行的時間,也可以不設,這里設置為12。Target Qutjrat | Listing | C5L 股 1| SL51 Locat B151 IHisc | Delruc |Atmel 69C51廠 血。On-chip RDM JtO-OjifFF)0 cltip Code mem or0 cliipiwemorjrStr t Si ze:Opti ffiis f qi T* Tax 1*圖5Memory Model用

13、于設置RAM使用情況,有三個選擇項,Small是所有變量都在 單片機的內部RAM中; Compact是可以使用一頁外部擴展 RAM而Larget則是可以 使用全部外部的擴展RAM Code Model用于設置ROh空間的使用,同樣也有三個選 擇項,即Small模式,只用低于2K的程序空間;Compact模式,單個函數(shù)的代碼量 不能超過2K,整個程序可以使用64K程序空間;Larget模式,可用全部64K空間。 Use on-chip ROM選擇項,確認是否僅使用片內 RO(注意:選中該項并不會影響 最終生成的目標代碼量);Operating項是操作系統(tǒng)選擇,Keil提供了兩種操作系 統(tǒng):Rtx

14、 tiny 和Rtx full ,關于操作系統(tǒng)是另外一個很大的話題了,通常我們不 使用任何操作系統(tǒng),即使用該項的默認值:None (不使用任何操作系統(tǒng));Off Chip Code memory用以確定系統(tǒng)擴展 ROM勺地址范圍,Off Chip xData memory 組用于 確定系統(tǒng)擴展RAM的地址范圍,這些選擇項必須根據(jù)所用硬件來決定,由于該例是 單片應用,未進行任何擴展,所以均不重新選擇,按默認值設置。設置對話框中的OutPut頁面,如圖6所示,這里面也有多個選擇項,其中Creat Hex file用于生成可執(zhí)行代碼文件(可以用編程器寫入單片機芯片的 HEX格式文件, 文件的擴展名為

15、.HEX),默認情況下該項未被選中,如果要寫片做硬件實驗,就必 須選中該項,這一點是初學者易疏忽的,在此特別提醒注意。選中Debug in formation 將會產生調試信息,這些信息用于調試,如果需要對程序進行調試,應當選中該項。 Browse in formation 是產生瀏覽信息,該信息可以用菜單 view-Browse來查看, 這里取默認值。按鈕“ Select Folder for objects ”是用來選擇最終的目標文件 所在的文件夾,默認是與工程文件在同一個文件夾中。Nameof Executable用于指定最終生成的目標文件的名字,默認與工程的名字相同,這兩項一般不需要更

16、改。圖6圖6對輸出進行控制工程設置對話框中的其它各頁面與 C51編譯選項、A51的匯編選項、BL51連接器 的連接選項等用法有關,這里均取默認值,不作任何修改。以下僅對一些有關頁面 中常用的選項作一個簡單介紹。List ing 標簽頁用于調整生成的列表文件選項。在匯編或編譯完成后將產生(*st )的列表文件,在連接完成后也將產生(*.m51)的列表文件,該頁用于對 列表文件的內容和形式進行細致的調節(jié),其中比較常用的選項是“C CompileListing ”下的“ Assamble Code項,選中該項可以在列表文件中生成C語言源程序所對應的匯編代碼。圖7代碼生成控制C51標簽頁用于對Keil

17、的C51編譯器的編譯過程進行控制,其中比較常用的是“Code Optimization ”組,如圖7所示,該組中Level是優(yōu)化等級,C51在對源程 序進行編譯時,可以對代碼多至9級優(yōu)化,默認使用第8級,一般不必修改,如果在 編譯中出現(xiàn)一些問題,可以降低優(yōu)化級別試一試。Emphasis是選擇編譯優(yōu)先方式,第一項是代碼量優(yōu)化(最終生成的代碼量?。?;第二項是速度優(yōu)先(最終生成的代 碼速度快);第三項是缺省。默認的是速度優(yōu)先,可根據(jù)需要更改。I treat | Output | Li stiikf C51| K51| B151 Loztm | BL51 Mi sc |9TreprO:essor Sy

18、mbolsifia: T)define: |b: CflmmorL Lail mrginjnphasii: pavor execution speedJjCsde OptimLEitLonWurm rtf iwAiikgLevel 2Bill Io und for 1at p彳 |廠 Global gi star Col oringDfln t al solute r-egs s ter accesses心 Interrispt vct cpts at a OwOOtlO 廠 Kg ep varia-bles in. ordarR Enable AH5I integer pronotion r

19、ulIn eludePathsMi. s cControlsCompiltir control stri ngEROE DEBUG OSJZCnnEND確定|j取消j圖7設置完成后按確認返回主界面,工程文件建立、設置完畢、編譯、連接圖9正確編譯、連接之后的結果圖8有關編譯、連接、項目設置的工具條在設置好工程后,即可進行編譯、連接。選擇菜單Project-Build target ,對當前工程進行連接,如果當前文件已修改,軟件會先對該文件進行編譯,然后再 連接以產生目標代碼;如果選擇Rebuild All target files將會對當前工程中的所有文件重新進行編譯然后再連接,確保最終生產的目

20、標代碼是最新的,而 Tran slate.項則僅對該文件進行編譯,不進行連接。以上操作也可以通過工具欄按鈕直接進行。 圖8是有關編譯、設置的工具欄按鈕, 從左到右分別是:編譯、編譯連接、全部重建、停止編譯和對工程進行設置。麟閤闔厲除卜址云13編譯過程中的信息將出現(xiàn)在輸出窗口中的Build頁中,如果源程序中有語法錯誤,會有錯誤報告出現(xiàn),雙擊該行,可以定位到出錯的位置,對源程序反復修改之 后,最終會得到如圖9所示的結果,提示獲得了名為的文件,該文件即可被編程器 讀入并寫到芯片中,同時還產生了一些其它相關的文件,可被用于Keil的仿真與調試,這時可以進入下一步調試的工作。Build target T

21、arget 11linking creating h&z file from ezaml. - Error (s) , 0 Warn in g (呂)-用訂11 R航陽斤 Cdiwinsnil 入 Find iri Files J|圖9教程錄入:平凡責任編輯:平凡上一篇教程:下一篇教程:Keil的調試命令、在線匯編與斷點設置作者:教程來源:本站原創(chuàng)點擊數(shù):2100 更新時間:2008-7-24l; tJ :上一講中我們學習了如何建立工程、匯編、連接工程,并獲得目標代碼,但是 做到這一步僅僅代表你的源程序沒有語法錯誤,至于源程序中存在著的其它錯誤, 必須通 過調試才能發(fā)現(xiàn)并解決,事實上,除了極簡

22、單的程序以外,絕大部份的程 序都要通過反復調試才能得到正確的結果,因此,調試是軟件開發(fā)中重要的一個環(huán) 節(jié),這一 講將介紹常用的調試命令、利用在線匯編、各種設置斷點進行程序調試 的方法,并通過實例介紹這些方法的使用。一、常用調試命令在對工程成功地進行匯編、連接以后,按Ctrl+F5或者使用菜單 Debug-Start/Stop Debug Session即可進入調試狀態(tài),Keil內建了一個仿真 CPU用來模擬執(zhí)行程序,該仿真 CPU功能強大,可以在沒有硬件和仿真機的情況下進 行程序的調試,下面將要學的就是該模擬調試功能。不過在學習之前必須明確,模 擬畢竟只是模擬,與真實的硬件執(zhí)行程序肯定還是有區(qū)

23、別的,其中最明顯的就是時序,軟件模擬是不可能和真實的硬件具有相同的時序的,具體的表現(xiàn)就是程序執(zhí) 行的速度和各人使用的計算機有關,計算機性能越好,運行速度越快。圖1調試工具條進入調試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化,Debug菜單項中原來不能用的命令現(xiàn)在已可以使用了,工具欄會多出一個用于運行和調試的工具條,如圖 1所示,Debug菜單上的大部份命令可以在此找到對應的快捷按鈕,從左到右依次是復位、運行、暫停、單步、過程單步、執(zhí)行完當前子程序、運行到當前行、下一狀 態(tài)、打開跟蹤、觀察跟蹤、反匯編窗口、觀察窗口、代碼作用范圍分析、1#串行窗口、內存窗口、性能分析、工具按鈕等命令。|F a ?%L

24、1J玉圖1調試工具條圖2調試窗口學 習程序調試,必須明確兩個重要的概念,即單步執(zhí)行與全速運行。全速執(zhí)行 是指一行程序執(zhí)行完以后緊接著執(zhí)行下一行程序,中間不停止,這樣程序執(zhí)行的速 度很 快,并可以看到該段程序執(zhí)行的總體效果,即最終結果正確還是錯誤,但如 果程序有錯,則難以確認錯誤出現(xiàn)在哪些程序行。單步執(zhí)行是每次執(zhí)行一行程序, 執(zhí)行完 該行程序以后即停止,等待命令執(zhí)行下一行程序,此時可以觀察該行程序 執(zhí)行完以后得到的結果,是否與我們寫該行程序所想要得到的結果相同,借此可以 找到程序 中問題所在。程序調試中,這兩種運行方式都要用到。使用菜單STEP或相應的命令按鈕或使用快捷鍵 F11可以單步執(zhí)行程序

25、,使用菜 單STEP OVE或功能鍵F10可以以過程單步形式執(zhí)行命令,所謂過程單步,是指將 匯編語言中的子程序或高級語言中的函數(shù)作為一個語句來全速執(zhí)行。按下F11鍵,可以看到源程序窗口的左邊出現(xiàn)了一個黃色調試箭頭,指向源程 序的第一行,如圖2所示。每按一次F11,即執(zhí)行該箭頭所指程序行,然后箭頭指向 下一行,當箭頭指向LCALL DELAY行時,再次按下F11,會發(fā)現(xiàn),箭頭指向了 延時子程序DELAY勺第一行。不斷按F11鍵,即可逐步執(zhí)行延時子程序。jJj(J件實例載惻J.期世取反.如果懐植接有皺光二極轡則二根管閃煉笈光;作者:1UIN:CPLPl.OLCALLDELAYAJF1HAINDEL

26、AY:K07R7,#0FFHD1:MOVR6,d2eiid|DJNZRETR7,D1圖2單步執(zhí)行通過單步執(zhí)行程序,可以找出一些問題的所在,但是僅依靠單步執(zhí)行來查錯有 時是困難的,或雖能查出錯誤但效率很低,為此必須輔之以其它的方法,如本例中 的延時程序是通過將 D2: DJNZ R6,D2這一行程序執(zhí)行六萬多次來達到延時的目 的,如果用按F11六萬多次的方法來執(zhí)行完該程序行,顯然不合適,為此,可以采 取以下一些方法,第一,用鼠標在子程序的最后一行(ret )點一下,把光標定位于該行,然后用菜單Debug-Runto Cursor line (執(zhí)行到光標所在行),即可全速 執(zhí)行完黃色箭頭與光標之間

27、的程序行。第二,在進入該子程序后,使用菜單 Debug-Step Out of Curre nt Fun ction(單步執(zhí)行到該函數(shù)外),使用該命令后,即全速執(zhí)行完調試光標所在的子程序或子函數(shù)并指向主程序中的下一行程序(這里 是JMP LOOF行) o第三種方法,在開始調試的,按 F10而非F11,程序也將單步執(zhí) 行,不同的是,執(zhí)行到lcall delay 行時,按下F10鍵,調試光標不進入子程序 的內部,而是全速執(zhí)行完該子程序,然后直接指向下一行“JMPLOOP。靈活應用這幾種方法,可以大大提高查錯的效率。二、在線匯編圖3在線匯編窗口在進入Keil的調試環(huán)境以后,如果發(fā)現(xiàn)程序有錯,可以直接

28、對源程序進行修改, 但是要使修改后的代碼起作用,必須先退出調試環(huán)境,重新進行編譯、連接后再次 進入調試,如果只是需要對某些程序行進行測試,或僅需對源程序進行臨時的修改, 這樣的過程未免有些麻煩,為此 Keil軟件提供了在線匯編的能力,將光標定位于 需要修改的程序行上,用菜單Debug-Inline Assambly即可出現(xiàn)如圖3的對話框, 在Enter New后面的編緝框內直接輸入需更改的程序語句,輸入完后鍵入回車將自 動指向下一條語句,可以繼續(xù)修改,如果不再需要修改,可以點擊右上角的關閉按 鈕關閉窗口。Inline AssemblerCurrent Instructi dn: (C OkOO

29、OE BEFE DJUZDE CC; QQQE)Current Assembly |c :OkOOOE圖3在線匯編三、斷點設置程序調試時,一些程序行必須滿足一定的條件才能被執(zhí)行到(如程序中某變量 達到一定的值、按鍵被按下、串口接收到數(shù)據(jù)、有中斷產生等),這些條件往往是異步發(fā) 生或難以預先設定的,這類問題使用單步執(zhí)行的方法是很難調試的,這時 就要使用到程序調試中的另一種非常重要的方法一一斷點設置。斷點設置的方法有 多種,常 用的是在某一程序行設置斷點,設置好斷點后可以全速運行程序,一旦 執(zhí)行到該程序行即停止,可在此觀察有關變量值,以確定問題所在。在程序行設置 /移除斷點的方法是將光標定位于需要設

30、置斷點的程序行,使用菜單Debug-In sert/Remove BreakPoi nt 設置或移除斷點(也可以用鼠標在該行雙擊實 現(xiàn)同樣的功能);Debug-Enable/Disable Breakpoint是開啟或暫停光標所在行的斷點功能; Debug-Disable All Breakpoi nt暫停所有斷點;Debug-Kill AllBreakPoi nt清除所有的斷點設置。這些功能也可以用工具條上的快捷按鈕進行設 置。除了在某程序行設置斷點這一基本方法以外, Keil軟件還提供了多種設置斷點 的方法,按Debug-Breakpoints即出現(xiàn)一個對話框,該對話框用于對斷點進行詳 細

31、的設置,如圖4所示。圖4中Expression后的編緝框內用于輸入表達式,該表達式用于確定程序停止 運行的條件,這里表達式的定義功能非常強大,涉及到Keil內置的一套調試語法,這里不作詳細說明,僅舉若干實例,希望讀者可以舉一反三。圖4斷點表達式1) 在Experssion中鍵入a=0xf7,再點擊Define即定義了一個斷點,注意,a后有兩個等號,意即相等。該表達式的含義是:如果a的值到達0xf7則停止程序運行。除使用相等符號之外,還可以使用,=,=,!=(不等于),&(兩值按位與),& (兩值相與)等運算符號。2) 在Experssion后中鍵入Delay再點擊Define,其含義是如果執(zhí)行

32、標號為 Delay的行則中斷。3)圖4斷點設置對話框在Experssion后中鍵入Delay,按Count后的微調按鈕,將值調到3,其意義 是當?shù)谌螆?zhí)行到Delay時才停止程序運行。4) 在 Experssi on 后鍵入 Delay,在 Comma nd后鍵入 printf(“ SubRouti ne Delay has been Called n”)主程序每次調用 Delay程序時并不停止運 行,但會在輸出窗口 Comman頁輸出一行字符,即SubRoutine Delay has been Called。其中“ n”的用途是回車換行,使窗口輸出的字符整齊。5) 設置斷點前先在輸出窗口的

33、 Comman頁中鍵入DEFINE int I,然后在斷點設置時同 4),但是 Commar后鍵入 printf(“SubRoutine Delay has beenCalled %dn”,+l ),則主程序每次調用 Delay時將會在Comman窗口輸出該字符及被調用的次數(shù),如SubRout ine Delay has bee n Called10 times。對于使用C源程序語言的調試,表達式中可以直接使用變量名,但必須要注意, 設置時只能使用全局變量名和調試箭頭所指模塊中的局部變量名。四、實例調試為進行程序的調試,我們首先給源程序制造一個錯誤,將延時子程序的第三行 D2 DJNZ R6,

34、D2)后的D2改為D1,而將下一行的D1改為D2,然后重新編譯, 這樣并無語法錯誤,所以不會有任何出錯提示,但由于轉移目的地出錯,所以子程 序將陷入無限循環(huán)中。進入調試狀態(tài)后,按 F10以過程單步的形式執(zhí)行程序,當執(zhí)行到LCALL DELAY行時,程序不能繼續(xù)往下執(zhí)行,同時發(fā)現(xiàn)調試工具條上的Halt按鈕變成了紅色,說明程序在此不斷地執(zhí)行著,而我們預期這一行程序也將執(zhí)行完后停止,這個結果 與預期不同,可以看出調用的子程序出了差錯。為查明出錯原因,按Halt按鈕使程序停止執(zhí)行,然后按RST按鈕使程序復位,再次按下F10單步執(zhí)行,但在執(zhí)行到 LCALLDELAY亍時,改按F11鍵跟蹤到子程序內部(如

35、果按下 F11鍵沒有反應,請在 源程序窗口中用鼠標點一下),單步執(zhí)行程序,可以發(fā)現(xiàn)在執(zhí)行到D2:DJNZ R6,D2行時,程序不斷地從這一行轉移到上一行,同時觀察左側的寄存器的值,會發(fā)現(xiàn) R6 的值始終在FFH和FEH之間變化,不會減小,而我們的預期是R6的值不斷減小,減 到0后往下執(zhí)行,因此這個結果與預期不符,通過這樣的觀察,不難發(fā)現(xiàn)問題是因 為標號寫錯而產生的,發(fā)現(xiàn)問題即可以修改,為了驗證即將進行的修改是否正確, 可以先使用在線匯編功能測試一下。把光標定位于程序行D2: DJNZR6Q1,打開在線匯編的對話框,將程序改為 DJNZ R7,D2,回車后再鍵入DJNZ R6,D1,然 后關閉窗

36、口,再進行調試,發(fā)現(xiàn)程序能夠正確地執(zhí)行了,這說明修改是正確的。注 意,這時候的源程序并沒有修改,此時應該退出調試程序,將源程序更改過來,并 重新編譯連接,以獲得正確的目標代碼。教程錄入:平凡責任編輯:平凡上一篇教程:下一篇教程:Keil程序調試窗口作者:教程來源:本站原創(chuàng)點擊數(shù):2720更新時間:2008-7-24Tj ;上一講中我們學習了幾種常用的程序調試方法,這一講中將介紹Keil提供各種窗口如輸出窗口、觀察窗口、存儲器窗口、反匯編窗口、串行窗口等的用途,以及 這些窗口的使用方法,并通過實例介紹這些窗口在調試中的使用。一、程序調試時的常用窗口Keil軟件在調試程序時提供了多個窗口,主要包括

37、輸出窗口(Output WindowS、 觀察窗口( Watch&Call Statck Win dows、存儲器窗口( Memory Win do W、反匯編 窗口( Dissambly Window、串行窗口( Serial Window、等。進入調試模式后,可 以通過菜單View下的相應命令打開或關閉這些窗口。圖1是輸出窗口、觀察窗口和存儲器窗口,各窗口的大小可以使用鼠標調整。進 入調試程序后,輸出窗口自動切換到 Command。該頁用于輸入調試命令和輸出調 試信息。對于初學者,可以暫不學習調試命令的使用方法。圖1輸出窗口、觀察窗口和存儲器窗口圖1調試窗口(命令窗口、存儲器窗口、觀察窗口

38、)1、存儲器窗口圖2存儲器數(shù)值各種方式顯示選擇存儲器窗口中可以顯示系統(tǒng)中各種內存中的值,通過在Address后的編緝框內輸入“字母:數(shù)字”即可顯示相應內存值,其中字母可以是C D I、X,分別代表代碼存儲空間、直接尋址的片內存儲空間、間接尋址的片內存儲空間、擴展的外部 RAM空間,數(shù)字代表想要查看的地址。例如輸入D: 0即可觀察到地址0開始的片內RAM單元值、鍵入C: 0即可顯示從0開始的ROM單元中的值,即查看程序的二進制 代碼。該窗口的顯示值可以以各種形式顯示,如十進制、十六進制、字符型等,改 變顯示方式的方法是點鼠標右鍵,在彈出的快捷菜單中選擇,該菜單用分隔條分成三部份,其中第一部份與第

39、二部份的三個選項為同一級別,選中第一部份的任一 選項,內容將以整數(shù)形式顯示,而選中第二部份的Ascii項則將以字符型式顯示,選中Float項將相鄰四字節(jié)組成的浮點數(shù)形式顯示、選中Double項則將相鄰8字節(jié)組成雙精度形式顯示。第一部份又有多個選擇項,其中Decimal項是一個開關,如果選中該項,則窗口中的值將以十進制的形式顯示,否則按默認的十六進制方式顯 示。Un sig ned和Sig ned后分別有三個選項:Char、Int、Lo ng,分別代表以單字節(jié) 方式顯示、將相鄰雙字節(jié)組成整型數(shù)方式顯示、將相鄰四字節(jié)組成長整型方式顯示, 而Un sig ned和Sig ned則分別代表無符號形式和有符號形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論