王東霞 溫秀蘭 黃家才 吳愛萍
南京工程學(xué)院 江蘇南京 211167
單片機課程是自動控制、測控技術(shù)與儀器、計算機科學(xué)與技術(shù)、應(yīng)用電子技術(shù)、機電一體化、電氣工程及其自動化等專業(yè)的一門專業(yè)基礎(chǔ)課,是理論與實踐結(jié)合非常緊密的課程。主要學(xué)習(xí)單片機內(nèi)部結(jié)構(gòu),引腳功能、指令系統(tǒng)、程序設(shè)計、片內(nèi)外設(shè)功能、外部接口擴展技術(shù)及系統(tǒng)軟硬件設(shè)計方法。在傳統(tǒng)的按教材內(nèi)容講授理論的教學(xué)模式下,學(xué)生被動學(xué)習(xí),難以理解相關(guān)的知識點,教學(xué)效果不理想[1]。為實現(xiàn)應(yīng)用型人才的培養(yǎng)目標(biāo),作為一名專業(yè)教師,筆者一直致力于對該課程的改革進行探索。教學(xué)理念從以“教”為主轉(zhuǎn)向以“學(xué)”為主,確立“以生為本、以學(xué)為主,重在動手實踐”的教學(xué)理念并貫穿于課程建設(shè)的全過程。
從多年教學(xué)經(jīng)驗看,學(xué)生在學(xué)習(xí)過程中存在的問題主要集中在以下幾方面。一是單片機學(xué)習(xí)中,學(xué)生編程能力較薄弱,很大的原因是練習(xí)量不夠,指令系統(tǒng)在編程練習(xí)過程中才能熟悉掌握,由于學(xué)時有限,教師沒有更多時間帶學(xué)生練習(xí),而大多數(shù)學(xué)生的學(xué)習(xí)主動性較差,課程進度緊,造成學(xué)生還沒有真正消化吸收又要進行下面的新內(nèi)容的學(xué)習(xí)。二是在學(xué)習(xí)外設(shè)及硬件接口技術(shù)時,多偏重于理論學(xué)習(xí),實驗也均在實驗箱上完成電路連線,造成學(xué)生對硬件電路接口技術(shù)不能真正理解,編程方面自然更差。學(xué)生常常生搬硬套別人的程序,若硬件電路一致,現(xiàn)象正確,就結(jié)束學(xué)習(xí);若硬件電路不一致,現(xiàn)象不正確,則束手無策[2]。所以除了個別好學(xué)的學(xué)生外,整體學(xué)習(xí)效果不好。所以,針對以上問題,為了提高學(xué)生應(yīng)用單片機開發(fā)系統(tǒng)的能力,提出在課堂教學(xué)中引入編譯調(diào)試軟件以及Proteus硬件仿真調(diào)試環(huán)境,可以較好地解決課堂教學(xué)中實例演示以及實驗教學(xué)中電路設(shè)計的問題。
傳統(tǒng)的教學(xué)方式采用的是教師在教室內(nèi)按照教材傳授理論知識,按照先后順序講述內(nèi)部結(jié)構(gòu)、匯編語言指令、程序設(shè)計方法、接口部件和設(shè)計實例等內(nèi)容,教學(xué)形式較單一,學(xué)生在學(xué)習(xí)過程中難以抓住學(xué)習(xí)重點,導(dǎo)致部分學(xué)生對單片機的學(xué)習(xí)產(chǎn)生“畏懼”心理,甚至喪失對單片機學(xué)習(xí)的興趣和熱情,造成教學(xué)效果越來越差。
單片機的教學(xué)內(nèi)容從系統(tǒng)角度出發(fā)將單片機內(nèi)容劃分為硬件結(jié)構(gòu)、軟件程序、外部擴展三大模塊[3],每個內(nèi)容模塊又劃分有不同的知識層次子模塊。如硬件結(jié)構(gòu)模塊劃分為單片機核心基礎(chǔ)層(包括中央處理器、寄存器、存儲器結(jié)構(gòu)、端口等)和片內(nèi)功能層子模塊(包括中斷、定時器、串口等),軟件程序模塊包括指令基礎(chǔ)子模塊和基礎(chǔ)程序設(shè)計子模塊等。在課程講授開始讓學(xué)生對單片機三大模塊的關(guān)系有初步的感受,并在后期交叉講授過程中不斷強化認(rèn)識,建立知識與系統(tǒng)的概念。
內(nèi)部硬件部分比較抽象,學(xué)生一開始接觸不容易懂。先讓學(xué)生熟悉概念,這部分內(nèi)容可以與匯編指令系統(tǒng)的學(xué)習(xí)相互補充,在學(xué)習(xí)匯編指令系統(tǒng)時強調(diào)硬件核心基礎(chǔ)層部件的功能,加強學(xué)生對這部分硬件功能的認(rèn)識。
單片機系統(tǒng)的開發(fā)離不開軟件程序的編寫,單片機的程序設(shè)計主要通過匯編指令系統(tǒng)或C51實現(xiàn)。
2.2.1 匯編指令系統(tǒng)
不同的單片機有不同的匯編指令系統(tǒng)。匯編指令要在調(diào)試環(huán)境中親眼看到直觀的運行結(jié)果、整個運行過程,體會每條指令的功能以及指令運行時存儲器、寄存器中內(nèi)容的變化,做到軟件硬件統(tǒng)一。匯編語言程序設(shè)計借助調(diào)試開發(fā)環(huán)境完成程序編寫的語法檢查、單步調(diào)試與結(jié)果觀察發(fā)現(xiàn)邏輯錯誤,而且這部分內(nèi)容的學(xué)習(xí)要在大量的實例程序調(diào)試和獨立程序編寫情況下完成,編程基礎(chǔ)打牢固,才能更好地學(xué)習(xí)后面的應(yīng)用。
2.2.2 單片機C語言
C語言具有功能豐富的庫函數(shù),運算速度快,編譯效率高,有良好的可移植性,而且可以實現(xiàn)直接對系統(tǒng)硬件的控制。對單片機的指令系統(tǒng)不要求了解,僅要求對單片機的存儲器結(jié)構(gòu)有初步了解,至于寄存器分配、不同存儲器的尋址及數(shù)據(jù)類型等細(xì)節(jié)均由編譯器管理。但占用存儲空間大、對硬件控制不靈活等,為此,編寫出高速度、高效率、可移植性強的單片機程序,集合C語言與匯編語言各自的優(yōu)勢進行混合編程。
2.2.3 Proteus仿真軟件的應(yīng)用
當(dāng)進入單片機片內(nèi)功能模塊學(xué)習(xí)時,會涉及單片機硬件部分。在單片機的課堂教學(xué)中適當(dāng)引入wave或Keil開發(fā)環(huán)境及Proteus硬件仿真軟件[4],Proteus軟件實現(xiàn)硬件電路圖的設(shè)計繪制和程序加載,wave和keil軟件實現(xiàn)程序編寫和編譯。用其編寫軟件、設(shè)計電路和虛擬仿真不僅可以培養(yǎng)學(xué)生嚴(yán)謹(jǐn)仔細(xì)的編寫指令和設(shè)計硬件電路的態(tài)度,還可以使枯燥的單片機學(xué)習(xí)變得直觀、形象和生動,激發(fā)學(xué)生學(xué)習(xí)的興趣和主動性,提高教學(xué)的效果,還可以縮短開發(fā)時間,節(jié)約硬件成本,使開發(fā)的初期過程變得簡單、直觀。
片內(nèi)功能模塊包括中斷、定時器、串口及端口,要掌握的是概念和功能應(yīng)用。這部分本屬于單片機內(nèi)部硬件結(jié)構(gòu),但是由于片內(nèi)外設(shè)的應(yīng)用離不開軟件程序的支持,故一般把這部分內(nèi)容的學(xué)習(xí)安排在指令系統(tǒng)和程序設(shè)計之后。片內(nèi)功能模塊中由于有端口部分,在學(xué)習(xí)時把端口和中斷、定時器及串口功能相結(jié)合,可以很好地實現(xiàn)對片內(nèi)功能模塊知識的掌握。例如,采用端口連接一個或多個發(fā)光二極管進行亮滅控制可以實現(xiàn)中斷功能、定時計數(shù)功能及串行通信功能的程序編寫及驗證。
外部中斷功能與端口的結(jié)合。以MCS51系列的AT89S51單片機為例,選擇P1端口8個引腳通過限流電阻分別連接一個發(fā)光二極管(如圖1所示)。在硬件電路的設(shè)計連接時,還會就限流電阻的取值問題與學(xué)生討論。因為單片機系統(tǒng)的開發(fā)是一個軟硬件結(jié)合的實現(xiàn),硬件電路的連接設(shè)計也是必須掌握的一種技能。如果學(xué)生前期電路原理、模擬電子及數(shù)字電子等課程的學(xué)習(xí)不夠扎實,勢必影響單片機硬件系統(tǒng)設(shè)計的理解和掌握,硬件電路不能真正理解,軟件編寫就不可能通透。例如,可以用定時器控制發(fā)光二極管間隔一定時間輪流點亮,硬件電路如圖1所示,調(diào)試結(jié)果如圖2所示,是由定時器控制P1端口接的8個LED燈間隔1S循環(huán)點亮的電路和燈點亮過程。還可以通過外部中斷引腳上的按鍵控制發(fā)光二極管的亮滅。如圖3所示是通過一個按鍵連接在外部中斷源上,并由外部中斷0控制輸入單次脈沖由P1端口的8個LED燈亮狀態(tài),顯示按鍵次數(shù)1,2,3,4,5,6。外部中斷的中斷功能應(yīng)用和端口的控制有機結(jié)合起來了。將外部功能與定時器,端口發(fā)光二極管三者結(jié)合起來完成對二極管亮滅的控制。這部分軟硬件結(jié)合的學(xué)習(xí)要反復(fù)講,以免學(xué)生一知半解。而且通過直接在Profues環(huán)境中操作,對發(fā)光二極管的控制現(xiàn)場演示,學(xué)生可以有直觀的認(rèn)識和理解,比單純講解程序編寫和硬件原理說明有趣且不枯燥。

