《單片機原理及應用》課件-第9章_第1頁
《單片機原理及應用》課件-第9章_第2頁
《單片機原理及應用》課件-第9章_第3頁
《單片機原理及應用》課件-第9章_第4頁
《單片機原理及應用》課件-第9章_第5頁
已閱讀5頁,還剩117頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

第9章單片機開發入門知識9.1單片機應用系統開發技術9.2Keil集成開發平臺9.3實際應用案例思考與練習

由于單片機應用系統一般要進行系統硬件的擴展與配置,

同時還需要開發相應的軟件,因此,開發者研制一個較完整的單片機產品時,必須完成以下工作:

(1)硬件電路設計、制板、組裝。

(2)應用軟件的編寫、調試。

(3)應用系統的程序固化、脫機(脫離開發系統)運行。

9.1單片機應用系統開發技術

9.1.1單片機應用系統的開發過程

單片機應用系統的開發過程包括系統方案論證、系統硬件設計、系統軟件設計、系統仿真調試和脫機運行調試。各部分的詳細內容如圖9-1所示。圖9-1單片機應用系統的開發流程

1.系統方案論證和總體設計

方案討論包括查找資料,分析研究,并解決以下問題:

(1)了解國內類似系統的開發水平、供應狀態;如果是委托研制項目,還應充分了解系統的技術要求、應用環境,以確定項目的技術難度。

(2)了解可移植的軟件、硬件技術。能夠移植的盡量移植,防止大量的低水平重復勞動。

(3)摸清軟、硬件技術的關鍵,明確技術主攻方向。

(4)綜合考慮軟、硬件分工與配合。單片機應用系統設計中,軟、硬件工作有密切的相關性。

(5)通過調查研究,確定應用系統的功能和技術指標,軟、硬件技術方案及分工。

從總體上來看,設計任務可分為硬件設計和軟件設計,這兩者互相結合,不可分離。從時間上來看,系統的硬件設計與軟件設計可同時進行。硬件設計的絕大部分工作量是在最初階段,到后期往往還要做一些修改。只要技術準備充分,硬件設計的大返工是較少的。軟件設計的任務貫徹始終,到中后期基本上都是軟件設計任務。

2.系統硬件設計

硬件設計就是在總體方案的指導下,對構成單片機應用系統的所有功能模塊進行詳細、具體的電路設計,包括:具體確定系統中所要使用的元器件,設計出系統的電路原理圖,必要時做一些部件實驗,以驗證電路的正確性;進行工藝結構的設計加工、印制電路板的制作及樣機的組裝等。

單片機應用系統的設計可劃分為兩部分:一部分是與單片機直接接口的數字電路芯片的選擇和設計,如存儲器和并行接口的擴展,定時系統、中斷系統的擴展,一般外部設備的接口,與A/D、D/A芯片的接口;另一部分是與模擬電路相關的電路設計,包括模擬信號的采集、整形、放大、變換、隔離和傳感器的選用,輸出通道的隔離和驅動及執行元件的

選用。

3.系統軟件設計

單片機應用系統是一個整體,當系統的硬件電路設計定型后,軟件的任務也就明確了。設計單片機系統應用軟件時,應注意以下幾個方面:

(1)根據軟件功能要求,將軟件分成若干相對獨立的部分,設計出合理的軟件總體結構,使其清晰、簡潔、流程合理。

(2)功能程序實行模塊化、子程序化,既便于調試、鏈接,又便于移植和修改。

(3)對于復雜的模塊和系統,應繪制出程序流程圖。多花一些時間來設計程序流程圖,可以大大減少源程序編寫、調試的時間。

(4)在程序的相關位置處寫上功能注釋,可提高程序的可讀性。

4.系統仿真調試

調試是一個非常復雜的過程,一般情況下需要借助開發工具(開發系統),通過運行程序來觀察開發的單片機應用系統(目標板)是否符合設計要求。在確保硬件電路設計正確、合理的前提下,調試過程實質上是程序反復修改的過程。

5.脫機運行調試

