版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)仿真實(shí)驗(yàn)講解單片機(jī)仿真實(shí)驗(yàn)講解太原科技大學(xué)機(jī)電教研室劉暢單片機(jī)仿真單片機(jī)仿真l為什么要進(jìn)行單片機(jī)仿真l硬件仿真和軟件仿真有何區(qū)別l軟件仿真軟件使用說(shuō)明 早期的單片機(jī)內(nèi)部沒(méi)有ROM,比如8031、8032,這種單片機(jī)只能外部擴(kuò)展紫外擦除的EPROM存儲(chǔ)器,就是芯片上帶窗口的ROM。紫外擦除的ROM需要用紫外燈照射較長(zhǎng)時(shí)間(10分鐘或者更多)才能擦掉芯片中的內(nèi)容以便寫(xiě)入新的程序。還有的單片機(jī)內(nèi)部ROM是一次寫(xiě)入成型的,比如8751,程序?qū)懭雴纹瑱C(jī)的ROM之后就不能被擦除。因此,如果這樣直接用單片機(jī)來(lái)調(diào)試,怎么調(diào)試呢?把程序?qū)懭隦OM然后運(yùn)行,出問(wèn)題了就修改程序在寫(xiě)道ROM中再運(yùn)行?但寫(xiě)一次R
2、OM需要不少時(shí)間,如果是8751單片機(jī),寫(xiě)一次程序不對(duì),那這個(gè)單片機(jī)就報(bào)廢了,而當(dāng)時(shí)的單片機(jī)價(jià)格比較貴。因此出現(xiàn)了仿真器,這仿真器用RAM當(dāng)充當(dāng)單片機(jī)的程序存儲(chǔ)器,這樣就可以快速的反復(fù)寫(xiě)入程序進(jìn)行運(yùn)行測(cè)試,通過(guò)插入其他代碼來(lái)觀察寄存器和RAM中數(shù)據(jù)的變化,以判斷程序運(yùn)行是否正確。這樣就可以高效快速的設(shè)計(jì)程序了。 仿真的概念其實(shí)使用非常廣,最終的含義就是使用可控的手段來(lái)模仿真實(shí)的情況。 在嵌入式系統(tǒng)的設(shè)計(jì)中,仿真應(yīng)用的范圍主要集中在對(duì)程序的仿真上。例如,在單片機(jī)的開(kāi)發(fā)過(guò)程中,程序的設(shè)計(jì)是最為重要的但也是難度最大的。一種最簡(jiǎn)單和原始的開(kāi)發(fā)流程是:編寫(xiě)程序燒寫(xiě)芯片驗(yàn)證功能,這種方法對(duì)于簡(jiǎn)單的小系統(tǒng)是
3、可以對(duì)付的,但在大系統(tǒng)中使用這種方法則是完全不可能的。為什么要進(jìn)行單片機(jī)仿真?為什么要進(jìn)行單片機(jī)仿真? 一些有經(jīng)驗(yàn)的工程師在開(kāi)發(fā)中不使用或很少仿真器。他們是如何解決程序開(kāi)發(fā)中遇到的問(wèn)題呢?(1) 根據(jù)自己的設(shè)計(jì)建立一個(gè)符合要求的硬件平臺(tái),如果該平臺(tái)涉及的程序比較復(fù)雜,還要搭建一個(gè)人機(jī)交流的通道。人機(jī)交流通道可能是一個(gè)簡(jiǎn)單的發(fā)光二極管,蜂鳴器,復(fù)雜的可能是串口通訊口,LCD顯示屏。(2) 寫(xiě)一個(gè)最簡(jiǎn)單的程序,例如只是將發(fā)光二極管連續(xù)的閃爍。程序編譯后燒寫(xiě)到單片機(jī)芯片中,驗(yàn)證硬件平臺(tái)是否工作正常。(3) 硬件平臺(tái)正常工作后編寫(xiě)系統(tǒng)最低層的驅(qū)動(dòng)程序,每次程序更改后都重新燒寫(xiě)單片機(jī)芯片驗(yàn)證。如果在程序
4、驗(yàn)證中遇到問(wèn)題,則可能在程序中加入一些調(diào)試手段,例如通過(guò)串口發(fā)送一些信息到 PC 端的超級(jí)終端上,用于了解程序的運(yùn)行情況。(4) 系統(tǒng)低層驅(qū)動(dòng)程序完成后再編寫(xiě)用戶框架程序,由于這部分已經(jīng)不涉及到硬件部分,所以程序中的問(wèn)題用戶一般能夠發(fā)現(xiàn)。 但是更多的調(diào)查表明,使用以上方法的工程師總的看來(lái)所設(shè)計(jì)的程序不是很龐大或很復(fù)雜。因?yàn)樵谧龊?jiǎn)單的項(xiàng)目時(shí),我們可以通過(guò)一個(gè)發(fā)光二極管就可以表達(dá)出內(nèi)部的信息;如果程序復(fù)雜,可能需要更多的信息來(lái)表示內(nèi)部的狀態(tài),這樣可能就需要串口協(xié)助調(diào)試;如果程序更復(fù)雜,硬件更多,實(shí)時(shí)性更強(qiáng),那工程師就要更多的增強(qiáng)調(diào)試手段,串口可能就不能滿足了,需要類似于斷點(diǎn)的功能,因?yàn)槿藗兿胫涝?/p>
5、某一個(gè)時(shí)刻單片機(jī)內(nèi)部的狀態(tài)究竟是怎樣? 如果用戶程序的修改非常頻繁,可能一次又一次地的燒寫(xiě)芯片占用的時(shí)間就很多,這時(shí)用戶就會(huì)想能下載程序并運(yùn)行的裝置。到這里,您會(huì)看到,隨著用戶要求的越來(lái)越高,調(diào)試裝置已經(jīng)越來(lái)越象一個(gè)通用的仿真器了。因此不要回避使用仿真器,因?yàn)槭褂梅抡嫫髂芴岣吣拈_(kāi)發(fā)速度。 仿真的種類軟件仿真:這種方法主要是使用計(jì)算機(jī)軟件來(lái)模擬運(yùn)行實(shí) 際的單片機(jī)運(yùn)行,因此仿真與硬件無(wú)關(guān)的系統(tǒng) 具有一定的優(yōu)點(diǎn)。用戶不需要搭建硬件電路就 可以對(duì)程序進(jìn)行驗(yàn)證,特別適合于偏重算法的 程序。軟件仿真的缺點(diǎn)是無(wú)法完全仿真與硬件 相關(guān)的部分,因此最終還要通過(guò)硬件仿真來(lái)完 成最終的設(shè)計(jì)。硬件仿真:使用附加的硬
6、件來(lái)替代用戶系統(tǒng)的單片機(jī)并完 成單片機(jī)全部或大部分的功能,使用了附加硬 件后用戶就可以對(duì)程序的運(yùn)行進(jìn)行控制,例如 單步,全速,查看資源,斷點(diǎn)等。硬件仿真是 開(kāi)發(fā)過(guò)程中所必須的。 硬件仿真硬件仿真是通過(guò)硬件和相應(yīng)的軟件對(duì)單片機(jī)進(jìn)行仿真,可以直接接在用戶板上運(yùn)行程序,還可以進(jìn)行程序調(diào)試(單步、斷點(diǎn)等),它不需要每次修改程序都燒寫(xiě)芯片,更沒(méi)有來(lái)回拆、裝芯片的麻煩,是學(xué)習(xí)單片機(jī)極其方便的工具。不過(guò)一般情況下,價(jià)格較高。單片機(jī)仿真軟件單片機(jī)仿真軟件1.Proteus Proteus 是由英國(guó)Labcenter electronics 公司開(kāi)發(fā)的EDA 工具軟件。它從1989 年出現(xiàn)到現(xiàn)在已經(jīng)有十多年的歷
7、史,在全球廣泛使用。Proteus 安裝以后,主要由兩個(gè)程序組成:Ares和Isis。前者主要用于PCB 自動(dòng)或人工布線及其電路仿真,后者主要采用原理布圖的方法繪制電路并進(jìn)行相應(yīng)的仿真。除了上述基本應(yīng)用之外,Proteus 革命性的功能在于它的電路仿真是互動(dòng)的,針對(duì)微處理器的應(yīng)用,可以直接在基于原理圖的虛擬原型上編程,并實(shí)現(xiàn)軟件代碼級(jí)的調(diào)試,還可以直接實(shí)時(shí)動(dòng)態(tài)地模擬 按鈕、鍵盤的輸入,LED、液晶顯示的輸出,同時(shí)配合虛擬工具如示波器、邏輯分析儀等進(jìn)行相應(yīng)的測(cè)量和觀測(cè)。 其處理器模型支持: 8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和M
8、SP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。 圖中模擬的情況是,液晶的第一行顯示預(yù)置的字符串信息圖中模擬的情況是,液晶的第一行顯示預(yù)置的字符串信息“BUPT_Information”,第二行第一列顯示當(dāng)前的按鍵值,此,第二行第一列顯示當(dāng)前的按鍵值,此時(shí)鼠標(biāo)按下了數(shù)字健時(shí)鼠標(biāo)按下了數(shù)字健“6”。當(dāng)鼠標(biāo)按下其他的健時(shí),液晶的顯。當(dāng)鼠標(biāo)按下其他的健時(shí),液晶的顯示會(huì)同步更新,示會(huì)同步更新,2.Multisim Multisim是美國(guó)國(guó)家儀器(NI)有限公司推出的以Windows為基礎(chǔ)的仿真工具,適用于板級(jí)的模擬/數(shù)字電路板的設(shè)計(jì)工作,由EWB發(fā)展而來(lái)。
9、它包含了電路原理圖的圖形輸入、電路硬件描述語(yǔ)言輸入方式,具有豐富的仿真分析能力。 工程師們可以使用Multisim交互式地搭建電路原理圖,并對(duì)電路進(jìn)行仿真。通過(guò)Multisim和虛擬儀器技術(shù),可以完成從理論到原理圖捕獲與仿真再到原型設(shè)計(jì)和測(cè)試這樣一個(gè)完整的綜合設(shè)計(jì)流程。 Multisim有超強(qiáng)板級(jí)的模擬/數(shù)字電路板的設(shè)計(jì)能力。它包含了電路原理圖的圖形輸入、電路硬件描述語(yǔ)言輸入方式,具有豐富的仿真分析能力。高版本可以進(jìn)行單片機(jī)等MCU的仿真。Multisim有實(shí)際元器件和虛擬元器件,它們之間根本差別在于:一種是與實(shí)際元器件的型號(hào)、參數(shù)值以及封裝都相對(duì)應(yīng)的元器件,在設(shè)計(jì)中選用此類器件,不僅可以使設(shè)
10、計(jì)仿真與實(shí)際情況有良好的對(duì)應(yīng)性,還可以直接將設(shè)計(jì)導(dǎo)出到Ultiboard中進(jìn)行PCB的設(shè)計(jì);虛擬元器件只能用于電路的仿真。3.Keil Keil是一個(gè)公司的名字。是由德國(guó)慕尼黑的Keil Elektronik GmbH和美國(guó)德克薩斯的Keil Software組成,現(xiàn)已被ARM公司收購(gòu)。Keil軟件是目前最流行的開(kāi)發(fā)51系列單片機(jī)的軟件。支持c語(yǔ)言,匯編語(yǔ)言編程。 Keil 軟件是目前最流行開(kāi)發(fā) MCS-51 系列單片機(jī)的軟件,這從近年來(lái)各仿真機(jī)廠商紛紛宣布全面支持 Keil 即可看出。 Keil 提供了包括 C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)
11、一個(gè)集成開(kāi)發(fā)環(huán)境( uVision)將這些部份組合在一起。運(yùn)行 Keil 軟件需要 Pentium 或以上的 CPU,16MB 或更多 RAM、20M 以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對(duì)于使用 51 系列單片機(jī)的愛(ài)好者來(lái)說(shuō)是十分必要的,如果你使用 C 語(yǔ)言編程,那么 Keil 幾乎就是你的不二之選(目前在國(guó)內(nèi)你只能買到該軟件、而你買的仿真機(jī)也很可能只支持該軟件),即使不使用 C 語(yǔ)言而僅用匯編語(yǔ)言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì)令你事半功倍。Keil的使用的使用uKeil軟件的安裝uKeil的使用u例子Keil
12、軟件的安裝軟件的安裝Keil的使用的使用一、建立一、建立KEIL工程工程 UVison 啟動(dòng)后,程序窗口的左邊有一個(gè)工程管理窗口,該窗口有 3 個(gè)標(biāo)簽,分別是Files、Regs、和 Books,這三個(gè)標(biāo)簽頁(yè)分別顯示當(dāng)前項(xiàng)目的文件結(jié)構(gòu)、 CPU 的寄存器及部份特殊功能寄存器的值(調(diào)試時(shí)才出現(xiàn))和所選 CPU 的附加說(shuō)明文件,如果是第一次啟動(dòng) Keil,那么這三個(gè)標(biāo)簽頁(yè)全是空的。1、源文件的建立、源文件的建立 使用菜單“ File-New”或者點(diǎn)擊工具欄的新建文件按鈕,即可在項(xiàng)目窗口的右側(cè)打開(kāi)一個(gè)新的文本編緝窗口,在該窗口中輸入以下匯編語(yǔ)言源程序: MOV A, #0FEH MAIN: MOV
13、P1, A RL A LCALL DELAY AJMP MAIN DELAY: MOV R7,#255 D1: MOV R6,#255 DJNZ R6,$ DJNZ R7,D1 RET END 保存該文件,注意必須加上擴(kuò)展名(匯編語(yǔ)言源程序一般用 asm 或 a51 為擴(kuò)展名),這里假定將文件保存為 exam1.asm。需要說(shuō)明的是,源文件就是一般的文本文件,不一定使用 Keil 軟件編寫(xiě),可以使用任意文本編緝器編寫(xiě).2、建立工程文件、建立工程文件 在項(xiàng)目開(kāi)發(fā)中,并不是僅有一個(gè)源程序就行了,還要為這個(gè)項(xiàng)目選擇 CPU( Keil 支持?jǐn)?shù)百種 CPU,而這些 CPU 的特性并不完全相同),確定編
14、譯、匯編、連接的參數(shù),指定調(diào)試的方式,有一些項(xiàng)目還會(huì)有多個(gè)文件組成等,為管理和使用方便, Keil 使用工程( Project)這一概念,將這些參數(shù)設(shè)置和所需的所有文件都加在一個(gè)工程中, 只能對(duì)工程而不能對(duì)單一源程序進(jìn)行編譯(匯編)和連接等操作。 點(diǎn)擊“ Project-New Project ”菜單,出現(xiàn)一個(gè)對(duì)話框,要求給將要建立的工程起一個(gè)名字,你可以在編緝框中輸入一個(gè)名字(設(shè)為 exam1),不需要擴(kuò)展名。點(diǎn)擊 “保存”按鈕,出現(xiàn)第二個(gè)對(duì)話框,如圖所示,這個(gè)對(duì)話框要求選擇目標(biāo) CPU (即你所用芯片的型), Keil 支持的 CPU很多,我們選擇 Atmel 公司的 89C51 芯片。點(diǎn)
15、擊ATMEL 前面的“ +”號(hào),展開(kāi)該層,點(diǎn)擊其中的 89C51,然后再點(diǎn)擊“確定”按鈕,回到主界面. 工程窗口的文件頁(yè)中,出現(xiàn)了“ Target1”,前面有“ +”號(hào),點(diǎn)擊“ +”號(hào)展開(kāi),可以看到下一層的“ Source Group1”,這時(shí)的工程還是一個(gè)空的工程,里面什么文件也沒(méi)有,需要手動(dòng)把剛才編寫(xiě)好的源程序加入,點(diǎn)擊“ Source Group1”使其反白顯示,然后,點(diǎn)擊鼠標(biāo)右鍵,出現(xiàn)一個(gè)下拉菜單,如圖所示。選中其中的“ Add file to Group” Source Group1”,出現(xiàn)一個(gè)對(duì)話框,要求尋找源文件,注意,該對(duì)話框下面的“文件類型” 默認(rèn)為 C source fil
16、e(*.c),也就是以 C 為擴(kuò)展名的文件,而我們的文件是以 asm 為擴(kuò)展名的,所以在列表框中找不到 exam1.asm,要將文件類型改掉,點(diǎn)擊對(duì)話框中“文件類型”后的下拉列表,找到并選中“ Asm Source File(*.a51,*.asm),這樣,在列表框中就可以找到 exam1.asm 文件. 雙擊 exam1.asm 文件,將文件加入項(xiàng)目,注意,在文件加入項(xiàng)目后,該對(duì)話框并不消失,等待繼續(xù)加入其它文件,但初學(xué)時(shí)常會(huì)誤認(rèn)為操作沒(méi)有成功而再次雙擊同一文件,這時(shí)會(huì)出現(xiàn)如圖所示的對(duì)話框,提示你所選文件已在列表中,此時(shí)應(yīng)點(diǎn)擊 “確定”,返回前一對(duì)話框,然后點(diǎn)擊“ Close”即可返回主界面
17、,返回后,點(diǎn)擊“ Source Group 1”前的加號(hào),會(huì)發(fā)現(xiàn) exam1.asm 文件已在其中。雙擊文件名,即打開(kāi)該源程序。二、工程的詳細(xì)設(shè)置二、工程的詳細(xì)設(shè)置 首先點(diǎn)擊左邊 Project 窗口的 Target 1,然后使用菜單“ Project-Option for target target1 ”即出現(xiàn)對(duì)工程設(shè)置的對(duì)話框,這個(gè)對(duì)話框可謂非常復(fù)雜,共有 8 個(gè)頁(yè)面,絕大部份設(shè)置項(xiàng)取默認(rèn)值就行了。 設(shè)置對(duì)話框中的 Target 頁(yè)面,如圖 所示, Xtal 后面的數(shù)值是晶振頻率值,默認(rèn)值是所選目標(biāo) CPU 的最高可 用 頻 率 值 , 對(duì) 于 我 們 所 選 的AT89C51 而言是 2
18、4M,該數(shù)值與最終產(chǎn)生的目標(biāo)代碼無(wú)關(guān),僅用于軟件模擬調(diào)試時(shí)顯示程序執(zhí)行時(shí)間。正確設(shè)置該數(shù)值可使顯示時(shí)間與實(shí)際所用時(shí)間一致,一般將其設(shè)置成與你的硬件所用晶振頻率相同,如果沒(méi)必要了解程序執(zhí)行的時(shí)間,也可以不設(shè),這里設(shè)置為 12。 設(shè)置對(duì)話框中的 OutPut 頁(yè)面,如圖所示,這里面也有多個(gè)選擇項(xiàng),其中 Creat Hex file用于生成可執(zhí)行代碼文件(可以用編程器寫(xiě)入單片機(jī)芯片的 HEX 格式文件,文件的擴(kuò)展名為.HEX),默認(rèn)情況下該項(xiàng)未被選中,如果要寫(xiě)片做硬件實(shí)驗(yàn),就必須選中該項(xiàng),這一點(diǎn)是初學(xué)者易疏忽的,在此特別提醒注意。選中 Debug information 將會(huì)產(chǎn)生調(diào)試信息,這些信息用
19、于調(diào)試,如果需要對(duì)程序進(jìn)行調(diào)試,應(yīng)當(dāng)選中該項(xiàng)。 Browse information 是產(chǎn)生瀏覽信息,該信息可以用菜單 view-Browse 來(lái)查看,這里取默認(rèn)值。按鈕“ Select Folder for objects”圖 4 重復(fù)加入文件的錯(cuò)誤圖 5 對(duì)目標(biāo)進(jìn)行設(shè)置是用來(lái)選擇最終的目標(biāo)文件所在的文件夾,默認(rèn)是與工程文件在同一個(gè)文件夾中。 Name of Executable 用于指定最終生成的目標(biāo)文件的名字,默認(rèn)與工程的名字相同,這兩項(xiàng)一般不需要更改。工程設(shè)置對(duì)話框中的其它各頁(yè)面與 C51 編譯選項(xiàng)、 A51 的匯編選項(xiàng)、 BL51 連接器的連接選項(xiàng)等用法有關(guān),這里均取默認(rèn)值,不作任何
20、修改。三、編譯、連接三、編譯、連接 在設(shè)置好工程后,即可進(jìn)行編譯、連接。選擇菜單 Project-Build target,對(duì)當(dāng)前工程進(jìn)行連接,如果當(dāng)前文件已修改,軟件會(huì)先對(duì)該文件進(jìn)行編譯,然后再連接以產(chǎn)生目標(biāo)代碼;如果選擇 Rebuild All target files 將會(huì)對(duì)當(dāng)前工程中的所有文件重新進(jìn)行編譯然后再連接,確保最終生產(chǎn)的目標(biāo)代碼是最新的,而Translate .項(xiàng)則僅對(duì)該文件進(jìn)行編譯,不進(jìn)行連接。 以上操作也可以通過(guò)工具欄按鈕直接進(jìn)行。下圖是有關(guān)編譯、設(shè)置的工具欄按鈕,從左到右分別是:編譯、編譯連接、全部重建、停止編譯和對(duì)工程進(jìn)行設(shè)置。 編譯過(guò)程中的信息將出現(xiàn)在輸出窗口中的
21、Build 頁(yè)中,如果源程序中有語(yǔ)法錯(cuò)誤,會(huì)有錯(cuò)誤報(bào)告出現(xiàn),雙擊該行,可以定位到出錯(cuò)的位置,對(duì)源程序反復(fù)修改之后,最終會(huì)得到如圖 所示的結(jié)果,提示獲得了名為 exam1.hex 的文件,該文件即可被編程器讀入并寫(xiě)到芯片中,同時(shí)還產(chǎn)生了一些其它相關(guān)的文件,可被用于 Keil 的仿真與調(diào)試,這時(shí)可以進(jìn)入下一步調(diào)試的工作。四、四、Keil 的調(diào)試命令、在線匯編與的調(diào)試命令、在線匯編與斷點(diǎn)設(shè)置斷點(diǎn)設(shè)置 前面我們學(xué)習(xí)了如何建立工程、匯編、連接工程,并獲得目標(biāo)代碼,但是做到這一步僅僅代表你的源程序沒(méi)有語(yǔ)法錯(cuò)誤,至于源程序中存在著的其它錯(cuò)誤,必須通過(guò)調(diào)試才能發(fā)現(xiàn)并解決,事實(shí)上,除了極簡(jiǎn)單的程序以外,絕大部份
22、的程序都要通過(guò)反復(fù)調(diào)試才能得到正確的結(jié)果,因此,調(diào)試是軟件開(kāi)發(fā)中重要的一個(gè)環(huán)節(jié)1.常用調(diào)試命令常用調(diào)試命令 在對(duì)工程成功地進(jìn)行匯編、連接以后,按 Ctrl+F5 或者使用菜單 Debug-Start/Stop DebugSession 即可進(jìn)入調(diào)試狀態(tài), Keil 內(nèi)建了一個(gè)仿真 CPU 用來(lái)模擬執(zhí)行程序,該仿真 CPU 功能強(qiáng)大,可以在沒(méi)有硬件和仿真機(jī)的情況下進(jìn)行程序的調(diào)試,下面將要學(xué)的就是該模擬調(diào)試功能。不過(guò)在學(xué)習(xí)之前必須明確,模擬畢竟只是模擬,與真實(shí)的硬件執(zhí)行程序肯定還是有區(qū)別的,其中最明顯的就是時(shí)序,軟件模擬是不可能和真實(shí)的硬件具有相同的時(shí)序的,具體的表現(xiàn)就是程序執(zhí)行的速度和各人使用的
23、計(jì)算機(jī)有關(guān),計(jì)算機(jī)性能越好,運(yùn)行速度越快。 進(jìn)入調(diào)試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化, Debug 菜單項(xiàng)中原來(lái)不能用的命現(xiàn)在已可以使用了,工具欄會(huì)多出一個(gè)用于運(yùn)行和調(diào)試的工具條,如圖 所示, Debug 菜單上的大部份命令可以在此找到對(duì)應(yīng)的快捷按鈕,從左到右依次是復(fù)位、運(yùn)行、暫停、單步、過(guò)程單步、執(zhí)行完當(dāng)前子程序、運(yùn)行到當(dāng)前行、下一狀態(tài)、打開(kāi)跟蹤、觀察跟蹤、反匯編窗口、觀察窗口、代碼作用范圍分析、 1串行窗口、內(nèi)存窗口、性能分析、工具按鈕等命令。 學(xué)習(xí)程序調(diào)試,必須明確兩個(gè)重要的概念,即單步執(zhí)行與全速運(yùn)行。全速執(zhí)行是指一行程序執(zhí)行完以后緊接著執(zhí)行下一行程序,中間不停止,這樣程序執(zhí)行的速
24、度很快,并可以看到該段程序執(zhí)行的總體效果,即最終結(jié)果正確還是錯(cuò)誤,但如果程序有錯(cuò),則難以確認(rèn)錯(cuò)誤出現(xiàn)在哪些程序行。單步執(zhí)行是每次執(zhí)行一行程序,執(zhí)行完該行程序以后即停止,等待命令執(zhí)行下一行程序,此時(shí)可以觀察該行程序執(zhí)行完以后得到的結(jié)果,是否與我們寫(xiě)該行程序所想要得到的結(jié)果相同,借此可以找到程序中問(wèn)題所在。程序調(diào)試中,這兩種運(yùn)行方式都要用到。 使用菜單 STEP 或相應(yīng)的命令按鈕或使用快捷鍵 F11 可 以單步執(zhí)行程序,使用菜單 STEP OVER 或功能鍵 F10 可以 以過(guò)程單步形式執(zhí)行命令,所謂過(guò)程單步,是指將匯編語(yǔ)言 中的子程序或高級(jí)語(yǔ)言中的函數(shù)作為一個(gè)語(yǔ)句來(lái)全速執(zhí)行。 按下 F11 鍵,
25、可以看到源程序窗口的左邊出現(xiàn)了一個(gè)黃色調(diào)試箭頭,指向源程序的第一行,如圖 所示。每按一次 F11,即執(zhí)行該箭頭所指程序行,然后箭頭指向下一行,當(dāng)箭頭 指向 LCALL DELAY 行時(shí),再次按下 F11,會(huì)發(fā)現(xiàn),箭頭指向了延時(shí)子程序 DELAY 的第 一行。不斷按 F11鍵,即可逐步執(zhí)行延時(shí)子程序。 通過(guò)單步執(zhí)行程序,可以找出一些問(wèn)題的所在,但是僅依靠單步執(zhí)行來(lái)查錯(cuò)有時(shí)是困難 的,或雖能查出錯(cuò)誤但效率很低,為此必須輔之以其它的方法,如本例中的延時(shí)程序是通過(guò)將 D2: DJNZ R6,D2 這一行程序執(zhí)行六萬(wàn)多次來(lái)達(dá)到延時(shí)的目的,如果用按 F11 六萬(wàn)多次的方法來(lái)執(zhí)行完該程序行,顯然不合適,為此
26、,可以采取以下一些方法: 第一,用鼠標(biāo)在 子程序的最后一行( ret)點(diǎn)一下,把光標(biāo)定位于該行,然后用菜單 Debug-Run to Cursor line(執(zhí)行到光標(biāo)所在行),即可全速執(zhí)行完黃色箭頭與光標(biāo)之間的程序行。 第二,在進(jìn)入該子程序后,使用菜單 Debug-Step Out of Current Function(單步執(zhí)行到該函數(shù)外),使用該命令 后,即全速執(zhí)行完調(diào)試光標(biāo)所在的子程序或子函數(shù)并指向主程序中的下一行程序(這里是 JMP LOOP 行)。 第三種方法,在開(kāi)始調(diào)試的,按 F10 而非 F11,程序也將單步執(zhí)行,不同 的是,執(zhí)行到 lcall delay 行時(shí),按下 F10
27、鍵,調(diào)試光標(biāo)不進(jìn)入子程序的內(nèi)部,而是全速 執(zhí)行完該子程序,然后直接指向下一行“JMP LOOP”。靈活應(yīng)用這幾種方法,可以大大提 高查錯(cuò)的效率。2. 在線匯編在線匯編 在進(jìn)入 Keil 的調(diào)試環(huán)境以后,如果發(fā)現(xiàn)程序有錯(cuò),可以直接對(duì)源程序進(jìn)行修改,但是 要使修改后的代碼起作用,必須先退出調(diào)試環(huán)境,重新進(jìn)行編譯、連接后再次進(jìn)入調(diào)試,如 果只是需要對(duì)某些程序行進(jìn)行測(cè)試,或僅需對(duì)源程序進(jìn)行臨時(shí)的修改,這樣的過(guò)程未免有些 麻煩,為此 Keil 軟件提供了在線匯編的能力,將光標(biāo)定位于需要修改的程序行上,用菜單 Debug-Inline Assambly 即可出現(xiàn)如圖3 的對(duì)話框,在 Enter New 后
28、面的 編緝框內(nèi)直接輸入需更改的程序語(yǔ)句,輸入完后鍵入回車將自動(dòng)指向下 一條語(yǔ)句,可以繼續(xù)修改,如果不再 需要修改,可以點(diǎn)擊右上角的關(guān)閉按鈕關(guān)閉窗口。 3. 斷點(diǎn)設(shè)置斷點(diǎn)設(shè)置 程序調(diào)試時(shí),一些程序行必須滿足一定的條件才能被執(zhí)行到(如程序中某變量達(dá)到一定的值、按鍵被按下、串口接收到數(shù)據(jù)、有中斷產(chǎn)生等),這些條件往往是異步發(fā)生或難以預(yù) 先設(shè)定的,這類問(wèn)題使用單步執(zhí)行的方法是很難調(diào)試的,這時(shí)就要使用到程序調(diào)試中的另一 種非常重要的方法斷點(diǎn)設(shè)置。斷點(diǎn)設(shè)置的方法有多種,常用的是在某一程序行設(shè)置斷點(diǎn), 設(shè)置好斷點(diǎn)后可以全速運(yùn)行程序,一旦執(zhí)行到該程序行即停止,可在此觀察有關(guān)變量值,以 確定問(wèn)題所在。在程序行設(shè)
29、置/移除斷點(diǎn)的方法是將光標(biāo)定位于需要設(shè)置斷點(diǎn)的程序行,使 用菜單 Debug-Insert/Remove BreakPoint 設(shè)置或移除斷點(diǎn)(也可以用鼠標(biāo)在該行雙擊實(shí)現(xiàn)同 樣的功能);Debug-Enable/D isable Breakpoint 是開(kāi)啟或暫停光標(biāo)所在行的斷點(diǎn)功能; Debug-Disable All Breakpoint 暫停所有斷點(diǎn);Debug-Kill All BreakPoint 清除所有的斷點(diǎn)設(shè) 置。這些功能也可以用工具條上的快捷按鈕進(jìn)行設(shè)置。 除了在某程序行設(shè)置斷點(diǎn)這一基本方法以外,Keil 軟件還提供了多種設(shè)置斷點(diǎn)的方法,按 Debug-Breakpoints 即出現(xiàn)一個(gè)對(duì)話框,該對(duì)話框用于對(duì)斷點(diǎn)進(jìn)行詳細(xì)的設(shè)置,如圖所示 n 1) 在 Experssion 中鍵入 a=0 xf7,再點(diǎn)擊 Define 即定義了一個(gè)斷點(diǎn), 注意,a 后有兩 個(gè)等號(hào),意即相等。該表達(dá)式的含義是:如果 a 的值到達(dá) 0 xf7 則停止程序運(yùn)行。除使用相等符號(hào)之外,還可以使用,=,=,!=(不等于),&(兩值按位與),&(兩值相與)等運(yùn)算符號(hào)。n 2) 在 Experssion 后中鍵入 Delay 再點(diǎn)擊 Define,其含義是如果執(zhí)行標(biāo)號(hào)為 Delay 的行 則中斷。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年上半年云南旅游職業(yè)學(xué)院招聘人員(14人)備考考試試題附答案解析
- 2026年蚌埠機(jī)場(chǎng)建設(shè)投資有限公司面向社會(huì)公開(kāi)招聘工作人員招聘23人備考考試試題附答案解析
- 公廁保潔員安全生產(chǎn)制度
- 口罩生產(chǎn)規(guī)章制度
- 生產(chǎn)車間風(fēng)險(xiǎn)管理制度
- 班前安全生產(chǎn)會(huì)議制度
- 2026遼寧經(jīng)濟(jì)管理干部學(xué)院(遼寧經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院)招聘高層次和急需緊缺人才40人(第一批)備考考試試題附答案解析
- 家具生產(chǎn)工藝管理制度
- 生產(chǎn)企業(yè)小黃車管理制度
- 木制品生產(chǎn)防疫制度
- 山西省臨汾市2025-2026年八年級(jí)上物理期末試卷(含答案)
- (2025年)員工安全培訓(xùn)考試試題(含答案)
- GB/T 36132-2025綠色工廠評(píng)價(jià)通則
- 2025-2026學(xué)年北師大版八年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)卷(含答案)
- 2025年艾滋病培訓(xùn)試題與答案(全文)
- 【二下數(shù)學(xué)】計(jì)算每日一練60天(口算豎式脫式應(yīng)用題)
- 殘疾人服務(wù)與權(quán)益保護(hù)手冊(cè)(標(biāo)準(zhǔn)版)
- 車隊(duì)春節(jié)前安全培訓(xùn)內(nèi)容課件
- 云南師大附中2026屆高三高考適應(yīng)性月考卷(六)歷史試卷(含答案及解析)
- PCR技術(shù)在食品中的應(yīng)用
- 輸液滲漏處理課件
評(píng)論
0/150
提交評(píng)論