freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

智能化汽車照明系統(tǒng)設(shè)計畢業(yè)論文(編輯修改稿)

2025-07-25 04:29 本頁面
 

【文章內(nèi)容簡介】 四、實(shí)例調(diào)試為進(jìn)行程序的調(diào)試,我們首先給源程序制造一個錯誤,將延時子程序的第三行“DJNZ R6,$”后的$改為D1,然后重新編譯,由于程序中并無語法錯誤,所以編譯時不會有任何出錯提示,但由于轉(zhuǎn)移目的地出錯,所以子程序?qū)⑾萑霟o限循環(huán)中。進(jìn)入調(diào)試狀態(tài)后,按F10以過程單步的形式執(zhí)行程序,當(dāng)執(zhí)行到LCALL DELAY行時,程序不能繼續(xù)往下執(zhí)行,同時發(fā)現(xiàn)調(diào)試工具條上的Halt按鈕變成了紅色,說明程序在此不斷地執(zhí)行著,而我們預(yù)期這一行程序執(zhí)行完后將停止,這個結(jié)果與預(yù)期不同,可以看出所調(diào)用的子程序出了差錯。為查明出錯原因,按Halt按鈕使程序停止執(zhí)行,然后按RST按鈕使程序復(fù)位,再次按下F10單步執(zhí)行,但在執(zhí)行到LCALL DELAY行時,改按F11鍵跟蹤到子程序內(nèi)部(如果按下F11鍵沒有反應(yīng),請在源程序窗口中用鼠標(biāo)點(diǎn)一下),單步執(zhí)行程序,可以發(fā)現(xiàn)在執(zhí)行到“DJNZ R6,D1”行時,程序不斷地從這一行轉(zhuǎn)移到上一行,同時觀察左側(cè)的寄存器的值,會發(fā)現(xiàn)R6的值始終在FFH和FEH之間變化,不會減小,而我們的預(yù)期是R6的值不斷減小,減到0后往下執(zhí)行,因此這個結(jié)果與預(yù)期不符,通過這樣的觀察,不難發(fā)現(xiàn)問題是因?yàn)闃?biāo)號寫錯而產(chǎn)生的,發(fā)現(xiàn)問題即可以修改,為了驗(yàn)證即將進(jìn)行的修改是否正確,可以先使用在線匯編功能測試一下。把光標(biāo)定位于程序行“DJNZ R6,D1”,打開在線匯編的對話框,將程序改為“DJNZ R7,0EH”,即轉(zhuǎn)回本條指令所在行繼續(xù)執(zhí)行,其中0EH是本條指令在程序存儲器中的位置,這個值可以通過在線匯編窗口看到,如圖3所示。然后關(guān)閉窗口,再進(jìn)行調(diào)試,發(fā)現(xiàn)程序能夠正確地執(zhí)行了,這說明修改是正確的。注意,這時候的源程序并沒有修改,此時應(yīng)該退出調(diào)試程序,將源程序更改過來,并重新編譯連接,以獲得正確的目標(biāo)代碼。 Keil程序調(diào)試窗口一、程序調(diào)試時的常用窗口Keil軟件在調(diào)試程序時提供了多個窗口,主要包括輸出窗口(Output Windows)、觀察窗口(Watchamp。Call Statck Windows)、存儲器窗口(Memory Window)、反匯編窗口(Dissambly Window)串行窗口(Serial Window)等。進(jìn)入調(diào)試模式后,可以通過菜單View下的相應(yīng)命令打開或關(guān)閉這些窗口。圖1是輸出窗口、觀察窗口和存儲器窗口,各窗口的大小可以使用鼠標(biāo)調(diào)整。進(jìn)入調(diào)試程序后,輸出窗口自動切換到Command頁。該頁用于輸入調(diào)試命令和輸出調(diào)試信息。對于初學(xué)者,可以暫不學(xué)習(xí)調(diào)試命令的使用方法。(命令窗口、存儲器窗口、觀察窗口)存儲器窗口存儲器窗口中可以顯示系統(tǒng)中各種內(nèi)存中的值,通過在Address后的編緝框內(nèi)輸入“字母:數(shù)字”即可顯示相應(yīng)內(nèi)存值,其中字母可以是C、D、I、X,分別代表代碼存儲空間、直接尋址的片內(nèi)存儲空間、間接尋址的片內(nèi)存儲空間、擴(kuò)展的外部RAM空間,數(shù)字代表想要查看的地址。例如輸入D:0即可觀察到地址0開始的片內(nèi)RAM單元值、鍵入C:0即可顯示從0開始的ROM單元中的值,即查看程序的二進(jìn)制代碼。該窗口的顯示值可以以各種形式顯示,如十進(jìn)制、十六進(jìn)制、字符型等,改變顯示方式的方法是點(diǎn)鼠標(biāo)右鍵,在彈出的快捷菜單中選擇,該菜單用分隔條分成三部份,其中第一部份與第二部份的三個選項(xiàng)為同一級別,選中第一部份的任一選項(xiàng),內(nèi)容將以整數(shù)形式顯示,而選中第二部份的Ascii項(xiàng)則將以字符型式顯示,選中Float項(xiàng)將相鄰四字節(jié)組成的浮點(diǎn)數(shù)形式顯示、選中Double項(xiàng)則將相鄰8字節(jié)組成雙精度形式顯示。第一部份又有多個選擇項(xiàng),其中Decimal項(xiàng)是一個開關(guān),如果選中該項(xiàng),則窗口中的值將以十進(jìn)制的形式顯示,否則按默認(rèn)的十六進(jìn)制方式顯示。Unsigned和Signed后分別有三個選項(xiàng):Char、Int、Long,分別代表以單字節(jié)方式顯示、將相鄰雙字節(jié)組成整型數(shù)方式顯示、將相鄰四字節(jié)組成長整型方式顯示,而Unsigned和Signed則分別代表無符號形式和有符號形式,究竟從哪一個單元開始的相鄰單元則與你的設(shè)置有關(guān),以整型為例,如果你輸入的是I:0,那么00H和01H單元的內(nèi)容將會組成一個整型數(shù),而如果你輸入的是I:1,01H和02H單元的內(nèi)容全組成一個整型數(shù),以此類推。有關(guān)數(shù)據(jù)格式與C語言規(guī)定相同,請參考C語言書籍,默認(rèn)以無符號單字節(jié)方式顯示。第三部份的Modify Memory at X:xx用于更改鼠標(biāo)處的內(nèi)存單元值,選中該項(xiàng)即出現(xiàn)如圖3所示的對話框,可以在對話框內(nèi)輸入要修改的內(nèi)容。、工程窗口寄存器頁圖4是工程窗口寄存器頁的內(nèi)容,寄存器頁包括了當(dāng)前的工作寄存器組和系統(tǒng)寄存器,系統(tǒng)寄存器組有一些是實(shí)際存在的寄存器如A、B、DPTR、SP、PSW等,有一些是實(shí)際中并不存在或雖然存在卻不能對其操作的如PC、Status等。每當(dāng)程序中執(zhí)行到對某寄存器的操作時,該寄存器會以反色(藍(lán)底白字)顯示,用鼠標(biāo)單擊然后按下F2鍵,即可修改該值。觀察窗口觀察窗口是很重要的一個窗口,工程窗口中僅可以觀察到工作寄存器和有限的寄存器如A、B、DPTR等,如果需要觀察其它的寄存器的值或者在高級語言編程時需要直接觀察變量,就要借助于觀察窗口了。其它窗口將在以下的實(shí)例中介紹。一般情況下,我們僅在單步執(zhí)行時才對變量的值的變化感興趣,全速運(yùn)行時,變量的值是不變的,只有在程序停下來之后,才會將這些值最新的變化反映出來,但是,在一些特殊場合下我們也可能需要在全速運(yùn)行時觀察變量的變化,此時可以點(diǎn)擊ViewPeriodic Window Updata(周期更新窗口),確認(rèn)該項(xiàng)處于被選中狀態(tài),即可在全速運(yùn)行時動態(tài)地觀察有關(guān)值的變化。但是,選中該項(xiàng),將會使程序模擬執(zhí)行的速度變慢。二、各種窗口在程序調(diào)試中的用途以下通過一個高級語言程序來說明這些窗口的使用。例2:includesbit P1_0=P1^0。//void mDelay(unsigned char DelayTime){unsigned int j=0。for(。DelayTime0。DelayTime){for(j=0。j125。j++){。}}}void main(){unsigned int i。for(。){mDelay(10)。//延時10毫秒i++。if(i==10){P1_0=!P1_0。i=0。}}}這個程序的工作過程是:不斷調(diào)用延時程序,每次延時10毫秒,然后將變量I加1,隨后對變量I進(jìn)行判斷,如果I的值等于10,并將I清0。,建立名為exam2的項(xiàng)目,編譯、連接后按Ctrl+F5進(jìn)入調(diào)試,按F10單步執(zhí)行。注意觀察窗口,其中有一個標(biāo)簽頁為Locals,這一頁會自動顯示當(dāng)前模塊中的變量名及變量值。可以看到窗口中有名為I的變量,其值隨著執(zhí)行的次數(shù)而逐漸加大,如果在執(zhí)行到mDelay(10)行時按F11跟蹤到mDelay函數(shù)內(nèi)部,該窗口的變量自動變?yōu)镈elayTime和j。另外兩個標(biāo)簽頁Watch1和Watch2可以加入自定義的觀察變量,點(diǎn)擊“type F2 to edit”然后再按F2即可輸入變量,試著在Watch1中輸入I,觀察它的變化。在程序較復(fù)雜,變量很多的場合,這兩個自定義觀察窗口可以篩選出我們自己感興趣的變量加以觀察。觀察窗口中變量的值不僅可以觀察,還可以修改,以該程序?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)擊ViewDissambly Window可以打開反匯編窗口,該窗口可以顯示反匯編后的代碼、源程序和相應(yīng)反匯編代碼的混合代碼,可以在該窗口進(jìn)行在線匯編、利用該窗口跟蹤已找行的代碼、在該窗口按匯編代碼的方式單步執(zhí)行,這也是一個重要的窗口。打開反匯編窗口,點(diǎn)擊鼠標(biāo)右鍵,出現(xiàn)快捷菜單,如圖6所示,其中Mixed Mode是以混合方式顯示,Assembly Mode是以反匯編碼方式顯示。程序調(diào)試中常使用設(shè)置斷點(diǎn)然后全速運(yùn)行的方式,在斷點(diǎn)處可以獲得各變量值,但卻無法知道程序到達(dá)斷點(diǎn)以前究竟執(zhí)行了哪些代碼,而這往往是需要了解的,為此,Keil提供了跟蹤功能,在運(yùn)行程序之前打開調(diào)試工具條上的允許跟蹤代碼開關(guān),然后全速運(yùn)行程序,當(dāng)程序停止運(yùn)行后,點(diǎn)擊查看跟蹤代碼按鈕,自動切換到反匯編窗口,如圖6所示,其中前面標(biāo)有“”號的行就是中斷以前執(zhí)行的代碼,可以按窗口邊的上卷按鈕向上翻查看代碼執(zhí)行記錄。利用工程窗口可以觀察程序執(zhí)行的時間,下面我們觀察一下該例中延時程序的延時時間是否滿足我們的要求,即是否確實(shí)延時10毫秒,展開工程窗口Regs頁中的Sys目錄樹,其中的Sec項(xiàng)記錄了從程序開始執(zhí)行到當(dāng)前程序流逝的秒數(shù)。點(diǎn)擊RST按鈕以復(fù)位程序,Sec的值回零,按下F10鍵,程序窗口中的黃色箭頭指向mDelay(10)行,此時,然后再按F10執(zhí)行完該段程序,,所以延時時間大致是正確的。讀者可以試著將延時程序中的unsigned int改為unsigned char試試看時間是否仍正確。注意,使用這一功能的前提是在項(xiàng)目設(shè)置中正確設(shè)置晶振的數(shù)值。Keil提供了串行窗口,我們可以直接在串行窗口中鍵入字符,該字符雖不會被顯示出來,但卻能傳遞到仿真CPU中,如果仿真CPU通過串行口發(fā)送字符,那么這些字符會在串行窗口顯示出來,用該窗口可以在沒有硬件的情況下用鍵盤模擬串口通訊。下面通過一個例子說明Keil串行窗口的應(yīng)用。該程序?qū)崿F(xiàn)一個行編緝功能,每鍵入一個字母,會立即回顯到窗口中。編程的方法是通過檢測RI是否等于1來判斷串行口是否有字符輸入,如果有字符輸入,則將其送到SBUF,這個字符就會在串行窗口中顯示出來。其中ser_init是串行口初始化程序,要使用串行口,必須首先對串行口進(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?;厮偷桨l(fā)送SBUF中SEND:JBC TI,LOOP。發(fā)送完成,轉(zhuǎn)LOOPJMP SEND。否則等待發(fā)送完SER_INIT:。中斷初始化MOV SCON,50H ORL TMOD,20H ORL PCON,80HMOV TH1,0FDH。設(shè)定波特率SETB TR1。定時器1開始運(yùn)行SETB REN。允許接收SETB SM2RET END輸入源程序,并建立項(xiàng)目,正確編譯、連接,進(jìn)入調(diào)試后,全速運(yùn)行,點(diǎn)擊串行窗口1按鈕,即在原源程序窗口位置出現(xiàn)一個空白窗口,擊鍵,相應(yīng)的字母就會出現(xiàn)在該窗口中。在窗口中擊鼠標(biāo)右鍵,出現(xiàn)一個彈出式菜單,選擇“Ascii Mode”即以Ascii碼的方式顯示接收到的數(shù)據(jù);選擇“Hex Mode”以十六進(jìn)制碼方式顯示接收到的數(shù)據(jù);選擇“Clear Window”可以清除窗口中顯示的內(nèi)容。由于部份CPU具有雙串口,故Keil提供了兩個串行窗口,我們選用的89C51芯片只有一個串行口,所以Serial 2串行窗口不起作用。 Keil的輔助工具和部份高級技巧在前面的幾講中我們介紹了工程的建立方法,常用的調(diào)試方法,除此之外,Keil還提供了一些輔助工具如外圍接口、性能分析、變量來源分析、代碼作用分析等,幫助我們了解程的性能、查找程序中的隱藏錯誤,快速查看程序變量名信息等,這一講中將對這些功工具作一介紹,另外還將介紹Keil的部份高級調(diào)試技巧。一、輔助工具這部份功能并不是直接用來進(jìn)行程序調(diào)試的,但可以幫助我們進(jìn)行程序的調(diào)試、程序性能的分析,同樣是一些很有用的工具。外圍接口為了能夠比較直觀地了解單片機(jī)中定時器、中斷、并行端口、串行端口等常用外設(shè)的使用情況,Keil提供了一些外圍接口對話框,通過Peripherals菜單選擇,該菜單的下拉菜單內(nèi)容與你建立項(xiàng)目時所選的CPU有關(guān),如果是選擇的89C51這一類“標(biāo)準(zhǔn)”的51機(jī),那么將會有Interrupt(中斷)、I/O Ports(并行I/O口)、Serial(串行口)、Timer(定時/計數(shù)器)這四個外圍設(shè)備菜單。打開這些對話框,列出了外圍設(shè)備的當(dāng)前使用情況,各標(biāo)志位的情況等,可以在這些對話框中直觀地觀察和更改各外圍設(shè)備的運(yùn)行情況。下面我們通過一個簡單例子看一看并行端口的外圍設(shè)備對話框的使用。編譯、連接進(jìn)入調(diào)試后,點(diǎn)擊PeripheralsI/OPortsPort 1打開,如圖1所示,全速運(yùn)行,可以看到代表各位的勾在不斷變化(如果看不到變化,請點(diǎn)擊ViewPeriodic Window Updata),這樣可以形象地看出程序執(zhí)行的結(jié)果。注:如果你看到的變化極快,甚至看不太清楚,那么說明你的計算機(jī)性能好,模擬執(zhí)行的速度快,你可以試著將加長延時程序的時間以放慢速度。模擬運(yùn)行速度與實(shí)際運(yùn)行的速度無法相同是軟件模擬的一個固有弱點(diǎn)。點(diǎn)擊PeripheralsI/OPortsTimer0即出現(xiàn)圖2所示定時/計數(shù)器0的外圍接口界面,可以直接選擇Mode組中的下拉列表以確定定時/計數(shù)工作方式,03四種工作方式,設(shè)定定時初值等,點(diǎn)擊選中TR0,status后的stop就變成了run,如果全速運(yùn)行程序,此時th0,tl0后的值也快速地開始變化(同樣要求Periodic Window Updata處于選中狀態(tài)),直觀地演示了定時/計數(shù)器的工作情況(當(dāng)然,由于你的程序未對此寫任何代碼,所以程序不會對此定時/計數(shù)器的工作進(jìn)行處理)。性能分析Keil提供了一個性能分析工具,利用該工具,我們可以了解程序中哪些部份的執(zhí)行時間最長,調(diào)用次數(shù)最多,從而了解影響整個程序中執(zhí)行速度的瓶頸。下面通過一個實(shí)例來看一看這個工具如何使用,例5:includesbit P1_0=P1^0。//void mDelay(unsigned char DelayTime){unsigned int j=0。for(。Del
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1