袁正道,趙 恒,王家斌
(1.河南廣播電視大學(xué);2.中船重工713 研究所,鄭州 450000)
單片機是電子、機電一體化、自動控制等專業(yè)的主干課程之一,在生產(chǎn)實踐中有廣泛應(yīng)用,而單片機的教學(xué)創(chuàng)新也成為各個學(xué)校的教研熱點。單片機是一門理論聯(lián)系實踐的課程,注重培養(yǎng)學(xué)生動手能力和解決實際問題的能力,但是由于學(xué)校擴招和實訓(xùn)條件的限制,在教學(xué)中很難達到預(yù)期效果。由于其外設(shè)豐富、處理速度高以及可靠性強等優(yōu)勢,PIC 單片機在微控制器領(lǐng)域一直占有相當?shù)姆蓊~。但是鑒于PIC 其開發(fā)工具相對于51、AVR 等單片機較為昂貴,很多學(xué)校由于經(jīng)費的原因并沒有建立起相應(yīng)的實訓(xùn)室。本文就提出了一種利用Proteus 仿真技術(shù)解決上述問題的方案。
Proteus 軟件是英國Lab-center electronics 公司開發(fā)的EDA 軟件,從上世紀80年代出現(xiàn)以來已經(jīng)有20 多年的歷史,在全球單片機及嵌入式仿真領(lǐng)域有著廣泛的應(yīng)用。此軟件中元件庫種類有3 萬種之多,僅微控制器就包含各類51 系列、AVR、PIC 及ARM7 等多種類型,并且有豐富的虛擬測試工具如雙通道示波器、信號發(fā)生器、萬用表和各類專用調(diào)試工具,可以滿足絕大多數(shù)仿真需求。更為重要的是此軟件支持單步調(diào)試功能,不但可以在調(diào)試過程中設(shè)置斷點并查看變量值,還可以精確顯示運行時間(精確到0.1mS),對于定時器等外設(shè)的計算和開發(fā)有不可比擬的優(yōu)勢。
PIC 是美國Microchip 公司的系列單片機產(chǎn)品的前綴,PIC 由于其硬件系統(tǒng)設(shè)計簡潔,指令系統(tǒng)精煉,在所有單片機中它是最容易上手學(xué)習(xí)的品種之一。此系列單片機有采用哈佛總線結(jié)構(gòu)、精簡指令(RISC)技術(shù)、低功耗、外設(shè)豐富等優(yōu)勢在實際應(yīng)用中也受到廣大開發(fā)者的歡迎。
PIC 單片機的開發(fā)環(huán)境和編譯軟件分屬與不同的公司,開發(fā)環(huán)境選用Microchip 公司的MPLAB 集成開發(fā)環(huán)境,可以進行C 語言和匯編語言的編輯操作,而對C 語言的編譯業(yè)界普遍選用HI-TECH 公司的PICC 編譯器或者是IAR 公司的IAR-PIC 編譯器,而且編譯軟件可以嵌入MPLAB 集成開發(fā)環(huán)境中。編譯生成的HEX 文件可以直接燒寫進單片機中運行,生成的COF 文件內(nèi)部包含有源代碼、注釋、編譯后地址分配以及一些反編譯數(shù)據(jù),可以方便地進行逐步調(diào)試。在Proteus 軟件中有針對PIC 單片機的特有窗口。如:
源代碼窗口,可以顯示用戶編輯的源代碼,并可以逐行調(diào)試。
變量窗口,能實時顯示出全局變量和斷點所在處的局部變量值。
內(nèi)部文件寄存器數(shù)值,特別是在匯編語言編程時可以看到寄存器值。
EEPROM 數(shù)值窗口,在用戶使用內(nèi)部EEPROM 區(qū)域是直觀看到寫入內(nèi)部的數(shù)據(jù)。
仿真時間以及斷點間隔時間顯示。當代碼中設(shè)置調(diào)試斷點時軟件在斷點處停止并提示從開始仿真到斷點處運行時間以及上次斷點到本次斷點的時間間隔,可以很方便地進行定時器時長驗證和修訂。
定時器和中斷是單片機開發(fā)過程中必須要用到的外設(shè),PIC 單片機由于其片內(nèi)資源豐富,其中斷系統(tǒng)有多達14 個中斷源,對于中斷系統(tǒng)的開發(fā)和多個中斷源的協(xié)調(diào)工作也成為了學(xué)生和初學(xué)者遇到的最大難題。PIC 內(nèi)部也包含3 個不同類型的定時器,每個定時器也有其各自的特點。如果能找到一個實際項目能讓三個定時器協(xié)同工作,并使用中斷系統(tǒng)作為支持,就能充分調(diào)動學(xué)生積極性并培養(yǎng)學(xué)生的自主學(xué)習(xí)能力。
筆者在教學(xué)過程中設(shè)計的項目為“自行車碼表的開發(fā)”,項目要求實現(xiàn)數(shù)碼管顯示自行車騎行過程中的時速及總里程數(shù)顯示。
內(nèi)部資源使用分配方面充分利用單片機內(nèi)部設(shè)備,三個定時器中定時器0 作為計數(shù)功能,從外部引腳上采集自行車車輪轉(zhuǎn)動引發(fā)的脈沖(軟件中用周期性脈沖模擬),從而計量在單位時間內(nèi)輪子轉(zhuǎn)動次數(shù)。定時器1 由于其定時周期長并帶有獨立低頻振蕩器,可以作為精確秒定時,作為單位時間發(fā)生器。定時器2 從內(nèi)部結(jié)構(gòu)上就非常方便作為短周期發(fā)生器,則分配作為數(shù)碼管刷新顯示觸發(fā)。精簡代碼列出如下:
程序中定時器1 中斷周期為1S,在中斷處理程序內(nèi)將輪子轉(zhuǎn)動圈數(shù)換算成速度,單位Km/h。開發(fā)環(huán)境應(yīng)用Microchip公司的專用開發(fā)環(huán)境MPLAB,編譯器采用第三方編譯器HITECH 公司的PICC 編譯器,如圖1 所示。
圖1 PIC 單片機開發(fā)及編譯環(huán)境
圖2 Proteus 軟件仿真調(diào)試效果
圖3 虛擬串口軟件及Proteus 軟件內(nèi)串口控件
編譯產(chǎn)生出HEX 和COF 兩種文件類型,其中HEX 文件為十六進制文件可以直接進行芯片燒寫,但在Proteus 無法進行調(diào)試,只能仿真出運行效果。COF 文件內(nèi)部帶有源代碼及一些反編譯數(shù)據(jù),可以在Proteus 環(huán)境中進行代碼調(diào)試、設(shè)置斷點和觀察內(nèi)部變量值,非常方便進行前期開發(fā)時漏洞查找。
仿真效果如圖2 所示,圖中列舉了仿真運行的顯示內(nèi)容,大致有代碼窗口、變量查看窗口、仿真效果窗口和仿真總時間以及斷點時間顯示。
從圖中可以看到硬件上選用了PIC16F877 作為主控芯片,定時器1 輸入引腳外接有獨立晶振,采用了四位數(shù)碼管作為顯示,顯示內(nèi)容為實時速度7.92Km/h。Proteus 軟件使用方面,運用調(diào)試代碼窗口在中斷函數(shù)部分設(shè)置斷點,全速運行可以停留在斷點位置供學(xué)生觀察調(diào)試效果,變量顯示窗口上顯示出局部和全局變量在運行至斷點時的瞬時值,可以作為程序效果判斷標準。在窗口下方顯示有程序運行總時間和從上次斷點到本次斷點之間的時間間隔。
當Proteus 軟件內(nèi)單片機需要與PC 端上位機進行通信時需要用到串口控件COMPIM 如圖3 所示。
在電路中將串口控件與單片機串口引腳對應(yīng)連接,內(nèi)部設(shè)置好波特率、串口號、校驗等參數(shù)。PC 端用串口虛擬工具虛擬出新的串口編號,虛擬工具虛擬出了串口2 和串口3 而且兩個串口自動連接。完成虛擬工作后PC 端可使用COM2,而Proteus 內(nèi)部可以使用串口3,從而實現(xiàn)下位機與上位機的通信。
雖然Proteus 軟件在教學(xué)中發(fā)揮了重要的作用,給每個學(xué)生提供了學(xué)習(xí)單片機的直觀平臺,但由于軟件仿真的條件限制,不可避免地存在一些缺陷。
首先,Proteus 軟件可以提供市面上常見的元件,但有很多元件庫中并未包含。如工控常用的AD7705、一些霍爾芯片等并沒有加入元件庫,需要找到其他芯片作為替代。
其次,軟件仿真時也會出現(xiàn)一些實際運行中存在的錯誤。這些錯誤在掃描顯示和關(guān)于IIC 總線時序仿真過程中容易出現(xiàn),需要仔細調(diào)整延時數(shù)值加以避免。
最后,軟件仿真并不能仿真出真實電路板所出現(xiàn)的外界干擾、電源波動以及功耗等問題。這類問題屬于經(jīng)驗問題需要工程師在實踐中總結(jié)和改進。
本文總結(jié)了在PIC 單片機教學(xué)中出現(xiàn)的問題,并提出了利用Proteus 軟件仿真進行教學(xué)的方案。文中詳細闡述了一項項目實例,通過項目化教學(xué)科研使學(xué)生體會到將單片機的硬件和軟件仿真設(shè)計,體現(xiàn)了“教學(xué)做”一體化理念,激發(fā)了學(xué)習(xí)興趣取得了較好的教學(xué)效果。
[1]陸曉琳.基于PIC16F648的智能尋跡小車設(shè)計與實現(xiàn)[J].電測與儀表,2011,(7).
[2]吳清榮,丁躍軍.PIC 單片機低功耗設(shè)計[J].制造業(yè)自動化,2011,(5).
[3]王通生,賈存良,張逢雪,丁非.基于PIC16F877A的遠程煤礦瓦斯監(jiān)測系統(tǒng)[J].煤礦機械,2011,(5).
[4]肖海英,孫玉紅.Proteus 仿真在高職《高頻電子技術(shù)》教學(xué)中的應(yīng)用[J].華東科技:學(xué)術(shù)版,2013,(1).
[5]徐涢基.基于μC/OS-Ⅱ和LPC2124 在keil4 與Proteus 中的應(yīng)用仿真[J].中國科技博覽,2013,(1).