軟件和硬件聯機調試反復運行正常后,借助開發系統的編程器,將程序“寫入”單片機應用系統的程序存儲器EPROM或E2PROM中,這個過程稱為固化。

固化完成后,單片機應用系統即可脫離開發系統獨立工作。這時還需將單片機應用系統帶到現場投入實際工作,檢驗其可靠性和抗干擾能力,直到完全滿足要求。

9.1.2單片機開發調試工具

開發工具應具備以下主要作用:

(1)系統硬件電路的診斷。

(2)源程序的輸入與修改。

(3)除連續運行程序外,具有單步運行、設斷點運行和狀態查詢等功能。

(4)能將程序固化到EPROM芯片上去。

1.仿真器

仿真器(Emulator)具有以某一系統復現另一系統的功能,它與計算機軟件模擬(詳見9.2.3小節)的區別在于,仿真器用于模擬單片機系統的外在表現、行為,而不是模擬單片機

系統的抽象模型。某種型號的仿真器如圖9-2所示。圖9-2某種型號的仿真器

仿真器是用以實現硬件仿真的工具。仿真器可以替代單片機對程序的運行進行控制,如單步、全速、查看資源、設置斷點等。

仿真,就是用開發系統的資源來仿真應用系統,此時開發系統便是仿真器。一般多采用在線仿真,即仿真器控制的硬件環境與應用系統完全一致,或就是實際的應用系統。

仿真方法是:拔下應用系統(用戶板)的CPU,改插開發系統的仿真頭,兩個系統便共用一個CPU,而仿真器的存儲器中可以存放應用系統的程序。仿真器運行該程序,就可以測試應用系統的硬件功能和軟件功能。這就是所謂“出借”CPU的方法。仿真器可以連續運行程序、單步運行程序或設斷點運行,也可以進行狀態查詢等。

仿真器除了具有如圖9-2所示的硬件部分以外,一般還配有在微機上運行的專門軟件程序(一般由仿真器生產廠家提供),兩者共同組成仿真系統。所有的仿真操作命令都是

在軟件程序上操作的。大部分仿真器還可以和KeilμVision集成開發環境一起使用。

圖9-3是仿真器和單片機應用系統(用戶板)的連接關系圖。圖9-3仿真器和單片機應用系統的連接關系

2.編程器

編程器(Programmer)也稱燒錄器,是一個給可編程集成電路芯片寫上數據(二進制程序代碼)的工具,主要用于單片機(含嵌入式)/存儲器(含BIOS)之類的芯片的編程(或稱為刷寫、固化)。當程序調試完成后,需要將調試好的程序(匯編語言格式或C語言格式)通過匯編軟件工具或編譯軟件工具變成二進制機器碼,寫入到相應的芯片中,使得開發的單片機應用系統可以脫離仿真器獨立運行,變成“成品”。

編程器在功能上可分為通用編程器和專用編程器。某種型號的編程器如圖9-4所示。圖9-4某種型號的編程器

3.示波器

示波器(Oscilloscope)是一種用途十分廣泛的電子測量儀器,如圖9-5所示。它能把肉眼看不見的電信號變換成看得見的圖像,便于人們研究各種電現象的變化過程。利用示

波器能觀察各種不同信號幅度隨時間變化的波形曲線,還可以用它測試各種不同的電量,如電壓、電流、頻率、相位差、調幅度等。圖9-5某種型號的示波器

4.邏輯分析儀

邏輯分析儀(LogicAnalyzer)是利用時鐘從測試設備上采集和顯示數字信號的儀器,最主要的作用在于時序判定。由于邏輯分析儀不像示波器那樣有許多電壓等級,通常只顯示兩個電壓(邏輯1和0),因此設定了參考電壓后,邏輯分析儀根據被測信號通過比較器后的比較結果進行判定,被測信號電壓高于參考電壓者為High,低于參考電壓者為Low,

在High與Low之間形成數字波形。

邏輯分析儀主要用于復雜數字電路(單片機應用系統)的調試,可以檢查多路時序之間的關系,這種定時分析可以對輸入數據進行有效采樣,跟蹤采樣時產生的任何跳變,從而容易識別毛刺(毛刺是采樣時多次穿越邏輯閾值的跳變,難以查找)。

