惠州工業科技學校 周彩云
單片機是電氣信息類專業一門重要的專業課,實踐性非常強,又非常抽象,學生普遍反映比較難學。通常,要做一次課堂演示實驗要準備計算機、仿真器或編程器、電源和實驗電路板等設備。如果用仿真器做實驗,稍有不慎,仿真頭就可能從實驗電路板中脫落而造成錯誤,甚至損壞設備。如果用編程器寫芯片的方法來驗證實驗結果,那么就得多次在實驗板與編程器之間拔、插芯片,很麻煩,效率低。即使勉強做,由于實驗電路板上的器件較小,學生很難看清現象,教學效果不佳。伴隨著計算機軟件技術的飛速發展,出現了大量的軟件仿真工具,本文介紹的Proteus軟件可以在計算機上進行單片機及其外圍器件的模擬仿真。
Proteus是英國Labcenter公司開發的電路分析與實物仿真軟件。它運行于Windows操作系統上,可以仿真、分析(SPICE)各種模擬器件和集成電路。它是目前最好的仿真單片機及外圍器件的工具。該軟件的特點是:

圖1 Proteus的工作界面

圖2 4位時鐘電路原理圖

圖3 選擇代碼生成工具
1.實現了單片機仿真和SPICE電路仿真相結合。具有模擬電路仿真、數字電路仿真、單片機及其外圍電路組成的系統的仿真、RS232動態仿真、I2C調試器、SPI調試器、鍵盤和LCD系統仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發生器等。
2.支持主流單片機系統的仿真。目前支持的單片機類型有:ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多種外圍芯片。
3.提供軟件調試功能。在硬件仿真系統中具有全速、單步、設置斷點等調試功能,同時可以觀察各個變量、寄存器等的當前狀態,因此在該軟件仿真系統中,也必須具有這些功能;同時支持第三方的軟件編譯和調試環境,如Keil C51 uVision2、MPLAB等軟件。

圖4 4位時鐘的流程圖
4.具有強大的原理圖繪制功能。
下面以AT89S51為控制芯片的4位時鐘為例,介紹怎樣利用PROTEUS軟件實現電路的硬件設計、軟件調試與系統仿真、實現單片機電路的功能要求,完成對控制方案的驗證。在單片機教學中利用以上過程可以讓學生方便地進行電路與程序調試,發現程序和電路設計中遇到的問題,引起學生的思考,進而掌握解決這些問題的思路和方法,克服了老師反復講解和演示弊端,實現了單片機的一體化教學。
1.電路原理圖設計。運行Proteus軟件進入其編輯環境,主界面如圖1所示。
點擊對象選擇區的P命令即彈出元器件選擇(Pick Devices)對話框,調入所需元件仿真庫。將電路中的所用到的元件從元器件庫中調出來,放到繪圖區并編輯其屬性,接著進行合理的布局后,就可以進行連接了。與用Protel軟件繪制原理圖類似,Proteus軟件也具有自動捕捉節點和自動布線的功能,連線時當標的指針靠近一個對象的引腳時,跟著鼠標的指針就會出現一個紅色小框,點擊鼠標左鍵就可畫線了,需要拐彎時點擊一下即可,在終點再點擊確認一下就畫出了一段導線,所有導線畫完后,再點擊工具欄的按鈕,即可出現可用的終端。在對象選擇器中的對象列表中,單擊POWER,在預覽窗口出現電源符號,在需要放置電源的地方單擊,即可放置電源符號。放置接地符號(地線)的方法與放置電源類似,在對象選擇列表中單擊GROUND,然后在需要接地符號的地方單擊,就可以了。添加完必要的電源和接地符號,原理圖的繪制就完成了,4位時鐘電路原理圖如圖2所示。

