新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)實(shí)驗(yàn)教學(xué)仿真軟件設(shè)計(jì)

單片機(jī)實(shí)驗(yàn)教學(xué)仿真軟件設(shè)計(jì)

作者: 時(shí)間:2013-04-24 來源:網(wǎng)絡(luò) 收藏


3 仿真運(yùn)行子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
(1)對(duì)51系列單片機(jī)指令系統(tǒng)的111條指令建立對(duì)應(yīng)的處理函數(shù),依照地址指針在指令類的數(shù)組對(duì)象中查詢到對(duì)應(yīng)元素,再根據(jù)指令I(lǐng)D調(diào)用指令的處理函數(shù),完成指令的所有處理功能,返回下一指令地址給地址指針,實(shí)現(xiàn)仿真運(yùn)行子系統(tǒng)的基本需求。
(2)設(shè)計(jì)狀態(tài)掃描程序,查詢中斷申請(qǐng)。當(dāng)有中斷時(shí),在指令處理函數(shù)在完成指令的所有處理功能后進(jìn)行中斷處理。
(3)仿真運(yùn)行子系統(tǒng)與仿真電路建立子系統(tǒng)的信息交換功能的設(shè)計(jì)通過仿真電路子系統(tǒng)與程序仿真運(yùn)行子系統(tǒng)的接口函數(shù)實(shí)現(xiàn)。
當(dāng)仿真運(yùn)行子系統(tǒng)仿真執(zhí)行的指令向單片機(jī)I/O接口發(fā)送數(shù)據(jù),這些數(shù)據(jù)將引起單片機(jī)外接電路及相關(guān)元件狀態(tài)的改變。此時(shí),由仿真運(yùn)行子系統(tǒng)向仿真電路子系統(tǒng)發(fā)送消息,啟動(dòng)仿真電路狀態(tài)修改進(jìn)程,對(duì)仿真電路及元件的狀態(tài)更新。然后修改進(jìn)程結(jié)束將控制權(quán)交還,繼續(xù)仿真運(yùn)行。
如果在仿真運(yùn)行期間仿真電路或元件(僅限按鈕開關(guān))狀態(tài)發(fā)生改變,此時(shí)則由仿真電路子系統(tǒng)向仿真運(yùn)行子系統(tǒng)發(fā)送消息,啟動(dòng)仿真運(yùn)行狀態(tài)修改進(jìn)程,更新存儲(chǔ)器單元對(duì)應(yīng)的內(nèi)部變量。然后修改進(jìn)程結(jié)束將控制權(quán)交還,繼續(xù)仿真運(yùn)行。