圖1 定時器控制P1端口接的8個LED燈間隔1s循環(huán)點亮電路圖

圖2 LED循環(huán)點亮過程

圖3 由外部中斷0控制輸入單次脈沖顯示按鍵次數(shù)結(jié)果截圖
外部擴展模塊主要是鍵盤與顯示接口、存儲器擴展、ADDA接口技術(shù)。其中應(yīng)用最廣泛的就是鍵盤和顯示接口部分。按難易程度,首先學(xué)習(xí)顯示接口,數(shù)碼管和LCD顯示接口。以數(shù)碼管為例,可以由易到難,循序漸進。首先對一位數(shù)碼管進行控制,再到多位動態(tài)顯示控制。由單純的數(shù)碼管顯示控制再到鍵盤對數(shù)碼管的控制。硬件電路設(shè)計中數(shù)碼管的驅(qū)動問題、動態(tài)顯示的延時問題都通過實際的例子演示,如圖4是實現(xiàn)按下加減鍵讓數(shù)碼管顯示數(shù)字加減,讓學(xué)生有直觀的認(rèn)識和體會。

圖4 按下加減鍵讓數(shù)碼管顯示數(shù)字加減
在學(xué)生學(xué)習(xí)完所有知識點后,綜合各部分功能設(shè)計實現(xiàn)系統(tǒng)任務(wù),比如電子時鐘,綜合練習(xí)定時器、端口、鍵盤顯示接口技術(shù)。比如溫度采集控制系統(tǒng)。綜合練習(xí)定時器、端口、鍵盤顯示接口及AD模塊接口技術(shù)。強化學(xué)生程序結(jié)構(gòu)中的模塊化設(shè)計、各功能模塊按子程序方式設(shè)計、主程序調(diào)用。讓學(xué)生有系統(tǒng)的認(rèn)識和學(xué)習(xí)。
在實踐環(huán)節(jié)方面,由1周課程設(shè)計改為了2周課程實習(xí),由原來實驗箱上連線主要編程調(diào)試方式改為自行購買器件在電路印刷板上焊接、編程、軟硬件聯(lián)合調(diào)試方式。綜合鍵盤,顯示AD,DA,定時、外部中斷等技術(shù)進行系統(tǒng)設(shè)計并完成調(diào)試。從認(rèn)識元器件開始,理解硬件電路原理,編寫系統(tǒng)程序,完成單片機系統(tǒng)軟硬件開發(fā)。
學(xué)生平時學(xué)習(xí)中遇到問題可以通過QQ群及時交流討論,調(diào)試中軟件問題、程序問題、仿真電路問題等均可以提問,可以學(xué)生之間及師生之間互動交流。
單片機課程是一門軟硬件綜合、應(yīng)用性比較強的課程,在整個教學(xué)過程中,通過一系列的改革,激發(fā)學(xué)生的積極性、主動性,以理論和實驗相結(jié)合為宗旨,以培養(yǎng)創(chuàng)新能力和實踐能力為目標(biāo),運用多種手段由簡單到復(fù)雜、由模塊到系統(tǒng)使學(xué)生的創(chuàng)新能力、綜合應(yīng)用能力逐步提高。