




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
構建單片機虛擬實驗仿真平臺
摘要介紹了構建單片機虛擬實驗仿真平臺的基本思路和各功能的實現方法,詳細敘述了構建仿真平臺所使用的一些技術手段。關鍵詞虛擬實驗平臺;中斷;輸入輸出接口;示波器;仿真實驗
1引言虛擬仿真實驗是利用計算機創建出一個可視化的實驗操作環境,其中的每一個可視化仿真物體代表一種實驗儀器或者設備,通過操作這些虛擬的實驗儀器或設備,即可進行各種復雜的實驗,達到與真實實驗環境相一致的教學要求和目的。與傳統的硬件實驗平臺相比,虛擬實驗平臺可以不受時空的限制,用戶能隨時隨地進行實驗。通過采用虛擬化技術,利用軟件仿真,可以完全不使用真實的實驗儀器,因此不會存在儀器磨損、破壞等情況,既節省了資金,又有利于資源共享。對于有危險性的實驗,虛擬實驗平臺更具有優勢。
2單片機虛擬實驗仿真平臺的實現
系統設計思想及總體設計我們開發的“單片機虛擬實驗平臺”將“硬件實驗臺”和“軟件調試環境”均統一進行虛擬化設計,亦即不僅“硬件實驗臺”設計為軟件形式,原來的匯編程序等調試工具也要重新專門進行設計,MASM等工具就不能使用。并且由于采用封閉式設計思路,對應用環境的適應性及其可靠性、穩定性相對較強;也就是說,這種虛擬平臺下的實驗結果與硬件條件下的結果更為相似。圖1傳統單片機實驗系統組成結構該仿真平臺可以由如圖2所示的模塊圖來表示。從圖2可以看出8031和存儲器構成了虛擬的CPU,直接或間接地控制其它所有模塊,并負責執行匯編語句。通信橋模塊實際上是一個虛擬的存儲空間,是接口芯片和外設(LED、開關和顯示器等)間數據交換的場所。接口芯片和外設之間不直接發生關系,它們通過通信橋模塊提供的接口將數據放入通信橋緩存或從通信橋緩存中取出數據。通常,通信橋分為輸入橋、輸出橋、芯片橋三種情況。開關與芯片連接構成輸入橋,LED或者顯示器與芯片連接構成輸出橋,芯片與芯片連接構成芯片橋。圖2總體框架圖
具體設計仿真平臺編譯原理仿真平臺對于匯編語言的編譯模擬了真實的CPU。大家都知道,真實的CPU在編譯過程中要使用寄存器(包括通用寄存器、特殊功能寄存器)。在虛擬的CPU環境下,我們模擬了一些寄存器,并且定義了一些執行函數以及運行規則。當然,這些運行規則是根據匯編指令制定的。虛擬的編譯過程則是逐一與運行規則進行比較,從而檢查語法錯誤,同時生成數據庫存儲所得到的一些數據。我們可以更具體地表述一下虛擬編譯系統的工作過程:CPU在執行匯編程序的時候,實際上是運行的執行函數。首先啟動一個新的線程mainthread,然后把源程序取出來逐行逐行地執行,這個動作是由Qrun函數執行的。Qrun函數從源程序的第一行開始執行,把取得的這一行數據先進行預處理,去掉注釋(以“;”開始的說明)和標號(位于行首并以“;”開始的程序),然后再按照匯編語言的固定格式取得指令名稱和操作數,每一個指令名稱都有一個與之相對應的執行函數,這些函數負責完成對應指令的功能,例如:MOV函數和MOV指令是對應的,此函數負責把第二個參數的值放到第一個參數里面。程序就像這樣一行一行執行下去。值得我們注意的還有指針的實現以及中斷的實現問題。在虛擬的編譯系統中,指針和真實的指針不同。我們用行號代替了內存地址。普通情況下,程序每執行一行,指針就加一(不論單指令語句、雙指令語句還是多指令語句均同樣處理),跳到下一行繼續執行。但若遇到跳轉指令或類跳轉指令的時候就不一樣了。首先要根據跳轉的目的標號到在編譯階段建立的數據庫中查找相應的行號,然后將獲得的行號賦值給指針IP,那么此時程序就跳到對應的行繼續執行。對于中斷的處理,我們借助了虛擬的8259A。具體實現過程將在中斷實現模塊中詳細介紹。虛擬實驗操作臺虛擬實驗操作臺是硬件設備的一個縮影。它包含了8031的四個并行I/O端口即P0口、P1口、P2口、P3口;以及中斷控制器8259A的IR0~IR7八條中斷請求輸入線;還有8255的三個8位I/O數據口PA口、PB口、PC口;最后還有LED、顯示器、開關三種外部設備(示波器是以單獨的界面形式存在的,其設計方法將單獨介紹)。它可以劃分為三個部分:顯示部分、外設部分(LED、開關)、接線部分(一個接口實現,用于將外設和實驗中用到的芯片連接起來即建立通信)。對于顯示部分,我們模擬了八段顯示器。并且在程序中我們給它分配了一個中斷號10H,功能號0(AH=0)表示對顯示屏的操作(例如,AL=1表示清屏)。功能號1(AH=1)表示將AL中的數據寫入顯示器。它的實現可以利用一個RichTextBox來模擬,給顯示部分劃分一個線程,讓該線程一直處于不停的檢測狀態isMonitorInterrupt,若為真表示顯示器有中斷,然后馬上去尋找功能號并實現相應的功能。在執行函數INT中,有一個對應于顯示器的分支,當參數為10H(也就是內中斷號為10H)時就將狀態isMonitorInterrupt置為真,從而,只要在程序中一有顯示器中斷則馬上就可以在模擬的顯示器中體現出來。對于外設部分,我們模擬了LED和開關。LED我們用Label來實現,通過backcolor的變換來實現LED的亮與滅。開關我們用TrackBar來實現,通過變形可以得到一個很形象的開關,將滑塊滑到最上面表示開,滑到最下面表示關。在LED相關的程序中,我們還定義了一個線程RunLED,該線程將一直處于運行狀態,不停地將緩沖中的數據取出,并按位對LED進行操作。開關的程序實現更簡單,當我們改變開關的一個狀態之后,馬上將SwitchStatus傳遞給接線部分對應的程序模塊。實際上,開關只負責狀態的改變。對于接線部分,實際上是一個復雜的模塊。首先要解決表面上接線的問題。在虛擬實驗操作臺上,每一個需要接線的地方都設定了一個接線孔。實際上是用圖片模擬的,沒接線的時候是一種圖片,處于接線狀態的時候又是另一種圖片。同時引用了DrawLine函數來繪制導線。其次要考慮到它深層次上的意義。從另外一個角度來說,虛擬實驗操作臺起到了“橋”的作用。它負責接收外設(開關)送過來的數據,并根據建立的“輸入橋”將數據傳遞給相應的芯片,還負責接收芯片傳過來的數據并根據建立的“輸出橋”將數據傳遞給外設(主要是LED)。而各種橋的建立也是不容忽視的。所有接線孔都對應一個序號,芯片對應接線孔的序號固定在一個范圍內,外設對應接線孔的序號對應在一個范圍內(開關與LED也要區分開)。這樣做能夠很容易地通過序號獲得該接線孔的類型。當連續點擊兩個接線孔時,程序就會根據接線孔的序號得出接線孔的類型,若是輸入的接線孔和芯片孔,則加入輸入橋;若是輸出的接線孔和芯片孔,則加入輸出橋;若兩個都是芯片接線孔,則加入芯片橋。這樣就建立了橋。圖3虛擬實驗操作臺(正在運行中)中斷模塊(8259A)真正的8259A在編程的時候要將中斷服務子程序入口地址放入中斷向量表;在虛擬系統中,地址均由行號來代替,當用匯編指令獲得一個子程序的地址時,實際上是取得了它的行號。當中斷到來的時候實際上執行的也正是該行號對應的程序,所以其功能與真實的是一樣的。為了能夠更真實地模擬硬件,我們定義了狀態機來負責管理8259A的工作。狀態機的功能是:識別寫入端口的是否是初始化數據,并可以根據寫入的內容來確定下一步應該寫入的內容,即從一個狀態到另一個狀態的轉化;同時還記錄8259A的一些工作狀態,比如:優先級方式、中斷結束方式等等。對于中斷嵌套,我們使用堆棧進行處理。首先定義一個堆棧stack(實際上是由一個數組構成的存儲區)負責在執行中斷前將IP入棧,即行號入棧。每當程序執行到RETI指令的時候就從stack中取出一個行號放入IP(可稱為出棧)。這樣就保證了中斷程序結束后順利回到斷點處繼續執行,這時的斷點可以在主程序中,也可以在某個中斷程序中(即中斷嵌套)。
I/O模塊(8255)8255有三個I/O數據口,即PA口、PB口、PC口。在虛擬實驗操作臺上有相應的A口、B口、C口的接線孔,共24個。模擬的8255由相應的執行函數和寄存器組成。由于各口工作方式的不同以及編程的方便問題,除了模擬控制寄存器外,還單獨模擬了A、B、C三口的輸入、輸出狀態,以及A、B口的工作狀態。8255的執行函數只有在OUT、IN兩種指令中執行。當在執行OUT指令或者IN指令時端口地址就屬于8255,就會去執行8255模塊的執行函數。8255的執行函數只負責對其對應的寄存器進行操作,例如:當執行OUT指令的時候模塊的執行函數就法則把AL中的值放到相應的端口寄存器中,當執行IN指令時執行函數就負責把對應端口寄存器的值放到AL中。存儲器存儲器是用來存儲數據和程序代碼的,我們所創建的虛擬平臺同樣也需要存儲器來存儲一些數據和代碼。具體的實現方法是使用一個一維數組,模擬虛擬內存。數組的下標則代表內存地址,也就是說下標與地址一一對應。并且我們專門設計了一個窗口負責顯示和修改內存。比如,在運行一個程序的時候可以根據需要通過此窗口將數據預先輸入內存,或者運行程序的時候將結果放入某個內存單元中,程序運行完畢后可以通過此窗口查看結果。示波器示波器是一種外部設備。任何數據在送入示波器之前都必須符合一個前提,就是要為模擬量。而在單片機實驗中我們處理的數據對象均為數字量,所以要將數據進行D/A轉換。所以我們在仿真系統內部模擬了0832(數模轉換芯片)。而在具體的實現過程中,我們為示波器建立了一個線程(thread)runshiboqi,用threadstatus值(True和Flase)控制線程的運行。=True時,線程運行,啟動draw函數繪制圖形;反之則不運行。而在執行函數啟動線程之前,首先是要對D/A轉換器中的數據進行處理,因為在寫入匯編程序之后,相應的數據會分別存入對應的寄存器中;所以D/A轉換器的數據處理在程序寫入時已經完成了。D/A轉換器實際上所完成的功能是對各存儲器中數據的調用以及相關數學函數的引用。圖4示波器(正在運行中)
3構建仿真平臺使用的一些技術該仿真平臺是構建在工作平臺之上的。所以使用一些特殊技術能夠使得仿真平臺的運行結果與硬件實驗結果更為相似。
匯編程序的編譯對于匯編語言的執行和接口芯片的工作,傳統的思想是借助于MASM之類的工具將匯編語言編譯成二進制代碼,這些二進制代碼在CPU的控制下去完成相應的功能。對于一個模擬硬件的軟件來說,做這樣的事情太過于復雜。因此我們用函數來模擬匯編指令,即每一個匯編指令對應一個函數,我們叫它執行函數,如:MOV函數完成MOV指令的功能,實現PublicSubMOV(ByValREF1AsString,ByValREF2AsString)DimtempAsIntegertemp=ReadData(REF2)CallWriteData(REF1,temp)EndSubReadData函數為自定義的通用函數,負責取出參數表示的值;WriteData函數也為通用函數,負責將立即數temp寫入存儲區REF1。
DirectX技術DirectX是Microsoft公司提供的一個對硬件直接進行操作的接口,早期的Windows不提供對硬件直接操作的功能,開發了這個接口之后,可以對顯示器、鼠標、鍵盤、聲卡、顯卡等硬件設備直接進行操作。在仿真平臺啟動的時候可以利用DirectX改變顯示器的分辨率,使可視化操作界面(虛擬實驗操作臺)的布局具有一致性。其簡單實現PublicDirectXAsNewDirectX7PublicDDrawAsDirectDraw7DDraw=("")Call(800,600,32,0,CONST__DEFAULT)
通信橋通信橋包括輸入橋、輸出橋和芯片橋。通信橋決定了芯片和外設間的通信。輸入橋負責接收外設(主要是開關)送過來的數據,并將數據傳遞給對應的芯片;輸出橋負責接收芯片送過來的數據,并將數據傳遞給對應的外設(主要是LED);芯片橋負責在芯片間傳遞數據。現給出通信橋的基本數據結構:PublicStructureBridgeDataPublicchipvalueAsInteger‘芯片接線孔的序號PublicdevicevalueAsInteger‘外設接線孔的序號PublicpchipAsInteger‘芯片接線孔的位置,便于連線PublicpdeviceAsInteger‘外設接線孔的位置當在接線板上接線的時候,點擊某個接線孔后,根據孔的編號確定它的類型(芯片、輸出外設、輸入外設),然后根據兩個接線孔的類型加入不同的通信橋。例如,若是芯片和輸入設備,則加入輸入橋。
多線程以及線程同步技術由于每一個芯片對應一個線程,就有可能出現多個線程同時對一個數據處理的情況,例如:通信橋模塊和8255模塊之間就有可能出現這樣的情況,8255模塊通過通信橋模塊提供的接口數據的同時,通信橋模塊把從外設接收到的數據寫入該接口。可以通過設置一個互斥變量來保證線程對臨界資源的互斥訪問,或者通過提供的SyncLock語句來實現同步鎖。
緩沖技術由于每個線程(同優先級)運行的時間和次序具有不可預測性,所以在仿真時可能會出現這樣額問題:線程1傳送數據給線程2,線程1一共發出了3個數據,而線程2只收到了1個。可以用緩沖的思想來解決這個問題。首先建立一個隊列,當線程1發送數據的時候不直接發給線程2,而是進隊列,線程2取數據的時候直接到隊列中去取。這樣就保證了數據的完整性,從而屏蔽了線程之間差異性。實現過程PublicClassCommClassPublicShareddata()As
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 盾構隧道施工成本控制考核試卷
- 稀土金屬在照明領域的應用考核試卷
- 游戲創意構思與項目策劃考核試卷
- 船舶自動消防系統設計與效能評估考核試卷
- 糧食倉儲海外倉建設考核試卷
- 火力發電廠運行安全與風險控制技術應用實踐考核卷考核試卷
- 多媒體教學模型設計與實現考核試卷
- 肉類副產品在寵物食品領域的應用考核試卷
- 火車站客運服務標準化考核試卷
- 影視特效制作與特效技術交流合作合同
- JJG 443-2023燃油加油機(試行)
- 妊娠期高血壓疾病預防與治療
- 水熱合成法合成三氧化鎢
- JJF 1356.1-2023重點用能單位能源計量審查規范數據中心
- 關于青年崗位能手評選的細則規定
- 512防災減災主題班會課件
- 華東理工大學2023–2023學年其次學期基因工程期末考試
- 川教版四年級下冊綜合實踐活動復習資料
- SH/T 0356-1996燃料油
- GB/T 24270-2009永磁材料磁性能溫度系數測量方法
- 公司PVC管材合同模板
評論
0/150
提交評論