原文:http://www./article-157-1.html 20.4.1 常用調(diào)試命令 在對(duì)工程成功地進(jìn)行編譯(匯編)、連接以后,,在主菜單中打開(kāi)“調(diào)試”欄,,點(diǎn)擊“開(kāi)始/停止調(diào)試模式”,即可進(jìn)入軟件模擬仿真調(diào)試狀態(tài),,Keil C51內(nèi)建了一個(gè)仿真CPU用來(lái)模擬執(zhí)行程序,該仿真CPU功能非常強(qiáng)大,,可以在沒(méi)有硬件和仿真器的情況下進(jìn)行單片機(jī)開(kāi)發(fā)程 序的調(diào)試,,但是在時(shí)序上,軟件模擬仿真是達(dá)不到硬件的時(shí)序的,。進(jìn)入調(diào)試狀態(tài)后,,“調(diào)試”欄菜單項(xiàng)中原來(lái)不能用的命令現(xiàn)在已經(jīng)可以使用了?!罢{(diào)試”欄菜單上 的大部分命令可以在調(diào)試界面上找到對(duì)應(yīng)的快捷按鈕,,從左到右依次是復(fù)位、運(yùn)行,、暫停,、單步,、單步跳過(guò)、執(zhí)行完當(dāng)前子程序,、運(yùn)行到當(dāng)前行,、下一狀態(tài)、打開(kāi)跟 蹤,、觀察跟蹤,、反匯編窗口、觀察窗口,、代碼作用范圍分析,、1#串行窗口、內(nèi)存窗口,、性能分析,、工具按鈕等單片機(jī)培訓(xùn)命令(圖20-17)。 圖20-17 軟件模擬仿真調(diào)試狀態(tài) 使用菜單“單步到之外”或相應(yīng)命令或 功能鍵F10可以用“單步跳過(guò)”形式執(zhí)行命令,,所謂“單步跳過(guò)”,,是指將匯編語(yǔ)言中的子程序或高級(jí)語(yǔ)言中的函數(shù)作為一個(gè)語(yǔ)句一步執(zhí)行完。使用菜單“單步” 或相應(yīng)的命令按鈕或使用快捷鍵F11可以單步執(zhí)行程序(即一條一條語(yǔ)句執(zhí)行),,通過(guò)單步執(zhí)行程序,,可以找出一些問(wèn)題的所在,但是僅依靠單步執(zhí)行來(lái)查錯(cuò)效率 較低,。 20.4.2 斷點(diǎn)設(shè)置 程序調(diào)試時(shí),,一些程序行必須滿足一定的單片機(jī)i學(xué)習(xí)條 件才能被執(zhí)行到(如程序中某變量達(dá)到一定的值、按鍵被按下,、串口接收到數(shù)據(jù),、有中斷產(chǎn)生等),這些條件往往是異步發(fā)生或難以預(yù)先設(shè)定的,,這類(lèi)問(wèn)題使用單步 執(zhí)行的方法是很難調(diào)試的,,這時(shí)就要使用到程序調(diào)試中的另一種非常重要的方法:斷點(diǎn)設(shè)置。斷點(diǎn)設(shè)置的方法有多種,,常用的是在某一程序行設(shè)置斷點(diǎn)(圖 20-18),,設(shè)置好斷點(diǎn)后可以全速運(yùn)行程序,一旦執(zhí)行到該程序行即停止,,可在此時(shí)觀察有關(guān)變量值,,以確定問(wèn)題所在。在程序行設(shè)置/移除斷點(diǎn)的方法是將光 標(biāo)定位于需要設(shè)置斷點(diǎn)的程序行,,使用菜單:“調(diào)試>設(shè)置/取消斷點(diǎn)”設(shè)置或移除斷點(diǎn),,也可以用鼠標(biāo)在該行雙擊實(shí)現(xiàn)同樣的功能;另外“使能/禁止斷 點(diǎn)”用來(lái)開(kāi)啟或暫停光標(biāo)所在行的斷點(diǎn)功能,;其它還有“禁止所有斷點(diǎn)”,、“取消所有斷點(diǎn)”等設(shè)置,。這些功能也可以用工具條上的快捷按鈕進(jìn)行單片機(jī)匯編語(yǔ)言設(shè)置。 圖20-18 斷點(diǎn)設(shè)置 20.4.3 在線匯編 在進(jìn)入Keil C51的調(diào)試環(huán)境以后,,若發(fā)現(xiàn)程序有錯(cuò),,可以直接對(duì)源程序進(jìn)行修改,但是要使修改后的代碼起作用,,必須先退出調(diào)試環(huán)境,,重新進(jìn)行單片機(jī)C語(yǔ)言教程編 譯、連接后再次進(jìn)入調(diào)試,。如果調(diào)試時(shí)只是需要對(duì)某些程序行進(jìn)行臨時(shí)的試驗(yàn)修改(如修改參數(shù)以得到所需的延時(shí)時(shí)間),,那么這樣的重復(fù)過(guò)程顯得太麻煩,為此 Keil C51軟件提供了在線匯編的能力,。將光標(biāo)定位于需要修改的程序行上,,用菜單“調(diào)試>在線匯編”即可出現(xiàn)如圖20-19所示的對(duì)話框,在“輸入新指 令”后面的編緝框內(nèi)直接輸入需更改的程序語(yǔ)句,,輸入完后鍵入回車(chē)將自動(dòng)指向下一條語(yǔ)句,,可以繼續(xù)修改。如果不再需要修改,,可以點(diǎn)擊右上角的關(guān)閉按鈕關(guān)閉單片機(jī)論壇窗口,。 圖20-19 在線匯編對(duì)話框 20.4.4 程序調(diào)試時(shí)的常用窗口 Keil C51軟件在調(diào)試程序時(shí)提供了多個(gè)窗口,主要包括輸出窗口(Output Windows),、查看和呼叫堆棧窗口(Watch & Call Statck Windows),、存儲(chǔ)器窗口(Memory Window)、反匯編窗口(Dissambly Window)和串行窗口(Serial Window)等,。進(jìn)入調(diào)試模式后,,可以通過(guò)菜單“查看”(View)下的相應(yīng)命令打開(kāi)或關(guān)閉這些窗口。 圖20-20是輸出窗口,、查看和呼叫堆棧觀察窗口和存儲(chǔ)器窗口,,各窗口的大小可以使用鼠標(biāo)調(diào)整。進(jìn)入51單片機(jī)開(kāi)發(fā)板調(diào)試程序后,,輸出窗口自動(dòng)切換到Command頁(yè),。 圖20-20 輸出窗口、查看和呼叫堆棧窗口和存儲(chǔ)器窗口 存儲(chǔ)器窗口 存儲(chǔ)器窗口中可以顯示系統(tǒng)各種內(nèi)存中 的值,,通過(guò)在“地址”(Address)后的編緝框內(nèi)輸入“字母:數(shù)字”即可顯示相應(yīng)內(nèi)存值,其中字母可以是C,、D,、I、X,,分別代表代碼存儲(chǔ)空間,、直接 尋址的片內(nèi)存儲(chǔ)空間,、間接尋址的片內(nèi)存儲(chǔ)空間、擴(kuò)展的外部RAM空間,,數(shù)字代表想要查看的地址,。例如輸入“D:0x20”即可觀察到地址20H開(kāi)始的片內(nèi) RAM單元值;鍵入“C:0x100”即可顯示從100H開(kāi)始的ROM單元中的值,,即查看程序的二進(jìn)制代碼,。該窗口的顯示值可以以各種形式顯示,如十進(jìn) 制,、十六進(jìn)制,、字符型等,改變顯示方式的方法是點(diǎn)鼠標(biāo)右鍵,,在彈出的快捷菜單中選擇PIC單片機(jī)培訓(xùn),, 該菜單用分隔條分成三部分,其中第一部分與第二部分的三個(gè)選項(xiàng)為同一級(jí)別,,選中第一部分的任一選項(xiàng),,內(nèi)容將以整數(shù)形式顯示,而選中第二部分的ASCII項(xiàng) 則將以字符型式顯示,,選中Float項(xiàng)將以相鄰四字節(jié)組成的浮點(diǎn)數(shù)形式顯示,,選中Double項(xiàng)則將相鄰8字節(jié)組成雙精度形式顯示。第一部分又有多個(gè)選擇 項(xiàng),,其中Decimal項(xiàng)是一個(gè)開(kāi)關(guān),,如果選中該項(xiàng),則窗口中的值將以十進(jìn)制的形式顯示,,否則按默認(rèn)的十六進(jìn)制方式顯示,。Unsigned和Signed 后分別有三個(gè)選項(xiàng):Char、Int,、Long分別代表以單字節(jié)方式顯示,、將相鄰雙字節(jié)組成整型數(shù)方式顯示、將相鄰四字節(jié)組成長(zhǎng)整型方式顯示,,而 Unsigned和Signed則分別代表avr單片機(jī)開(kāi)發(fā)板無(wú) 符號(hào)形式和有符號(hào)形式,,究竟從哪一個(gè)單元開(kāi)始的相鄰單元?jiǎng)t與你的設(shè)置有關(guān)。以整型為例,,如果你輸入的是“I:0”,,那么00H和01H單元的內(nèi)容將會(huì)組成 一個(gè)整型數(shù),而如果你輸入的是“I:1”,,01H和02H單元的內(nèi)容會(huì)組成一個(gè)整型數(shù),,依此類(lèi)推。第三部分的Modify Memory at X:xx用于更改鼠標(biāo)處的內(nèi)存單元值,,選中該項(xiàng)即出現(xiàn)如圖20-21所示的對(duì)話框,,可以在對(duì)話框內(nèi)輸入要修改的內(nèi)容,。 圖20-21 更改內(nèi)存單元值 工程窗口寄存器頁(yè) 圖20-22是工程窗口寄存器頁(yè)的內(nèi) 容,寄存器頁(yè)包括了當(dāng)前的工作寄存器組和系統(tǒng)寄存器組,。系統(tǒng)寄存器組有一些是實(shí)際存在的寄存器,,如A、B,、DPTR,、SP、PSW等,,有一些是實(shí)際中并不 存在或雖然存在卻不能對(duì)其操作的,,如PC、States等,。每當(dāng)程序中執(zhí)行到對(duì)其寄存器的操作時(shí),,該寄存器會(huì)以反色(藍(lán)底白字)顯示,用鼠標(biāo)單擊然后按下 F2鍵,,即可修改該值,。 圖20-22 工程窗口寄存器頁(yè) 查看和呼叫堆棧觀察窗口 這也是很重要的一個(gè)窗口,工程窗口中不僅可以觀察到工作寄存器和有限的寄存器如A,、B,、DPTR等,如果需要觀察其他寄存器的值或者在高級(jí)語(yǔ)言編程時(shí)需要直接觀察變量,,還要借助于這個(gè)窗口了,。 一般情況下,我們僅在單步執(zhí)行時(shí)才對(duì) 變量值的變化感興趣,,全速運(yùn)行時(shí),,變量的值是不變的,只有在程序停下來(lái)之后,,才會(huì)將這些值的最新變化反映出來(lái),。但是,在一些特殊場(chǎng)合我們也可能需要在全速 運(yùn)行時(shí)觀察變量的變化,,此時(shí)可以點(diǎn)擊查看>定期窗口更新,,確認(rèn)該項(xiàng)處于被選中狀態(tài),即可在全速運(yùn)行時(shí)動(dòng)態(tài)地觀察有關(guān)值的變化,。但是,,選中該項(xiàng),將會(huì) 使程序模擬執(zhí)行的速度變慢,。 Keil C51提供了串行窗口,,我們可以直接在串行窗口中鍵入字符,該字符雖不會(huì)被顯示出來(lái),,但卻能傳遞到仿真CPU中,,如果仿真CPU通過(guò)串行口發(fā)送字符,那么 這些字符會(huì)在串行窗口顯示出來(lái),,用該窗口可以在沒(méi)有硬件的情況下用鍵盤(pán)模擬串口通信,。由于該項(xiàng)涉及到高級(jí)語(yǔ)言編程,這里就不具體介紹了,。 20.5 外圍接口工具 為了能夠比較直觀地了解[color=#444444 !important]單片機(jī)中 定時(shí)器,、中斷、并行端口,、串行端門(mén)等常用外設(shè)的使用情況,,Keil C51提供了一些外圍接口對(duì)話框,通過(guò)“外圍設(shè)備”菜單選擇,?!巴鈬O(shè)備”的下拉菜單內(nèi)容與你建立項(xiàng)目時(shí)所選的CPU有關(guān)。如果是選擇的89C51這一類(lèi) 單片機(jī),,那么將會(huì)有Interrupt(中斷),、I/O Ports(并行I/O口)、Serial(串行口),、Timer(定時(shí)/計(jì)數(shù)器)這四個(gè)外圍設(shè)備菜單(圖20-23),。打開(kāi)這些對(duì)話框,列出了外圍設(shè)備 的當(dāng)前使用情況,,各標(biāo)志位的情況等,,可以在這些對(duì)話框中直觀地觀察和更改各外圍設(shè)備的運(yùn)行情況。 圖20-23 外圍設(shè)備菜單 20.5.1 P1□作為輸入端□ 程序每執(zhí)行一個(gè)循環(huán)之前,,修改一次P1端口的值(圖20-24),,觀察變量的值是直接觀看屏幕右下角的變量表;另外的方法是將鼠標(biāo)移動(dòng)到源程序的變量處,,等待大約1秒鐘左右,,屏幕上即可彈出該變量的相關(guān)信息。 圖20-24 P1□作為輸入端□ 20.5.2 P1□作為輸出端□ 執(zhí)行循環(huán)時(shí)觀察P1口的輸出,。由于P1口只用于輸出,,故無(wú)須修改端口值(圖20-25)。 圖20-25 P1□作為輸出端□ 20.5.3 外部中斷INT0 外部中斷INT0對(duì)應(yīng)于P3.2口線,,因此,,用鼠標(biāo)單擊“外設(shè)>Port3”窗口從右向左數(shù)第三位(P3.2口線對(duì)應(yīng)的位),每單擊一下,,即產(chǎn)生一次中斷,,原因是外部中斷是下降沿或低電平有效(圖20-26)。 圖20-26 外部中斷INT0 另外,也可以點(diǎn)擊“外設(shè)>Interrupt”,,在出現(xiàn)圖20-27所示中斷對(duì)話界面后,,進(jìn)行設(shè)置。 圖20-27 中斷對(duì)話界面 20.5.4 定時(shí)器/計(jì)數(shù)器0 MCS-51系列單片機(jī)有兩至三個(gè)定 時(shí)器/計(jì)數(shù)器,,均可以作為定時(shí)器或計(jì)數(shù)器使用,。點(diǎn)擊“外設(shè)>Timer0”即出現(xiàn)圖20-28所示定時(shí)/計(jì)數(shù)器0的外圍接口界面,可以直接選擇 Mode組中的下拉列表以確定定時(shí)/計(jì)數(shù)工作方式(0~3四種工作方式,,設(shè)定定時(shí)初值等),,點(diǎn)擊選中TR0,status后的stop(停止)就變成了 run(運(yùn)行),。如果全速運(yùn)行程序,,此時(shí)TH0、TL0后的值也快速地開(kāi)始變化(要求“定期窗口更新”處于選中狀態(tài)),,直觀地演示了定時(shí)/計(jì)數(shù)器的工作情 況,。 圖20-28 定時(shí)/計(jì)數(shù)器0的外圍接口界面 |
|
來(lái)自: 共同成長(zhǎng)888 > 《單片機(jī)程序》