劉楊俊
(武漢大學(xué)珞珈學(xué)院電子信息系,湖北武漢430064)
Proteus是由英國Labcenter公司推出的嵌入式系統(tǒng)仿真開發(fā)軟件,它具有原理圖布圖、混合模式仿真、VSM嵌入式仿真以及PCB制板等功能[1,2]。該軟件有如下優(yōu)點:①能夠?qū)纹瑱C系統(tǒng)、數(shù)字電路和模擬電路構(gòu)成的混合電路進行設(shè)計和仿真;②支持匯編語言的編碼、調(diào)試或與第三方軟件Keil進行聯(lián)機編碼、調(diào)試;③軟件自帶的Ares設(shè)計系統(tǒng)可以進行PCB印刷電路板的設(shè)計。
基于Proteus和Keil的混合電路系統(tǒng)的設(shè)計與仿真過程可分為以下幾步:①在Proteus的平臺上進行電路原理圖的設(shè)計;②在Keil平臺上進行C51單片機系統(tǒng)源程序的編輯、編譯和調(diào)試,最后生成HEX類型的目標代碼文件[3];③在Proteus平臺上將目標代碼文件加載到單片機系統(tǒng)中進行實時仿真,并運用該軟件提供的虛擬儀表進行分析[4]。此外,Proteus還支持PCB板的設(shè)計。
原理圖是在Proteus ISIS環(huán)境中進行編輯繪制的,其使用方法與人們熟悉的Protel和EWB等軟件具有相似之處,很容易掌握。其中A/D轉(zhuǎn)換器采用了ADC0804。由于該芯片內(nèi)有輸出數(shù)據(jù)鎖存器,當與計算機連接時,轉(zhuǎn)換電路的輸出可以直接連接在CPU數(shù)據(jù)總線上,無須附加邏輯接口電路。顯示采用了LCD1602液晶顯示屏,可顯示16×2個字符。數(shù)字電壓表電路圖如圖1所示。
圖1 基于Proteus的數(shù)字電壓表電路圖
控制器U3采用了AT89C52單片機,數(shù)據(jù)總線P00~P07連接到U2 ADC0804的DB0~DB7以及LCD1602的D0~D7,和端分別接到ADC0804的、讀寫端,連接到,A12和A13分別連接到R/W讀寫端和RS數(shù)據(jù)指令端。接口電路采用可編程邏輯器件U1 GAL16V8A,對LCD1602和ADC0804進行編址。
我們使用ATMEL公司編譯工具WinCupl編寫代碼。當進入主界面后,新建一個項目文件,在彈出的對話框中,輸入源文件的名稱Gate Addr;將Device默認的virtual改為g16v8a;輸入引腳數(shù)10,單擊OK,輸出引腳數(shù)2,單擊OK,系統(tǒng)要求輸入中間節(jié)點數(shù)(這里不需要),填0,單擊OK。這樣系統(tǒng)自動新建了一個Gate Addr.PLD文件,并且顯示該文件。我們在INPUT PINS分割線下定義好地址總線和讀寫輸入端口,在OUTPUT PINS分割線下定義好地址邏輯和輸出端口。然后我們用Win-Sim對該邏輯關(guān)系進行波形仿真,仿真的波形如圖2所示。
圖2 可編程邏輯器件的波形仿真圖
如圖可見,當 A10、A9、A8=000 時,不論 WR和RD的值為多少,ADC0804的片選信號AD-CS為低,這時啟動 A/D轉(zhuǎn)換。當A10、A9、A8=001,并且WR和RD=0時,LCD1602片選信號LCD E為高,這時可以對液晶顯示屏進行操作。通過波形仿真,我們知道了該系統(tǒng)外設(shè)的地址邏輯是正確的。然后我們選中原理圖上的GAL16V8A,單擊彈出的對話框JEDEC Fuse Map File欄中的瀏覽圖標,裝入Gate Addr.JED文件,最后我們就可以撥動開關(guān)進行系統(tǒng)仿真了。
原理圖設(shè)計好之后,就可以針對原理圖進行程序設(shè)計。程序流程圖如圖3所示。
圖3 系統(tǒng)程序流程圖
我們采用Keil作為程序的編輯和編譯工具。主程序中首先設(shè)置好中斷0,并初始化LCD1602,然后顯示標題文字“DC Voltage is:”,接著啟動A/D轉(zhuǎn)換。結(jié)束以后,ADC0804給單片機發(fā)中斷信號,運行中斷服務(wù)程序,將采樣數(shù)取整存入vol z,將flag置1,返回到主程序中執(zhí)行條件語句,flag清零。然后調(diào)用LCD顯示子程序,將電壓值顯示出來。最后再啟動A/D轉(zhuǎn)換,重復(fù)上述循環(huán)。
在Proteus平臺上將目標代碼文件加載之后,即可進入動態(tài)仿真。為了觀察實際的測試效果,我們加入了一個由電源VCC與電位器RV1組成的激勵源,并用虛擬電壓表測出其大小,如圖1中的虛線框部分所示。虛擬電壓表測量的激勵源提供的電壓值可用來作為標準值,以便與設(shè)計的數(shù)字電壓表的測試結(jié)果進行對比。首先,應(yīng)對數(shù)字電壓表的準確度進行調(diào)整,即先調(diào)節(jié)RV1使虛擬電壓表讀數(shù)為2V,然后調(diào)節(jié)RV2,使數(shù)字電壓表的讀數(shù)也為2V,調(diào)整完畢后,即可對數(shù)字電壓表的非線性誤差進行測試。
針對學(xué)生在單片機課程中難以參與設(shè)計的細節(jié),本文提出了一種基于Proteus與PLD的數(shù)字電壓表的設(shè)計實例。這種先采用仿真,再移植到硬件電路的方法可以極大地提高設(shè)計與開發(fā)的效率,并為開放性、綜合性和創(chuàng)新性實驗提供了靈活,方便的實驗環(huán)境。在單片機系統(tǒng)應(yīng)用的教學(xué)演示和實用設(shè)計方面具有較好的輔助作用。
[1] 張宏偉,王新環(huán),王新.基于Proteus和Keil的單片機實驗教學(xué)改革[J].南京:電氣電子教學(xué)學(xué)報,2008.12(6)64-65,74
[2] 田社平,蔡萍,薛宇飏等.Proteus軟件在“檢測技術(shù)”課程教學(xué)中的應(yīng)用[J].南京:電氣電子教學(xué)學(xué)報,2009.12(6):30-31,75
[3] 喬建華,李臨生,田啟川.Proteus在單片機教學(xué)中的應(yīng)用分析[J].南京:電氣電子教學(xué)學(xué)報,2008.6(3):70-73
[4] 唐勇波,徐東輝.基于Proteus的單片機課程教學(xué)與試驗改革初探[J].宜春:宜春學(xué)院學(xué)報,2009.31(4):147-149