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