惠州工業(yè)科技學(xué)校 周彩云
單片機(jī)是電氣信息類專業(yè)一門重要的專業(yè)課,實(shí)踐性非常強(qiáng),又非常抽象,學(xué)生普遍反映比較難學(xué)。通常,要做一次課堂演示實(shí)驗(yàn)要準(zhǔn)備計(jì)算機(jī)、仿真器或編程器、電源和實(shí)驗(yàn)電路板等設(shè)備。如果用仿真器做實(shí)驗(yàn),稍有不慎,仿真頭就可能從實(shí)驗(yàn)電路板中脫落而造成錯(cuò)誤,甚至損壞設(shè)備。如果用編程器寫芯片的方法來驗(yàn)證實(shí)驗(yàn)結(jié)果,那么就得多次在實(shí)驗(yàn)板與編程器之間拔、插芯片,很麻煩,效率低。即使勉強(qiáng)做,由于實(shí)驗(yàn)電路板上的器件較小,學(xué)生很難看清現(xiàn)象,教學(xué)效果不佳。伴隨著計(jì)算機(jī)軟件技術(shù)的飛速發(fā)展,出現(xiàn)了大量的軟件仿真工具,本文介紹的Proteus軟件可以在計(jì)算機(jī)上進(jìn)行單片機(jī)及其外圍器件的模擬仿真。
Proteus是英國Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路。它是目前最好的仿真單片機(jī)及外圍器件的工具。該軟件的特點(diǎn)是:
圖1 Proteus的工作界面
圖2 4位時(shí)鐘電路原理圖
圖3 選擇代碼生成工具
1.實(shí)現(xiàn)了單片機(jī)仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。
2.支持主流單片機(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類型有:ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多種外圍芯片。
3.提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil C51 uVision2、MPLAB等軟件。
圖4 4位時(shí)鐘的流程圖
4.具有強(qiáng)大的原理圖繪制功能。
下面以AT89S51為控制芯片的4位時(shí)鐘為例,介紹怎樣利用PROTEUS軟件實(shí)現(xiàn)電路的硬件設(shè)計(jì)、軟件調(diào)試與系統(tǒng)仿真、實(shí)現(xiàn)單片機(jī)電路的功能要求,完成對控制方案的驗(yàn)證。在單片機(jī)教學(xué)中利用以上過程可以讓學(xué)生方便地進(jìn)行電路與程序調(diào)試,發(fā)現(xiàn)程序和電路設(shè)計(jì)中遇到的問題,引起學(xué)生的思考,進(jìn)而掌握解決這些問題的思路和方法,克服了老師反復(fù)講解和演示弊端,實(shí)現(xiàn)了單片機(jī)的一體化教學(xué)。
1.電路原理圖設(shè)計(jì)。運(yùn)行Proteus軟件進(jìn)入其編輯環(huán)境,主界面如圖1所示。
點(diǎn)擊對象選擇區(qū)的P命令即彈出元器件選擇(Pick Devices)對話框,調(diào)入所需元件仿真庫。將電路中的所用到的元件從元器件庫中調(diào)出來,放到繪圖區(qū)并編輯其屬性,接著進(jìn)行合理的布局后,就可以進(jìn)行連接了。與用Protel軟件繪制原理圖類似,Proteus軟件也具有自動(dòng)捕捉節(jié)點(diǎn)和自動(dòng)布線的功能,連線時(shí)當(dāng)標(biāo)的指針靠近一個(gè)對象的引腳時(shí),跟著鼠標(biāo)的指針就會出現(xiàn)一個(gè)紅色小框,點(diǎn)擊鼠標(biāo)左鍵就可畫線了,需要拐彎時(shí)點(diǎn)擊一下即可,在終點(diǎn)再點(diǎn)擊確認(rèn)一下就畫出了一段導(dǎo)線,所有導(dǎo)線畫完后,再點(diǎn)擊工具欄的按鈕,即可出現(xiàn)可用的終端。在對象選擇器中的對象列表中,單擊POWER,在預(yù)覽窗口出現(xiàn)電源符號,在需要放置電源的地方單擊,即可放置電源符號。放置接地符號(地線)的方法與放置電源類似,在對象選擇列表中單擊GROUND,然后在需要接地符號的地方單擊,就可以了。添加完必要的電源和接地符號,原理圖的繪制就完成了,4位時(shí)鐘電路原理圖如圖2所示。
圖5 4位時(shí)鐘軟件仿真效果
2.軟件編程。程序的流程如圖3所示,具體完成程序及生成代碼的方法如下:
通過菜單點(diǎn)擊“源代碼→添加/刪除源文件”,彈出對話框,如圖3所示。
在“代碼生成工具”的下拉菜單中選擇代碼生成工具ASEM51,然后點(diǎn)擊“新建”按鈕,彈出選擇文件對話框,輸入4位時(shí)鐘程序的文件名保存并打開文件即可在PROTEUS提供的文體編程器中編輯源程序。
程序編好后保存,再通過菜單“源代碼→全部編譯”編譯匯編源程序,生成目標(biāo)代碼文件。若編譯失敗,可對程序進(jìn)行修改調(diào)試直至編譯匯編成功,生成:4位時(shí)鐘.Hex文件。
完整的4位時(shí)鐘程序如下(流程圖見圖4):
ORG 0000H
LJMP START
ORG 0030H
START:MOV 40H,#00H ;軟件計(jì)數(shù)器清零
MOV 41H,#0F7H ;位選地址存儲單元
MOV 42H,#50H ;數(shù)碼管顯存單元首地址
MOV 50H,#00H ;顯示單元,秒個(gè)位
MOV 51H,#00H ;顯示單元,秒十位
MOV 52H,#00H ;顯示單元,分個(gè)位
MOV 53H,#00H ;顯示單元,分十位
MOV TMOD,#01H ;設(shè)置定時(shí)器T0工作在方式1
MOV TH0,#0ECH ;設(shè)定5ms初值
MOV TL0,#78H
SETB TR0 ;啟動(dòng)定時(shí)/計(jì)數(shù)器T0
MAIN:JNB TF0,$ ;不斷查詢T0有無溢出
MOV TH0,#0ECH ;重新置初值
MOV TL0,#78H
CLR TF0 ;溢出標(biāo)志位清零
;;;;;;;;;;5ms定時(shí)時(shí)間到,執(zhí)行相應(yīng)的服務(wù)程序;;;;;;;;;;
MOV P2,#0FFH ;關(guān)數(shù)碼管顯示,軟件仿真的使用,實(shí)際可省略
LCALL DISP ;每5ms調(diào)用1次數(shù)碼管顯示子程序
INC 40H ;軟件計(jì)數(shù)器加1
MOV A,40H
CJNE A,#200,MAIN ;判斷是否到200次,即1S,5ms*200次=1秒
MOV 40H,#00H ;軟件計(jì)數(shù)器清零
LCALL TIME ;分秒加1計(jì)時(shí)子程序
LJMP MAIN
;;;;分秒加1計(jì)時(shí)子程序;;;;;
TIME:INC 50H ;秒個(gè)位加1
MOV A,50H
CJNE A,#10,TIME1 ;判斷秒個(gè)位是否等于10
MOV 50H,#00H ;秒個(gè)位等于10,將秒個(gè)位清零
INC 51H ;秒十位加1
MOV A,51H
CJNE A,#6,TIME1 ;判斷秒十位是否等于6
MOV 51H,#00H ;秒十位等于6,將秒十位清零
INC 52H ;分個(gè)位加1
MOV A,52H
CJNE A,#10,TIME1 ;判斷分個(gè)位是否等于10
MOV 52H,#00H ;分個(gè)位等于10,將分個(gè)位清零
INC 53H ;分十位加1
MOV A,53H
CJNE A,#6,TIME1 ;判斷分十位是否等于6
MOV 53H,#00H ;分十位等于6,將分十位清零
TIME1:RET
;;;;;顯示子程序;;;;;
DISP:MOV R0,42H ;數(shù)碼管顯示位送到R0
MOV A,@R0 ;將顯示單元的數(shù)據(jù)送到A
MOV DPTR,#TAB ;將表地址送到DPTR
MOVC A,@A+DPTR ;查表
MOV P0,A ;數(shù)據(jù)送到P0顯示
MOV A,41H ;將位選地址送到累加器A
MOV P2,A ;將位選數(shù)據(jù)送到P2
CJNE A,#0FEH, DISP1 ;判斷是否選到最后一位數(shù)碼管
MOV 41H,#0F7H ;是,則重新設(shè)置選擇第一位數(shù)碼管
MOV 42H,#50H ;重新設(shè)置顯示單元為秒個(gè)位
JMP DISP2 DISP1:RR A ;沒到最后一位數(shù)碼管,則右移選擇下一位數(shù)碼管
MOV 41H,A ;移位后重新送到位選地址寄存單元
INC 42H ;顯示單元加1
DISP2:RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;顯示數(shù)字0-5的數(shù)據(jù)
DB 82H,0F8H,80H,90H
;顯示數(shù)字6~9的數(shù)據(jù)
END
3.系統(tǒng)仿真
運(yùn)行Proteus軟件,打開之前所畫電路圖“4dpy.dsn”文件。雙擊AT89S51芯片,將生成的“4位時(shí)鐘.hex”文件打開,按確定后返回Proteus軟件界面。
通過以上實(shí)例的仿真過程,可以看出利用PROTEUS虛擬實(shí)驗(yàn)環(huán)境,克服了硬件平臺的束縛,很好的解決學(xué)生理論與實(shí)踐脫節(jié)的矛盾。在模擬實(shí)驗(yàn)中做實(shí)驗(yàn),可以將大量教學(xué)信息直接地表現(xiàn)出來,調(diào)動(dòng)了學(xué)生的學(xué)習(xí)積極性和主動(dòng)性,極大地提高了單片機(jī)實(shí)驗(yàn)的教學(xué)效果。