陳志英
(廈門理工學院 電氣工程與自動化學院, 福建 廈門 361024)
“單片機原理與應用”是電氣工程、自動化、電子信息、計算機、機械等工科專業(yè)非常重要的基礎教學課程,它也是一門知識性、應用性、實踐性很強的綜合性技術課程。通過該課程,目標是培養(yǎng)具有單片機應用系統軟硬件設計、分析、制作和調試能力的實踐型及創(chuàng)新型人才[1]。傳統的單片機課程教學主要存在三大問題:①“先理論講解,再動手實驗”的教學模式導致“教學—實驗”分離、“理論—實踐”不同步,不僅使學生理論理解困難,而且感覺枯燥乏味,使初學者感覺入門較難,難以培養(yǎng)興趣甚至厭學,最終造成該課程教學效果不理想;②實驗教學采用統一的單片機實驗箱(板),存在硬件電路固定、實驗內容固定、學生不能隨意更改、程序無法實時仿真調試、與工程實際應用脫節(jié)等缺點,很難培養(yǎng)學生的實踐動手能力與創(chuàng)造性思維;③缺乏單片機系統化設計的培養(yǎng),教學中通常將軟硬件分離介紹,加上實驗采用現成的電路板,基本不涉及硬件設計,大多只完成簡單、分塊的驗證性程序設計,導致學生硬件設計與復雜軟件設計能力薄弱,在構建實際的單片機應用系統時缺乏硬件平臺搭建與系統軟件調試能力,最終造成學生的單片機應用系統綜合設計能力嚴重不足[5]。
近幾年,有不少文獻提出了“項目式”單片機教學方法和利用Proteus與Keil軟件輔助單片機實踐教學[2~6].其中,雖有文獻討論Proteus與Keil的教學應用,但少有文獻討論“項目式”教學法與Proteus、Keil的結合教學,更沒有涉及實時在線聯合調試技術,采用的仿真方法還是傳統的用Keil編程編譯輸出hex文件后加載到Proteus,然后在Proteus中驗證程序的對錯,不能實時在線仿真調試,即不能實現單步運行、斷點設置等在線調試功能。
鑒于傳統教學模式存在的較大不足,以及現有的新型教學模式又存在不能實時在線調試的缺點,本文提出一種以基于Proteus與Keil聯調及項目導向的新型單片機教學模式。它的核心思想是將單片機課程教學圍繞具體應用項目展開,使項目設計貫穿整個教學過程,授課時將每個應用項目分解為進階式的多個子模塊,按照模塊化思路講解相關硬件軟件設計知識點,并采用Proteus與Keil軟件構成虛擬實驗平臺,實現“教師邊講邊指導、學生邊學邊實踐”的教學形式,達到理論與實踐教學的同步。
這種教學形式對學生來說,增強單片機學習的直觀性和真實感,激發(fā)他們的學習興趣與積極主動性,提高他們的學習成就感,最終在整體上提高學生的單片機綜合設計能力,使教學效率和教學質量得到大幅度提升;對教師來說,在普通機房或教室(學生自帶筆記本電腦)授課,不依賴于實驗室及單片機開發(fā)板,即可實現理論與實踐結合,并能及時了解學生學習單片機時存在的問題與不足,做到及時和有針對性的輔導,提高與鞏固教學效果;對學校來說,用虛擬的環(huán)境代替了物理的實驗箱,增強了實踐教學的便利性,節(jié)省了大量的硬件資源,并省去了大量的物理設備維護工作,大大減少了實踐教學成本。
本文以“多功能數字電子鐘”典型案例具體介紹基于Proteus與Keil仿真聯調技術的單片機應用項目設計的教學詳細過程。
當前,在單片機實踐教學中,普遍采用“先在Keil軟件中編寫源程序,然后編譯形成代碼,再通過在線燒寫器(下載器)載入到單片機教學實驗箱(板)中運行看結果”的模式,如圖1所示。這種實驗方法無法實現程序單步運行、設置斷點等實時在線仿真調試功能,存在難以查錯與修正等缺點,容易造成學生程序調試能力缺失。而在單片機工程應用開發(fā)中,為了調試方便,采用成本較高的系統開發(fā)平臺,如圖2所示,利用PC機上的集成開發(fā)環(huán)境IDE(Integrated Development Environment)與仿真器對應用程序進行實時在線仿真。但這種模式需要對每塊單片機開發(fā)板配備相應的仿真器,不適用于實驗室教學。
圖1 傳統的單片機實驗方式
圖2 常見的單片機應用系統開發(fā)平臺
Keil是一款常用于單片機設計的集成開發(fā)環(huán)境軟件,支持C語言和匯編程序設計。Proteus是一款可用于設計和開發(fā)單片機系統的仿真平臺軟件,可模擬仿真51、PIC、AVR系列等常用的MCU及其外圍電路,支持大量的外圍芯片和存儲器,并支持與Keil軟件的聯合仿真調試。由此,利用Keil與Proteus軟件可建立虛擬單片機實驗平臺,如圖3所示。
圖3 基于Proteus與Keil聯調技術的虛擬實驗平臺
應用程序在Keil中編寫,系統硬件由Proteus進行模擬,再利用Keil與Proteus間的軟件接口協議可實現將Keil中編寫的程序下載到Proteus硬件中進行實時在線仿真調試,運用Keil中的調試工具可觀察程序運行的每一步驟與結果。利用這種基于聯調技術的虛擬實驗平臺,學生只需在一臺電腦上就可隨時隨地完成單片機應用系統軟硬件設計與調試,而不受實驗室地點、開放時間、實驗器材等條件約束。
Proteus與Keil軟件要實現聯調技術,需對兩種軟件接口及PC機做以下幾點設置:
(1) 在Proteus安裝目錄下將VDM51.dll文件復制到Keil安裝目錄的C51BIN目錄中(如果沒有可以自己下載);
(2) 修改Keil安裝目錄下Tools.ini文件,在[C51]欄目下加入TDRV9=BINVDM51.DLL (“Proteus VSM Simulator”),其中“TDRV9”中的“9”要根據實際情況改寫,不要和已有的重復;
(3) 打開Proteus,加載相應的電路和hex文件,在Debug菜單中選中Use Remote Debug Monitor;
(4) 打開Keil,載入MCU的程序,選擇菜單Project Option for target “工程名”,在Debug選項中右欄上部的下拉菜單選中Proteus VSM Simulatior,再進入Setting,如果是同一臺機器IP名為127.0.0.1,如果不是同一臺機器則填另一臺機器的IP地址,端口號一定為8000;
(5) 注意,一定要把Keil的工程文件和Proteus的文件放在同一個目錄下;完成上述5個步驟,就可以開始調試了,Keil每調試一次,Proteus就會作出相應的動作。
為了培養(yǎng)學生的系統及模塊化概念,訓練學生的單片機應用系統綜合設計能力,項目教學實例應包括基本的輸入模塊(鍵盤)、輸出模塊(LCD或LED顯示)、具體應用功能模塊(例如電子鐘、溫度測量監(jiān)控、電壓電流測量等)。因此,“多功能數字電子鐘”系統要求實現以下功能:
(1) 系統能實現時間的正確走時,并在LCD上正確顯示日期、時間;
(2) 系統能實現對周圍環(huán)境的溫度測量,并在LCD上正確顯示溫度值;
(3) 系統能通過按鍵對日期、時間進行設置調整;
(4) 系統具有鬧鐘、秒表、星期顯示、指示燈等附加功能。
根據“多功能數字電子鐘”的功能要求,系統硬件可分為5大模塊:單片機(選擇51單片機AT89C51)、LCD1602顯示模塊、DS18B20溫度測量模塊(選擇)、DS1302時鐘模塊(時鐘模塊也可采用單片機的定時器實現)、鍵盤與LED指示燈模塊。系統整體結構如圖4所示。
圖4 “多功能數字電子鐘”系統框圖
打開Proteus的ISIS軟件,進行原理圖繪制,添加51單片機及外圍電路元件并連接,電路如圖5所示。LCD1602與單片機采用并行接口,將51單片機的P0口引腳P0.7-P0.0連接到LCD1602的數據引腳D7-D0,將P2口的P2.2、P2.1、P2.0分別連接到LCD1602的控制引腳E、RW、RS。DS18B20與單片機采用單總線接口,將51單片機的P3.4引腳連接至DS18B20的數據引腳DQ。DS1302與單片機采用I2C接口,將51單片機的P3.7、P3.6、P3.5引腳分別連接至DS1302的數據引腳I/O、時鐘引腳SCLK及復位引腳RST。51單片機P2口的高4位分別連接4個獨立式按鍵,P1口分別經驅動芯片74LS245連接8個發(fā)光二極管。
圖5 “多功能數字電子鐘”硬件電路原理圖
系統軟件采用模塊化思路設計,分別包括:LCD1602顯示子程序、DS18B20溫度測量子程序、DS1302時間讀取子程序、按鍵子程序及系統主程序。設計時,將各個模塊子程序單獨編程、調試,每個模塊調試成功正確無誤后,最后編寫系統主程序,進行各個模塊的綜合與聯調,實現系統所有功能的正確運行。系統軟件均在Keil C環(huán)境下編寫、編譯及調試。系統主程序、DS18B20子程序、按鍵子程序流程如圖6所示。
(a) 系統主程序 (b)按鍵子程序圖6 系統主程序、DS18B20子程序、按鍵子程序流程圖
C語言編程時,根據模塊化設計思路,建議學生應學會合理編寫自定義頭文件(.h文件),對系統使用到的I/O端口進行預定義可使系統的可讀性、可移植性大幅度提高,如此,當系統硬件端口發(fā)生變化時,只需修改I/O端口預定義文件,而不需要修改通篇程序里所涉及的端口。下面給出本系統對I/O端口定義文件ioset.h的部分參考程序:
//LCD1602端口定義
sbit RW=P2^1;
sbit RS=P2^0;
sbit E=P2^2;
#define LCD_data P0
//DS18B20端口定義
sbit DQ=P3^4;
//DS1302端口定義
sbit 1302_RST=P3^5;
sbit 1302_SCLK=P3^6;
sbit 1302_IO=P3^7;
將設計的項目程序在Keil μVision4集成開發(fā)環(huán)境上編譯調試,生成相應的HEX文件,并按照上文中的“聯調設置”步驟設置后,就可以開始系統實時在線仿真調試了,聯調界面如圖7所示。聯調支持所有的單步運行、斷點設置等調試工具,Keil里每執(zhí)行一步都可在Proteus里看到相應的單片機引腳高低電平變化、LCD顯示等現象,與此同時,用戶也可在Proteus中模擬硬件變化,如采用鼠標點擊按鍵元件模擬按鍵按下,點擊DS18B20元件的“―”和“+”使溫度減小與增加。
圖7 Keil與Proteus聯調界面
系統采用Keil與Proteus聯合仿真調試后,系統能正確可靠運行,走時準確,對系統按鍵、溫度等進行模擬按下或改變時,系統均能做出相應變化,LCD上均能正確顯示日期、時間、溫度等信息,其運行結果如圖8所示,當改變DS18B20的溫度值時,圖8(a)、(b)分別正確顯示了改變的溫度值。
(a)溫度為27.00°C時的系統運行結果
(b)溫度為29.00°C時的系統運行結果圖8 系統運行結果圖
經過幾年的教學實踐證明,采用基于Proteus與Keil聯調及項目導向法進行單片機教學能形象地讓學生親歷從系統硬件電路設計、軟件程序編寫到實時在線仿真調試的完整系統設計過程,收到了良好的教學效果,提高了整體教學質量。這種基于具有實時在線仿真調試功能的軟硬件虛擬仿真平臺的項目式教學使學生在程序設計與調試能力方面得到很好的鍛煉,極大地激發(fā)學生的學習興趣,調動了學生的主觀能動性,增強了學生獨自發(fā)現問題與解決問題的能力,從而最終大幅度提高了學生的綜合設計能力和創(chuàng)新能力?;赑roteus與Keil聯調的項目導向教學相對于傳統的單片機教學優(yōu)勢明顯,解決了傳統教學存在的缺陷,在高校的單片機教學中應大力的宣傳與推廣,本文教學實例“多功能數字電子鐘”項目涵蓋的基本模塊較多,大部分的單片機教學內容都可在該應用實例上進行教學或擴展教學,也可供高校同行或學生進行參考。