4 仿真電路子系統(tǒng)的設(shè)計(jì)
仿真電路子系統(tǒng)在外部,它向用戶提供了一個(gè)可視的虛擬的單片機(jī)實(shí)驗(yàn)平臺(tái),用戶通過這一平臺(tái)建立仿真的實(shí)驗(yàn)電路。當(dāng)用戶仿真運(yùn)行實(shí)驗(yàn)源程序時(shí),將再次通過這一平臺(tái)進(jìn)行相關(guān)操作,觀察實(shí)驗(yàn)現(xiàn)象。在內(nèi)部,仿真電路子系統(tǒng)對(duì)用戶建立的仿真電路進(jìn)行元件的記錄、電路連接的分析、節(jié)點(diǎn)表的建立與維護(hù)、元件(包括單片機(jī)端口)狀態(tài)得計(jì)算,通過發(fā)送消息與仿真運(yùn)行子系統(tǒng)交互。最終達(dá)到在完全軟件仿真的環(huán)境中讓用戶完成單片機(jī)教學(xué)實(shí)驗(yàn),并獲得與真實(shí)實(shí)驗(yàn)條件下相同的實(shí)驗(yàn)結(jié)果。
4.1 仿真元件的設(shè)計(jì)與實(shí)現(xiàn)
元件是電路建立的基礎(chǔ)。對(duì)實(shí)驗(yàn)中用到的電器元件(如:51系列單片機(jī)89S51、電阻、電容、發(fā)光二極管、數(shù)碼管、各種開關(guān)、邏輯門電路、譯碼器、存儲(chǔ)器芯片等)設(shè)計(jì)元件類。另外將電源、接地、導(dǎo)線、節(jié)點(diǎn)也作為元件進(jìn)行設(shè)計(jì)。
部分元件以簡化的圖形表現(xiàn),在設(shè)計(jì)元件時(shí)為簡化軟件的設(shè)計(jì),將元件以單元模塊的形式進(jìn)行設(shè)計(jì),即以單元模塊電路的形式將模擬元件簡化為數(shù)字邏輯單元。忽略了電路及元件具體的電流電壓等模擬特性。類似的單元模塊有,復(fù)位模塊、振蕩電路模塊、數(shù)碼管模塊、開關(guān)模塊。
4.2 元件類的設(shè)計(jì)與實(shí)現(xiàn)
首先設(shè)計(jì)出CYuanJian類,它定義了元件共有的基本屬性及方法,例如:在窗口中的位置、元件的線條及填充顏色、元件管腳的坐標(biāo),其次,對(duì)元件操作時(shí)的方法,例如:元件的繪制和對(duì)其他屬性進(jìn)行設(shè)置等。為了讓元件對(duì)象能方便地以數(shù)據(jù)文件的形式在存儲(chǔ)器中存儲(chǔ)和
讀取,將CYuanJian類的父類定義為VC++MFC提供的基類CObject類。這樣就可使用CObject類的成員函數(shù)Serialize()對(duì)元件對(duì)象進(jìn)行串行化。由于每個(gè)元件的外形均不相同,對(duì)元件進(jìn)行繪制的Draw()函數(shù)和元件移動(dòng)函數(shù)Move()定義為虛函數(shù),利用VC++的多態(tài)性在子類中實(shí)現(xiàn)。同時(shí)這使得CYuanJian類成為了抽象類,CYuanJian類僅用來派生子類,不能實(shí)例化。
對(duì)每一個(gè)元件或單元模塊都根據(jù)上述方法建立對(duì)應(yīng)的類。元件類的建立是仿真電路建立的基礎(chǔ)。根據(jù)元件的功能要設(shè)計(jì)其自身特有的屬性和方法。由于元件較多受篇幅限制不再一一詳細(xì)敘述。
4.3 電路仿真設(shè)計(jì)與實(shí)現(xiàn)
單片機(jī)電路設(shè)計(jì)在現(xiàn)實(shí)中是非常復(fù)雜的,要考慮眾多因素,如:接口的驅(qū)動(dòng)能力、布線不良使數(shù)字噪聲影響模擬信號(hào)、電源去耦合、高低頻噪聲的處理、信號(hào)延時(shí)造成的競爭與冒險(xiǎn)、阻抗匹配等。在電路仿真設(shè)計(jì)時(shí)同樣采用元件設(shè)計(jì)時(shí)的思路,將電路簡化為一個(gè)數(shù)字電路模型。通過元件類中管腳結(jié)點(diǎn)號(hào)這一屬性記錄元件的連接信息,再通過結(jié)點(diǎn)表記錄各個(gè)結(jié)點(diǎn)的邏輯電平,最終元件同過結(jié)點(diǎn)的邏輯電平計(jì)算出自己的狀態(tài)。
數(shù)字電路中所有數(shù)字器件天然的按照時(shí)間的推移并行運(yùn)算。輸入的變化導(dǎo)致器件按照內(nèi)部的電路,完成一定的邏輯運(yùn)算并可能導(dǎo)致輸出的改變。實(shí)際電路中各個(gè)器件是并行運(yùn)行的,而程序指令的執(zhí)行是串行的。在軟件仿真中,引腳狀態(tài)的變化,數(shù)字器件的運(yùn)算,只能按照程序中函數(shù)調(diào)用的順序,逐一執(zhí)行,或交替執(zhí)行。在不考慮信號(hào)延時(shí)的情況下,程序通過循環(huán),檢測元件電路狀態(tài)最終計(jì)算出電路穩(wěn)定時(shí)的各元件輸出值,達(dá)到與實(shí)際電路一致的目的。電路仿真設(shè)計(jì)主要有以下幾個(gè)部分:
(1)元件的基本操作和元件的連接
單片機(jī)仿真實(shí)驗(yàn)軟件系統(tǒng)通過電路建立菜單中各菜單項(xiàng)及工具欄按鈕向用戶提供操作類型選擇。用戶首先選擇操作類型,主要包括選擇元件、添加元件、設(shè)置結(jié)點(diǎn)、連接元件等。用戶通過鍵盤操作(按下shift鍵)和鼠標(biāo)操作(左鍵單擊、右鍵單擊、雙擊、拖動(dòng))進(jìn)行仿真電路的建立或修改,系統(tǒng)獲得Windows消息判斷出鼠標(biāo)和鍵盤事件再結(jié)合操作類型以決定程序如何執(zhí)行;元件的連接反映出用戶期望實(shí)現(xiàn)的電路功能,仿真電路子系統(tǒng)要完成連接線和連接點(diǎn)信息的記錄,元件管腳結(jié)點(diǎn)號(hào)的更新,結(jié)點(diǎn)表的建立及更新。
(2)電路初始狀態(tài)的計(jì)算
電路初始狀態(tài)的計(jì)算的主要目的是根據(jù)仿真電路中的具體元件和連接信息計(jì)算出電路各結(jié)點(diǎn)的邏輯電平,進(jìn)而計(jì)算各元件管腳的邏輯電平,最終決定各元件的狀態(tài)。在這里將元件管腳分為輸入型、輸出型和雙向型三類,并設(shè)置優(yōu)先度。建立結(jié)點(diǎn)表時(shí)會(huì)將元件管腳的優(yōu)先度傳遞給結(jié)點(diǎn),但電路元件狀態(tài)發(fā)生改變更新結(jié)點(diǎn)表時(shí),對(duì)某一結(jié)點(diǎn)的改變要參考優(yōu)先度決定結(jié)點(diǎn)值。并在電路狀態(tài)計(jì)算時(shí)設(shè)計(jì)了一組規(guī)則以保證電路計(jì)算的正確性。電路初始狀態(tài)計(jì)算時(shí)發(fā)現(xiàn)仿真電路違反連接規(guī)則時(shí)停止計(jì)算提示用戶修改。否則遵循計(jì)算規(guī)則進(jìn)行計(jì)算。
(3)電路狀態(tài)的跟蹤
與現(xiàn)實(shí)中的單片機(jī)實(shí)驗(yàn)一樣,在用戶進(jìn)行仿真運(yùn)行時(shí)有兩種情況會(huì)改變仿真電路的狀態(tài),一是:正在運(yùn)行的用戶程序改變了單片機(jī)的I/O口。二是:用戶通過鼠標(biāo)操作改變了電路中按鈕開關(guān)或撥動(dòng)開關(guān)的狀態(tài)。在設(shè)計(jì)時(shí)定義兩個(gè)函數(shù)IOchange()和SWehange(),該函數(shù)采用與電路初始狀態(tài)計(jì)算相似的算法計(jì)算當(dāng)前電路狀態(tài)。仿真電路子系統(tǒng)將重新計(jì)算電路中個(gè)結(jié)點(diǎn)的邏輯值并更新元件管腳的值。同時(shí)發(fā)出消息使所有元件將發(fā)生重繪,在元件重繪時(shí)由元件類自己的成員函數(shù)根據(jù)管腳值計(jì)算元件狀態(tài)繪制對(duì)應(yīng)圖形。

5 結(jié)論
本文在深入分析單片機(jī)需求的基礎(chǔ)上,對(duì)單片機(jī)建立系統(tǒng)模型并針對(duì)功能最為重要的、仿真運(yùn)行和電路仿真三個(gè)子系統(tǒng)的設(shè)計(jì)方法進(jìn)行詳細(xì)的論述。對(duì)詞法分析、語法分析、元件操作、元件連接以及電路狀態(tài)計(jì)算跟蹤等重要功能,設(shè)計(jì)了相關(guān)算法。由于單片機(jī)的實(shí)際應(yīng)用涉及到很多領(lǐng)域的相關(guān)知識(shí),本文不是非常成熟和完善。但同時(shí)我們看到單片機(jī)的應(yīng)用在單片機(jī)的教學(xué)過程中有著巨大的使用價(jià)值和深遠(yuǎn)的意義。

本文引用地址:http://m.butianyuan.cn/article/170525.htm

上一頁 1 2 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