www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]上一講中我們學(xué)習(xí)了幾種常用的程序調(diào)試方法,這一講中將介紹 Keil 提供各種窗口如 輸出窗口、觀察窗口、存儲(chǔ)器窗口、反匯編窗口、串行窗口等的用途,以及這些窗口的使用 方法,并通過(guò)實(shí)例介紹這些窗口在調(diào)試中的使用。

上一講中我們學(xué)習(xí)了幾種常用的程序調(diào)試方法,這一講中將介紹 Keil 提供各種窗口如 輸出窗口、觀察窗口、存儲(chǔ)器窗口、反匯編窗口、串行窗口等的用途,以及這些窗口的使用 方法,并通過(guò)實(shí)例介紹這些窗口在調(diào)試中的使用。

一、程序調(diào)試時(shí)的常用窗口

Keil 軟件在調(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)閉這些窗口。

圖 1 是輸出窗口、觀察窗口和存儲(chǔ)器窗口,各窗口的大小可以使用鼠標(biāo)調(diào)整。進(jìn)入調(diào)試 程序后,輸出窗口自動(dòng)切換到 Command 頁(yè)。該頁(yè)用于輸入調(diào)試命令和輸出調(diào)試信息。對(duì)于 初學(xué)者,可以暫不學(xué)習(xí)調(diào)試命令的使用方法。

 

 

圖 1 調(diào)試窗口(命令窗口、存儲(chǔ)器窗口、觀察窗口)