邏輯分析儀主要有兩種,一種是獨立的,另一種是將一塊板卡插入計算機插槽中和計算機配合使用,如圖9-6所示。圖9-6兩種類型的邏輯分析儀

5.邏輯筆

邏輯筆(LogicTestPen)是采用不同顏色的指示燈來表示數字電平高低的儀器,如圖9-7所示。它是測量數字電路簡便易用的工具。使用邏輯筆可快速測量出數字電路中有故

障的芯片。邏輯筆上一般有二三只信號指示燈,紅燈一般表示高電平,綠燈一般表示低電平,黃燈表示所測信號為脈沖信號。圖9-7邏輯筆

9.2Keil集成開發平臺

Keil軟件是KeilSoftware公司出品的開發MCS51系列單片機應用系統的開發平臺。Keil軟件是目前流行的開發MCS51系列單片機的軟件,提供了包括源程序編輯器、C編譯器、匯編器、鏈接器、庫管理和一個功能強大的仿真調試器等在內的開發工具,并通過一個集成開發環境(KeilμVision)將這些部分組合在一起。

9.2.1應用程序的創建

應用程序的創建過程大致如下:

(1)新建一個工程項目文件。

(2)為工程選擇目標器件(如AT89C51)。

(3)為工程項目設置軟硬件調試環境。

(4)創建源程序文件。

(5)保存創建的源程序文件。

(6)把源程序文件添加到項目中。

首先啟動KeilμVision4。從計算機桌面上直接雙擊KeilμVision4圖標即可啟動該軟件。KeilμVision4提供一個菜單欄、一個工具欄,以便快速選擇命令按鈕。另外,

KeillμVision4還有文本編輯窗口、輸出信息窗口、工程窗口,如圖9-8所示。KeilμVision4允許同時打開多個編輯窗口,瀏覽多個源文件。圖9-8KeilμVision4集成開發環境

1.創建Keil工程文件

運行KeilμVision4后,按照以下步驟建立一個工程項目。

(1)單擊Project(工程)菜單,在彈出的下拉菜單中選擇“NewμVisionProject”(新工程)命令,如圖9-9所示。

(2)在彈出的“CreatNewProject”對話框的文件名文本框中輸入一個C程序(或匯編程序)工程項目的名稱,不需要擴展名,將其保存到指定位置。對于已有的工程文件,可以

用“OpenProject”加載。

(3)選擇所需的單片機器件,這里選擇較常用的Atmel公司的AT89C51,此時對話框如圖9-10所示,AT89C51的功能、特點顯示在右欄中。圖9-9Project菜單圖9-10單片機型號選取界面

2.在工程中添加源程序文件

可以通過菜單命令“File→Open”或快捷鍵“Ctrl+O”在工程中加入已有的源程序文件。如果沒有現成的源程序,就要新建一個源程序文件,以便于編寫程序。以下介紹如何新建一個源程序文件。

(1)源程序文件的創建。單擊圖9-11中的“New”快捷按鈕(即新建文件),在右側會出現一個新的編輯窗口。這個操作也可以通過菜單命令“File→New”或快捷鍵“Ctrl+N”來實現。圖9-11工程中創建新的源程序文件

(2)源程序文件的保存。新建完編輯窗口后,單擊“Save”按鈕,或通過菜單命令“File→Save”或快捷鍵“Ctrl+S”進行保存。在出現的如圖9-12所示的窗口中命名一個文件名,然后保存。匯匯編語言源程序文件命名的后綴為.aassm。圖9-12保存一個匯編語言源程序

(3)源程序文件的添加。在創建源程序文件后,需要將這個文件添加到工程項目中。在Project窗口的Project頁中選中文件組,單擊右鍵打開快捷菜單,如圖9-13所示,單擊選項“AddFilestoGroup‘SourceGroup1’”,在出現的對話框中選中剛剛創建的test.asm(也可以是已有源程序文件),這時在SourceGroup1文件夾圖標左側出現了“+”號,表明文件組中添加了文件,單擊便可以展開查看。