圖5 4位時鐘軟件仿真效果
2.軟件編程。程序的流程如圖3所示,具體完成程序及生成代碼的方法如下:
通過菜單點擊“源代碼→添加/刪除源文件”,彈出對話框,如圖3所示。
在“代碼生成工具”的下拉菜單中選擇代碼生成工具ASEM51,然后點擊“新建”按鈕,彈出選擇文件對話框,輸入4位時鐘程序的文件名保存并打開文件即可在PROTEUS提供的文體編程器中編輯源程序。
程序編好后保存,再通過菜單“源代碼→全部編譯”編譯匯編源程序,生成目標代碼文件。若編譯失敗,可對程序進行修改調試直至編譯匯編成功,生成:4位時鐘.Hex文件。
完整的4位時鐘程序如下(流程圖見圖4):
ORG 0000H
LJMP START
ORG 0030H
START:MOV 40H,#00H ;軟件計數器清零
MOV 41H,#0F7H ;位選地址存儲單元
MOV 42H,#50H ;數碼管顯存單元首地址
MOV 50H,#00H ;顯示單元,秒個位
MOV 51H,#00H ;顯示單元,秒十位
MOV 52H,#00H ;顯示單元,分個位
MOV 53H,#00H ;顯示單元,分十位
MOV TMOD,#01H ;設置定時器T0工作在方式1
MOV TH0,#0ECH ;設定5ms初值
MOV TL0,#78H
SETB TR0 ;啟動定時/計數器T0
MAIN:JNB TF0,$ ;不斷查詢T0有無溢出
MOV TH0,#0ECH ;重新置初值
MOV TL0,#78H
CLR TF0 ;溢出標志位清零
;;;;;;;;;;5ms定時時間到,執行相應的服務程序;;;;;;;;;;
MOV P2,#0FFH ;關數碼管顯示,軟件仿真的使用,實際可省略
LCALL DISP ;每5ms調用1次數碼管顯示子程序
INC 40H ;軟件計數器加1
MOV A,40H
CJNE A,#200,MAIN ;判斷是否到200次,即1S,5ms*200次=1秒
MOV 40H,#00H ;軟件計數器清零
LCALL TIME ;分秒加1計時子程序
LJMP MAIN
;;;;分秒加1計時子程序;;;;;
TIME:INC 50H ;秒個位加1
MOV A,50H
CJNE A,#10,TIME1 ;判斷秒個位是否等于10
MOV 50H,#00H ;秒個位等于10,將秒個位清零
INC 51H ;秒十位加1
MOV A,51H
CJNE A,#6,TIME1 ;判斷秒十位是否等于6
MOV 51H,#00H ;秒十位等于6,將秒十位清零
INC 52H ;分個位加1
MOV A,52H
CJNE A,#10,TIME1 ;判斷分個位是否等于10
MOV 52H,#00H ;分個位等于10,將分個位清零
INC 53H ;分十位加1
MOV A,53H
CJNE A,#6,TIME1 ;判斷分十位是否等于6
MOV 53H,#00H ;分十位等于6,將分十位清零
TIME1:RET
;;;;;顯示子程序;;;;;
DISP:MOV R0,42H ;數碼管顯示位送到R0
MOV A,@R0 ;將顯示單元的數據送到A
MOV DPTR,#TAB ;將表地址送到DPTR
MOVC A,@A+DPTR ;查表
MOV P0,A ;數據送到P0顯示
MOV A,41H ;將位選地址送到累加器A
MOV P2,A ;將位選數據送到P2
CJNE A,#0FEH, DISP1 ;判斷是否選到最后一位數碼管
MOV 41H,#0F7H ;是,則重新設置選擇第一位數碼管
MOV 42H,#50H ;重新設置顯示單元為秒個位
JMP DISP2 DISP1:RR A ;沒到最后一位數碼管,則右移選擇下一位數碼管
MOV 41H,A ;移位后重新送到位選地址寄存單元
INC 42H ;顯示單元加1
DISP2:RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;顯示數字0-5的數據
DB 82H,0F8H,80H,90H
;顯示數字6~9的數據
END
3.系統仿真
運行Proteus軟件,打開之前所畫電路圖“4dpy.dsn”文件。雙擊AT89S51芯片,將生成的“4位時鐘.hex”文件打開,按確定后返回Proteus軟件界面。
通過以上實例的仿真過程,可以看出利用PROTEUS虛擬實驗環境,克服了硬件平臺的束縛,很好的解決學生理論與實踐脫節的矛盾。在模擬實驗中做實驗,可以將大量教學信息直接地表現出來,調動了學生的學習積極性和主動性,極大地提高了單片機實驗的教學效果。