1、存儲(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:0 即可觀察到地址 0 開(kāi)始的片內(nèi) RAM 單元值、鍵入 C:0 即 可顯示從 0 開(kāi)始的 ROM 單元中的值,即查看程序的二進(jìn)制代碼。該窗口的顯示值可以以各 種形式顯示,如十進(jìn)制、十六進(jìn)制、字符型等,改變顯示方式的方法是點(diǎn)鼠標(biāo)右鍵,在彈出 的快捷菜單中選擇,該菜單用分隔條分成三部份,其中第一部份與第二部份的三個(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 后分別有

圖 2 存儲(chǔ)器數(shù)值各種方式顯示選擇

三個(gè)選項(xiàng):Char、Int、Long,分別代表以單字節(jié)方式顯示、將相鄰雙字節(jié)組成整型數(shù)方式

顯示、將相鄰四字節(jié)組成長(zhǎng)整型方式顯示,而 Unsigned 和 Signed 則分別代表無(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)容全組成一個(gè)整型數(shù),以此類推。有關(guān)數(shù)據(jù)格式與 C 語(yǔ)言規(guī)定相同,請(qǐng)參

 

考 C 語(yǔ)言書(shū)籍,默認(rèn)以無(wú)符號(hào)單字節(jié)方式顯 示。第三部份的 Modify Memory at X:xx 用于 更改鼠標(biāo)處的內(nèi)存單元值,選中該項(xiàng)即出現(xiàn)如 圖 3 所示的對(duì)話框,可以在對(duì)話框內(nèi)輸入要修 改的內(nèi)容。

 

2、工程窗口寄存器頁(yè)

圖 3 存儲(chǔ)器的值的修改

圖 4 是工程窗口寄存器頁(yè)的內(nèi)容,寄存器頁(yè)包括了當(dāng)前的工作寄存器組和系統(tǒng)寄存器,

系統(tǒng)寄存器組有一些是實(shí)際存在的寄存器如 A、B、DPTR、SP、PSW 等,有一些是實(shí)際中 并不存在或雖然存在卻不能對(duì)其操作的如 PC、Status 等。每當(dāng)程序中執(zhí)行到對(duì)某寄存器的 操作時(shí),該寄存器會(huì)以反色(藍(lán)底白字)顯示,用鼠標(biāo)單擊然后按下 F2 鍵,即可修改該值。

3、觀察窗口

 

 

?

觀察窗口是很重要的一個(gè)窗口,工程窗口中僅可以觀察到工作寄存器和有限的寄存器如 A、B、DPTR 等,如果需要觀 察其它的寄存器的值或者在高級(jí)語(yǔ)言編程時(shí)需要直接觀察變 量,就要借助于觀察窗口了。

其它窗口將在以下的實(shí)例中介紹。 一般情況下,我們僅在單步執(zhí)行時(shí)才對(duì)變量的值的變化感興趣,全速運(yùn)行時(shí),變量的值是不變的,只有在程序停下來(lái)之 后,才會(huì)將這些值最新的變化反映出來(lái),但是,在一些特殊場(chǎng) 合下我們也可能需要在全速運(yùn)行時(shí)觀察變量的變化,此時(shí)可以 點(diǎn)擊 View->Periodic Window Updata(周期更新窗口),確認(rèn)該 項(xiàng)處于被選中狀態(tài),即可在全速運(yùn)行時(shí)動(dòng)態(tài)地觀察有關(guān)值的變 化。但是,選中該項(xiàng),將會(huì)使程序模擬執(zhí)行的速度變慢。

二、各種窗口在程序調(diào)試中的用途

以下通過(guò)一個(gè)高級(jí)語(yǔ)言程序來(lái)說(shuō)明這些窗口的使用。例 2:

圖 4 工程窗口寄存器頁(yè)

#include "reg51.h"

sbit P1_0=P1^0; //定義 P1.0

void mDelay(unsigned char DelayTime)

{ unsigned int j=0;

for(;DelayTime>0;DelayTime--)

{ for(j=0;j<125;j++) {;} }

}

void main()

{ unsigned int i;

for(;;){ mDelay(10); // 延時(shí) 10

毫秒

i++;

if(i==10)

{ P1_0=!P1_0;

i=0; }

} }

這個(gè)程序的工作過(guò)程是:不斷調(diào)用延時(shí)程序,每次延時(shí) 10 毫秒,然后將變量 I 加 1,隨 后對(duì)變量 I 進(jìn)行判斷,如果 I 的值等于 10,那么將 P1.0 取反,并將 I 清 0,最終的執(zhí)行效果

是 P1.0 每 0.1S 取反一次。

輸入源程序并以 exam2.c 為文件名存盤(pán),建立名為 exam2 的項(xiàng)目,將 exam2.c 加入項(xiàng)目, 編譯、連接后按 Ctrl+F5 進(jìn)入調(diào)試,按 F10 單步執(zhí)行。注意觀察窗口,其中有一個(gè)標(biāo)簽頁(yè)為 Locals,這一頁(yè)會(huì)自動(dòng)顯示當(dāng)前模塊中的變量名及變量值??梢钥吹酱翱谥杏忻麨?I 的變量, 其值隨著執(zhí)行的次數(shù)而逐漸加大,如果在執(zhí)行到 mDelay(10)行時(shí)按 F11 跟蹤到 mDelay 函數(shù) 內(nèi)部,該窗口的變量自動(dòng)變?yōu)?DelayTime 和 j。另外兩個(gè)標(biāo)簽頁(yè) Watch #1 和 Watch #2 可以加 入自定義的觀察變量,點(diǎn)擊“type F2 to edit”然后再按 F2 即可輸入變量,試著在 Watch #1 中輸入 I,觀察它的變化。在程序較復(fù)雜,變量很多的場(chǎng)合,這兩個(gè)自定義觀察窗口可以篩 選出我們自己感興趣的變量加以觀察。觀察窗口中變量的值不僅可以觀察,還可以修改,以 該程序?yàn)槔?,I 須加 10 次才能到 10,為快速驗(yàn)證是否可以正確執(zhí)行到 P1_0=!P1_0 行,點(diǎn)擊

I 后面的值,再按 F2,該值即可修改,將 I 的值改到 9,再次按 F10 單步執(zhí)行,即可以很快 執(zhí)行到 P1_0=!P1_0 程序行。該窗口顯示的變量值可以以十進(jìn)制或十六進(jìn)制形式顯示,方法 是在顯示窗口點(diǎn)右鍵,在快捷菜單中選擇如圖 5 所示。

 

 

?

點(diǎn)擊 View->Dissambly Window 可 以打開(kāi)反匯編窗口,該窗口可以顯示反 匯編后的代碼、源程序和相應(yīng)反匯編代 碼的混合代碼,可以在該窗口進(jìn)行在線

匯編、利用該窗口跟蹤已找行的代碼、 在該窗口按匯編代碼的方式單步執(zhí)行, 這也是一個(gè)重要的窗口。打開(kāi)反匯編窗口,點(diǎn)擊 鼠標(biāo)右鍵,出現(xiàn)快捷菜單,如圖 6 所示,其中 Mixed Mode 是以混合方式顯示,Assembly Mode 是以反 匯編碼方式顯示。

程序調(diào)試中常使用設(shè)置斷點(diǎn)然后全速運(yùn)行的 方式,在斷點(diǎn)處可以獲得各變量值,但卻無(wú)法知 道程序到達(dá)斷點(diǎn)以前究竟執(zhí)行了哪些代碼,而這 往往是需要了解的,為此,Keil 提供了跟蹤功能, 在運(yùn)行程序之前打開(kāi)調(diào)試工具條上的允許跟蹤代 碼開(kāi)關(guān),然后全速運(yùn)行程序,當(dāng)程序停止運(yùn)行后, 點(diǎn)擊查看跟蹤代碼按鈕,自動(dòng)切換到反匯編窗口,

圖 5 設(shè)定觀察窗的顯示方式

 

 

圖 6 反匯編窗口

如圖 6 所示,其中前面標(biāo)有“-”號(hào)的行就是中斷以前執(zhí)行的代碼,可以按窗口邊的上卷按 鈕向上翻查看代碼執(zhí)行記錄。

利用工程窗口可以觀察程序執(zhí)行的時(shí)間,下面我們觀察一下該例中延時(shí)程序的延時(shí)時(shí)間 是否滿足我們的要求,即是否確實(shí)延時(shí) 10 毫秒,展開(kāi)工程窗口 Regs 頁(yè)中的 Sys 目錄樹(shù),其 中的 Sec 項(xiàng)記錄了從程序開(kāi)始執(zhí)行到當(dāng)前程序流逝的秒數(shù)。點(diǎn)擊 RST 按鈕以復(fù)位程序,Sec 的值回零,按下 F10 鍵,程序窗口中的黃色箭頭指向 mDelay(10)行,此時(shí),記錄下 Sec 值為

0.00038900,然后再按 F10 執(zhí)行完該段程序,再次查看 Sec 的值為 0.01051200,兩者相減大 約是 0.01 秒,所以延時(shí)時(shí)間大致是正確的。讀者可以試著將延時(shí)程序中的 unsigned int 改為 unsigned char 試試看時(shí)間是否仍正確。注意,使用這一功能的前提是在項(xiàng)目設(shè)置中正確設(shè)置 晶振的數(shù)值。

Keil 提供了串行窗口,我們可以直接在串行窗口中鍵入字符,該字符雖不會(huì)被顯示出來(lái), 但卻能傳遞到仿真 CPU 中,如果仿真 CPU 通過(guò)串行口發(fā)送字符,那么這些字符會(huì)在串行窗 口顯示出來(lái),用該窗口可以在沒(méi)有硬件的情況下用鍵盤(pán)模擬串口通訊。下面通過(guò)一個(gè)例子說(shuō)

明 Keil 串行窗口的應(yīng)用。該程序?qū)崿F(xiàn)一個(gè)行編緝功能,每鍵入一個(gè)字母,會(huì)立即回顯到窗

 

 