(4)源程序文件的查看。在源程序編輯窗口查看剛才加入的文件,如圖9-19所示。圖9-13添加文件到源代碼組1的界面

3.工程的詳細設置

工程項目建立好以后,還要對工程進行進一步的設置,以滿足要求。

首先單擊Project窗口的Target1,然后使用菜單“Project→OptionsforTarget‘Target1’”,即出現對工程設置的對話框,這個對話框共有11個頁面,在此只介紹其主要功能。

(1)Target標簽頁:用于存儲器設置,如圖9-14所示。“MemoryModel”用于設置RAM空間的使用,主要用于C51語言,有三個選擇項:Small是所有變量都在單片機的內

部RAM中;Compact可以使用一頁外部擴展RAM;Large可以使用全部外部擴展RAM?!癈odeRomSize”用于設置ROM空間,同樣也有三個選擇項:Small模式,只使用低于

2KB的程序空間;Compact模式,單個函數的代碼量不能超過2KB,整個程序可以使用64KB的程序空間;Large模式,可使用全部64KB的程序空間?!癠seOn-chipROM”用于確認是否僅使用片內ROM(注意:選中該項并不會影響最終生成的目標代碼量)。圖9-14Target標簽頁

(2)Output標簽頁:用于輸出選項設置,如圖9-15所示?!癈reatHexFile”用于生成可執行代碼文件(可以用編程器寫入單片機芯片的Hex格式文件,文件的擴展名為.hex),

默認情況下該項未被選中,如果要寫芯片做硬件實驗,就必須選中該項,這一點是初學者易疏忽的,在此特別提醒注意?!癉ebugInformation”用于產生調試信息,如果需要對程序

進行調試,應當選中該項?!癇rowseInformation”用于產生瀏覽信息,該信息可以用菜單“View→Browse”來查看,這里取默認值。圖9-15Output標簽頁

(3)Listing標簽頁:用于調整生成的列表文件,如圖9-16所示。在匯編或編譯完成后將產生(*.lst)的列表文件,在連接完成后也將產生(*.m51)的列表文件,該頁用于對列表文件的內容和形式進行細致的調節,其中比較常用的選項是“

CCompilerListing”下的“AssemblyCode”項,選中該項可以在列表文件中生成C語言源程序所對應的匯編代碼。圖9-16Listing標簽頁

(4)C51標簽頁:用于對Keil中C51編譯器的編譯過程進行控制,如圖9-17所示。其中比較常用的是“

CodeOptimization”組,該組中Level是優化等級,C51在對源程序進行編譯時,可以對代碼進行多至9級的優化,默認使用第8級,一般不必修改,如果在編譯中出現一些問題,可以降低優化級別。Emphasis是選擇編譯優先方式的,第一項是代碼量優先(最終生成的代碼其代碼量小),第二項是速度優先(最終生成的代碼其代碼速度快),第三項是缺省,默認速度優先,可根據需要更改圖9-17C51標簽頁

(5)Debug標簽頁:用于設置仿真模式及調試設置選項,如圖9-18所示。KeilμVision4的兩種仿真模式分別是軟件模擬和硬件仿真。軟件模擬選項是將KeilμVision4

調試器設置成軟件模擬模式,在此模式下不需要實際的目標硬件就可以模擬MCS51單片機的很多功能(例如第4章的程序),在制作硬件電路之前就可以測試應用程序,非常有用。硬硬件仿真則需要和仿真器聯合使用用(詳見9.

2.3小節)。圖9-18Debug標簽頁

9.2.2應用程序的編輯、編譯和鏈接

1.源程序的編輯和修改

除了通過添加源程序建立編輯環境外,還可以采用其他方法編寫程序。例如,把第4章例4-1的參考程序通過一個獨立編輯器(可以是寫字板或記事本)錄入,并存為test.asm

(匯編程序擴展名必須是asm),通過“AddFilestoGroup‘SourceGroup1’”選項加載,加載后的界面如圖9-19所示。如果是一個新程序,我們也可以在編輯窗口中直接編寫程序。對于加載完的源程序,可以在編輯窗口直接修改。圖9-19源程序編輯窗口

2.編譯和鏈接

在設置好工程文件并編寫好源程序后,即可進行編譯、鏈接。選擇菜單“Project→Buildtarget”,對當前工程進行鏈接。如果當前文件已修改,軟件會先對該文件進行編譯,

然后再鏈接以產生目標代碼;如果選擇Rebuildalltargetfiles”,將會對當前工程中的所有文件重新進行編譯然后再鏈接,以確保最終生產的目標代碼是最新的;而“TranslateFiles”項則僅對該文件進行編譯,不進行鏈接。

以上操作可以通過工具欄中的按鈕直接進行。如圖9-20所示,矩形框中最左邊三個圖標都是編譯按鈕,不同的是:

按鈕用于編譯單個文件;按鈕用于編譯鏈接當前項目,如果先前編譯過一次的文件沒有做過編輯改動,再次單擊按鈕不會再次編譯;按鈕,每單擊一次均會再次編譯鏈接一次,不論程序是否有改動。編譯和鏈接完成后,在下方的“

BuildOutput”窗口中可以看到編譯結果的輸出信息和使用的系統資源情況等,如果沒有語法錯誤(如圖9-21所示),表示程序可以運行。圖9-20編譯按鈕

如果源程序中有語法錯誤,在“BuildOutput”窗口中會有錯誤報告出現,如圖9-22所示(表示源程序第5行有語法錯誤),這時沒有生成目標代碼,源源程序中存在語法錯誤誤,程序不能運行行,必必須改正錯誤誤。雙擊錯誤示意行,可以在編輯器窗口中定位到源程序相應的位置。對源程序反復修改之后,最終會得到如圖9-21所示的正確結果,提示獲得了名為test.hex的文件(可以被編程器讀入并燒錄到ROM芯片中),同時還產生了一些其他相關的文件,可用于仿真與調試,這時可以進入下一步調試的工作。圖9-21編譯正確的輸出窗口圖9-22編譯錯誤的輸出窗口

9.2.3應用程序的仿真和調試

通過編譯(匯編)和鏈接,可以獲得目標代碼,但是做到這一步僅僅代表源程序沒有語法錯誤。源源程序中是否存在邏輯錯誤,必須通過調試才能發現并解決。事實上,除了極簡單的程序以外,絕大部分的程序都要通過反復調試才能得到正確的結果,因此,調試是軟件開發中一個重要環節。下面通過實例介紹常用的調試命令和調試方法。

1.仿真器的連接

(1)選擇硬件仿真器類型。打開Debug標簽頁設置窗口,選中右側一欄Use,并在下拉菜單中選擇第一個硬件仿真器KeilMonitor-51Driver,如圖9-23所示。圖9-23使用硬件仿真器的Debug標簽頁設置窗口

(2)查找串口號。連接仿真器時需注意和計算機串口匹配的問題,因而需要確定計算機的串口號。打開計算機的設備管理器即可查詢計算機的串口號,如圖9-24所示。圖9-24計算機設備管理器窗口

(3)設置串口波特率。在確定了計算機所使用的串口號之后,就可以繼續對硬件仿真器進行設置。單擊Debug標簽頁設置窗口右欄中的Settings,對計算機所使用的串口號和

波特率進行設置,串口號與設備管理器上所顯示的一致,波特率可以選擇最大值115200b/s,如圖9-25所示。

(4)仿真器的連接。拔下單片機應用系統(用戶板)的CPU,改插仿真器的仿真頭,將仿真器通過串行接口(或USB口)連接到計算機上。圖9-25串口號和波特率設置窗口

2.仿真的啟動和停止

1)使用軟件模擬器

使用軟件模擬器進行仿真時,需要先進入工程設置的Debug標簽頁,將仿真方式設置成軟件模擬器仿真,然后進入調試過程,如圖9-26所示。圖9-26軟件模擬器調試操作步驟

2)使用硬件仿真器(真實仿真器)