口中。編程的方法是通過(guò)檢測(cè) RI 是否等于 1 來(lái)判斷串行口是否有字符輸入,如果有字符輸

入,則將其送到 SBUF,這個(gè)字符就會(huì)在串行窗口中顯示出來(lái)。其中 ser_init 是串行口初始 化程序,要使用串行口,必須首先對(duì)串行口進(jìn)行初始化。例 3:

MOV SP,#5FH ;堆棧初始化

CALL SER_INIT ;串行口初始化

LOOP:

JBC RI,NEXT ; 如果串口接收到字 符,轉(zhuǎn)

JMP LOOP ;否則等待接收字符

NEXT:

MOV A,SBUF ;從 SBUF 中取字符

MOV SBUF,A ;回送到發(fā)送 SBUF 中

SEND:

JBC TI,LOOP ;發(fā)送完成,轉(zhuǎn) LOOP

JMP SEND ;否則等待發(fā)送完

SER_INIT: ;中斷初始化

MOV SCON,#50H ORL TMOD,#20H ORL PCON,#80H

MOV TH1,#0FDH ;設(shè)定波特率

SETB TR1 ;定時(shí)器 1 開(kāi)始運(yùn)行

SETB REN ;允許接收

SETB SM2

RET END

輸入源程序,并建立項(xiàng)目,正確編譯、連接,進(jìn)入調(diào)試后,全速運(yùn)行,點(diǎn)擊串行窗口 1 按鈕,即在原源程序窗口位置出現(xiàn)一個(gè)空白窗口,擊鍵,相應(yīng)的字母就會(huì)出現(xiàn)在該窗口中。 在窗口中擊鼠標(biāo)右鍵,出現(xiàn)一個(gè)彈出式菜單,選擇“Ascii Mode”即以 Ascii 碼的方式顯示 接收到的數(shù)據(jù);選擇“Hex Mode”以十六進(jìn)制碼方式顯示接收到的數(shù)據(jù);選擇“Clear Window” 可以清除窗口中顯示的內(nèi)容。

由于部份 CPU 具有雙串口,故 Keil 提供了兩個(gè)串行窗口,我們選用的 89C51 芯片只有 一個(gè)串行口,所以 Serial 2 串行窗口不起作用。

小技巧:凡是鼠標(biāo)單擊然后按 F2 的地方都可以用鼠標(biāo)連續(xù)單擊兩次(注意:不是雙擊) 來(lái)替代。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