使用硬件仿真器進行仿真時,需要先進入工程設置的Debug標簽頁,將仿真方式設置成硬件仿真器仿真,并進行串口和波特率的設置,連接好仿真器,然后進入調試過程,如圖9-27所示。圖9-27硬件仿真器調試操作步驟

3.常用調試命令

進入調試狀態后,界面與編緝狀態相比有明顯的變化,Debug菜單項中原來不能用的命令現在已可以使用了,工具欄會多出一個用于運行和調試的工具條。如圖9-28所示,

Debug菜單上的大部分命令可以在此找到對應的快捷按鈕,從左到右依次是復位、全速運行、暫停、單步(進入到函數或子程序內部)、過程單步(不進入到函數或子程序內部)、跳

出函數或子程序(只有軟件仿真時有效)、運行到當前行(光標位置處)、顯示光標位置、記錄運行軌跡、觀察運行軌跡、反匯編窗口、變量觀察窗口、代碼作用范圍分析、內存窗口、

性能分析(只有軟件仿真支持)、工具按鈕等命令。圖9-28調試工具條

1)全速運行

全速運行是指一行程序執行完以后緊接著執行下一行程序,中間不停止,這樣程序執行的速度很快,只能看到該段程序執行的總體效果,即最終結果正確還是錯誤,但如果程序有錯,則難以確認錯誤出現在哪些程序行。圖9-28的第2個選項即是全速運行。也可以通過Debug菜單項中的Run實現全速運行。

2)單步運行

單步運行是每次執行一行程序,執行完該行程序以后即停止,等待命令執行下一行程序,此時可以觀察該行程序執行完以后得到的結果是否與我們編寫該行程序前的預期結果

相同,借此可以找到程序中的問題所在。

按下F11(或F10)鍵,可以看到源程序窗口的左邊出現了一個黃色調試箭頭,指向源程序的第一行,如圖9-29所示。每按一次F11(或F10),即執行該箭頭所指程序行,然后

箭頭指向下一行,不斷按F11(或F10)鍵,即可逐步執行程序。

圖9-29源程序窗口調試狀態

3)斷點運行

程序調試時,已經確定正確的程序段不必每次都單步運行,或者一些程序行必須滿足一定的條件才能被執行到(如程序中某變量達到一定的值、按鍵被按下、串口接收到數據、

有中斷產生等),這些條件往往是異步發生或難以預先設定的,這類問題使用單步運行的方法是很難調試的,這時就要使用到程序調試中的另一種非常重要的方法———斷點運行。

斷點設置的方法有多種,常用的是在某一程序行設置斷點。在程序行設置/移除斷點的方法是:將光標定位于需要設置斷點的程序行,使用菜單“Debug→Insert/Remove

BreakPoint”設置或移除斷點(也可以用鼠標在該行雙擊實現同樣的功能),如圖9-30所示。圖9-30斷點的設置和移除

9.2.4應用程序調試的常用窗口

KeilμVision4在調試程序時提供了多個窗口,主要包括輸出窗口(OutputWindows)、觀察窗口(WatchWindows)、存儲器窗口(MemoryWindows)和工程窗口寄存器頁等。進

入調試模式后,可以通過菜單View下的相應選項打開或關閉這些窗口。在程序調試過程中,可以充分利用KeilμVision4提供的各種窗口,來提高程序調試的效率。

1.輸出窗口

圖9-31所示為輸出窗口。進入調試程序后,輸出窗口自動切換到Command頁,該頁用于輸入調試命令和輸出調試信息。圖9-31輸出窗口

2.存儲器窗口

用圖9-32所示方法打開存儲器窗口,窗口中可以顯示單片機中RAM和ROM的值。通過在Address編輯框內輸入“字母:數字”即可顯示從這個數字開始的若干存儲單元的值,字母可選擇C、D、I、X,其中:

·C:代表ROM空間;

·D:代表直接尋址的片內RAM空間;

·I:代表間接尋址的片內RAM空間;

·X:代表擴展的外部RAM空間;

·數字:代表想要查看的地址(習慣上采用十六進制,在數字后面要加上H)。圖9-32通過菜單項打開存儲器窗口

例如:輸入“D:30H”即可觀察到地址30H開始的片內RAM單元中的值;輸入“C:0000H”即可顯示從0000H開始的ROM單元中的值,即查看程序的二進制代碼。RAM或ROM單元中的值可以在窗口中以各種形式顯示,如十進制、十六進制、字符型等。改變顯示方式的方法是單擊鼠標右鍵,在彈出的快捷菜單中選擇,默認的是十六進制顯示方式。

3.工程窗口寄存器頁

圖9-33所示為工程窗口寄存器頁的內容。寄存器頁包括了當前的工作寄存器組和系統寄存器組。系統寄存器組有一些是實際存在的寄存器(如A、B、DPTR、SP、PSW等),有一些是實際中并不存在或雖然存在卻不能對其操作的(如PC、States等)。每當程序中執行到對某寄存器的操作時,該寄存器會以反色(藍底白字)顯示,鼠標單擊后按下F2鍵,

即可修改該值。存儲器窗口和工程窗口寄存器頁是匯編程序調試過程中常用的窗口。圖9-33工程窗口寄存器頁

4.觀察窗口

圖9-34所示為觀察窗口。由于工程窗口中僅可以觀察到工作寄存器和有限的寄存器(如A、B、DPTR等),如果需要觀察其他的寄存器的值或在高級語言編程時需要直接觀察變量,就要借助于觀察窗口。一般情況下,僅在單步運行時才對變量的值的變化感興趣。全速運行時,變量的值是不變的,只有在程序停下來之后,才會將這些值的最新變化反映

出來。

但是,在一些特殊場合下也可能需要在全速運行時觀察變量的變化,此時可以單擊“View→PeriodicWindowUpdate”(周期更新窗口),確認該項處于被選中狀態后,即可在全速運行時動態觀察有關值的變化。但是,選中該項,將會使程序模擬執行的速度變慢。觀察窗口是C程序調試過程中常用的窗口之一。

圖9-34觀察窗口

9.2.5調試實例

下面以第4章的例4-1為例,全面講述程序調試方法。

三字節無符號數相加,其中被加數在內部RAM的50H、51H和52H單元中(低位在后),加數在內部RAM的53H、54H和55H單元中(低位在后),要求把相加之和存放在

50H、51H和52H單元中(低位在后),進位存放在位尋址區的00H位中。

(1)編譯程序。如上述參考程序所示,為了演示“程序的調試”,我們首先給源程序制造一個錯誤,將第6行中的帶進位的加指令的ADDC改為ADD,然后進行編譯,如圖

9-35所示。由于程序中并無語法錯誤,所以編譯時不會有任何出錯提示。但由于中間字節相加結果沒有考慮進位位,所以可能會導致運算結果出錯。圖9-35有邏輯錯誤的調試窗口

(2)演算或預判給出正確結果。我們設定24位的被加數和加數均為101010101010101010101010,則相加的結果如下:

用十六進制表示為55H55H54H。

進入運行狀態后,首先需要在存儲器窗口中將內部地址單元50H到55H的值修改為AAH(即輸入加數和被加數),其方法是:用鼠標雙擊對應存儲器窗口中的存儲單元,單元

中數據被選中后便可修改數據,如圖9-36所示。圖9-36存儲器值修改

(3)運運行程序并查看程序運行結果果。先全速運行,在存儲器窗口中輸入“D:0050h”,查看結果為55H54H54H,如圖9-37所示。這與我們上面計算的結果不同,說明出現了錯誤。為此需要單步運行,通過中間結果找到錯誤。

需要注意的是:有些情況下字節之間相加沒有進位,比如:兩個010101010101010101010101相加,上面錯誤則無法發現,這就需要我我們在調試時考慮到所有的情況況。圖9-37全速運行得到的錯誤結果

(4)單單步運行調試試,觀觀察中間值值。進入單步運行狀態后,按F10以過程單步執行程序,觀察寄存器窗口的各寄存器的運算結果。按照預置的數據其輸出結果在存儲器地址單元50H到52H的結果應該為“55H、55H、54H”,而實際調試中當程序執行完第7行時,發現存儲器地址51H中的結果為“54H”,與預期結果不符(如圖9-38所示),并且觀察到單元52H和55H加法完成后寄存器窗口中狀態字PSW的進位位Cy為1(如圖9-39所示),而在單元51H和54H相加時卻沒有加上此進位位,最終找到邏輯錯誤。圖9-38調試過程的中間結果圖9-39寄存器中狀態字顯示

(5)改改正錯誤并驗證結果果。檢查源程序發現第6行中加法為ADD,不含進位加法指令,當改成ADDC后發現結果與預期一致,如圖9-40所示。圖9-40正確顯示結果

9.3實際應用案例

9.3.1汽車駕駛操縱信號燈控制系統在駕駛汽車時,有左轉彎、右轉彎、剎車、緊急開關、停靠等操作。在左轉彎或右轉彎時,通過轉彎操作桿應使左轉開關或右轉開關合上,從而使左頭燈、儀表板左轉彎燈、左尾燈或右頭燈、儀表板右轉彎燈、右尾燈閃爍;合緊急開關時要求前面述及的6個信號燈全都閃爍;剎車時,2個尾燈點亮;若正當轉彎時剎車,則轉彎時原應閃爍的信號燈仍應閃爍。以上閃爍都是頻率為1Hz的低頻閃爍,在汽車停靠而??块_關合上時,左頭燈、右頭燈、左尾燈、右尾燈按頻率為30Hz的高頻閃爍。信號燈應輸出的信號如表9-1所示。

1.設計思路

將P1口作為輸出口,利用單片機內部計數器/定時器產生所需的低頻(1Hz)與高頻(30Hz)閃爍信號。設計時應考慮故障監控性能,以提高系統的可靠性。

計數器/定時器的工作方式采用中斷方式。

2.硬件設計

圖9-41所示是汽車駕駛操縱信號燈單片機控制系統的硬件原理圖。

由圖9-41可見,各種駕駛操作的信號自P0口送入單片機,而使信號燈點亮的輸出信號則自P1口輸出。圖中的晶體管是輸出驅動級,圖的下部是故障監控電路。在P1.0~P1.5共6路輸出中,如輪流使其中1路的晶體管斷開(P1口相應引腳輸出低電平),這1路的信號燈將熄滅,而其他5路的晶體管接通(P1口引腳送來高電平),相應的信號燈點亮,則在正常情況下,信號燈熄滅的那路將使P1.7呈現低電平;

如果P1.7出現高電平,則說明當前這1路出現故障。另外,如使6路的晶體管全部接通(P1口引腳送來高電平),在正常情況下,P1.7應呈高電平;如果P1.7出現低電平,也說明信號線路存在故障。有故障時,通過軟件應使P1.6輸出高電平,以點亮故障信號燈報警。

圖9-41汽車駕駛操縱信號燈單片機控制系統原理

3.軟件設計

參考程序:

4.程序說明

本程序的主程序部分只有8條指令,其中7條用于初始化,分別為:對T0置初值、設定T0的工作方式、設定片內RAM20H單元的初值、開T0中斷、啟動T0、中斷等待。

(1)T0的中斷服務子程序:為T0重裝初值和保護現場后又轉去INTUSB。自INTUB起,包含2個主要程序段:信號燈指示程序段和故障監控程序段。如1s時間未到,則只執行信號燈指示程序段,根據駕駛操作動作,如轉彎、停靠等情形,信號燈將閃爍或點亮(見表9-1)。每逢1s時間到,則先執行故障監控程序段,檢查一遍信號指示電路(見圖9-41),看看是否有硬件故障,然后再執行信號燈指示程序段。

(2)1Hz閃爍信號的產生與占空比:本例令T0工作于方式1,且將初始值預置為F000H,在12MHz晶振的情形下,每隔4096ms將溢出一次,另以片內RA

溫馨提示

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

評論

0/150

提交評論