鞠陽
南京工程學(xué)院電力工程學(xué)院 南京 211167
單片機(jī)是典型的嵌入式微控制器,在工業(yè)控制、機(jī)電一體化、通信終端、智能儀表、家用電器等諸多領(lǐng)域應(yīng)用廣泛。國內(nèi)高校的一些相關(guān)專業(yè)在20世紀(jì)80年代末就開設(shè)了單片機(jī)原理及應(yīng)用課程,并成為電氣信息類、機(jī)械類等專業(yè)的專業(yè)核心課程。因?yàn)閱纹瑱C(jī)在實(shí)際生活中廣泛應(yīng)用,該課程在培養(yǎng)環(huán)節(jié)中都被定位在理論與實(shí)踐并重,著重培養(yǎng)學(xué)生開發(fā)實(shí)際應(yīng)用系統(tǒng)的能力。
該門課程是一門涉及硬件、軟件技術(shù)的綜合性課程。在學(xué)習(xí)本課程的時(shí)候,學(xué)生應(yīng)該掌握邏輯電路設(shè)計(jì)、計(jì)算機(jī)原理硬件以及軟件編程等知識。但在實(shí)際教學(xué)中發(fā)現(xiàn),當(dāng)需要學(xué)生綜合運(yùn)用這些知識分析解決單片機(jī)在實(shí)際生產(chǎn)過程中的具體問題時(shí),往往不能融會貫通地加以理解和應(yīng)用,容易造成學(xué)生對本課程的畏難情緒,學(xué)習(xí)積極性受到影響。原因有不少,采用匯編語言為主的傳統(tǒng)授課方式就是其中之一,分析其原因包括:匯編語言語句抽象,可讀性差,學(xué)生難理解;匯編語言編程效率低,學(xué)生學(xué)習(xí)難度大;匯編語言代碼結(jié)構(gòu)復(fù)雜,難以維護(hù)、更新;匯編語言對硬件結(jié)構(gòu)依賴較大,難以實(shí)現(xiàn)在不同種類和系列單片機(jī)之間移植。
如今,企業(yè)的單片機(jī)項(xiàng)目開發(fā),一般都采用C語言。為適應(yīng)時(shí)代發(fā)展的要求,需要培養(yǎng)滿足社會需求的基于C語言的單片機(jī)人才。在多年的課程教學(xué)及科研實(shí)踐中,不斷總結(jié)、摸索和改革,構(gòu)建一套以C語言為主、匯編語言為輔、單片機(jī)應(yīng)用系統(tǒng)為教學(xué)主線、能力培養(yǎng)為目標(biāo)的課程教學(xué)體系。
C語言源于編寫UNIX系統(tǒng),與匯編語言和其他高級語言相比,優(yōu)點(diǎn)有很多:具有豐富的流程控制語句,適用于結(jié)構(gòu)化和模塊化設(shè)計(jì),使得程序?qū)哟吻逦?,易于閱讀、編寫、調(diào)試和維護(hù);使用范圍廣泛,可移植性強(qiáng),目前主流的CPU和MCU都有支持C的編譯器;數(shù)據(jù)結(jié)構(gòu)和運(yùn)算符豐富,有強(qiáng)大的庫函數(shù)支持,使用靈活方便;允許直接訪問物理地址,可以直接操作計(jì)算機(jī)硬件;編程和調(diào)試效率高,目標(biāo)代碼質(zhì)量好。
用C語言編寫單片機(jī)程序與用匯編語言編寫單片機(jī)程序不太一樣。用匯編語言編寫單片機(jī)程序要按實(shí)際地址組織、分配存儲器資源,處理端口數(shù)據(jù);用C編寫程序不必十分熟系處理器的運(yùn)算過程和數(shù)據(jù)的具體組織,可以更專注于算法而不是具體實(shí)現(xiàn)細(xì)節(jié),也更符合人們的思考習(xí)慣。由于C語言具有這樣的優(yōu)點(diǎn),幾乎各品種單片機(jī)的廠商都發(fā)布了相應(yīng)的C語言開發(fā),因此采用C語言開發(fā)單片機(jī)已成為必然趨勢。
在傳統(tǒng)的教學(xué)模式中,“單片機(jī)與接口技術(shù)”課程內(nèi)容安排一般都是概述、硬件結(jié)構(gòu)、指令系統(tǒng)、匯編語言設(shè)計(jì)、存儲器擴(kuò)展、中斷與定時(shí)系統(tǒng)、I/O口擴(kuò)展及應(yīng)用、串行數(shù)據(jù)通訊。采用C語言教學(xué),匯編語言應(yīng)要求適當(dāng)掌握。因?yàn)榇罅楷F(xiàn)有的寶貴資料是匯編語言編制的,需具備一定的閱讀能力。掌握的程度以能閱讀和理解常用的指令為度,不要求所有的指令都熟記。
在課程內(nèi)容安排上,可以采用這樣的模式:概述、硬件結(jié)構(gòu)、I/O口和存儲器擴(kuò)展、中斷與定時(shí)系統(tǒng)、應(yīng)用、串行數(shù)據(jù)通訊。其中,指令系統(tǒng)的講解穿插在各個(gè)章節(jié)中,以例題的形式講解。例題中用到哪條指令就講哪條指令,不再單獨(dú)講解,也不單獨(dú)講解指令的尋址方式。匯編語言章節(jié)可不講,但要求學(xué)生能讀懂課本該章節(jié)中的部分例題。由于學(xué)生的先修課程中已經(jīng)學(xué)過C語言,該部分內(nèi)容也不單獨(dú)介紹。在各章的由淺入深的例題中,帶著學(xué)生一邊復(fù)習(xí)和鞏固C語言知識,一邊介紹C51與標(biāo)準(zhǔn)C語言的不同點(diǎn)和編程注意事項(xiàng),并逐漸讓學(xué)生熟悉編寫較大規(guī)模C語言程序的思維模式。
在教學(xué)過程中讓學(xué)生樹立學(xué)習(xí)信心,吸引他們的學(xué)習(xí)興趣。教師將Keil C51集成開發(fā)軟件和編程器帶到教室,編程實(shí)現(xiàn)單片機(jī)控制8個(gè)LED閃爍的簡單程序。通過軟件編譯仿真演示后,下載至單片機(jī)中進(jìn)行硬件演示,讓學(xué)生了解單片機(jī)開發(fā)的全過程。上課時(shí)教師多用通俗易懂的語言講解,多舉實(shí)例,使學(xué)生容易理解和消化。在教學(xué)過程中,盡量采用講解、演示方法,如講完整形變量的概念后,通過軟件演示,可以看到變量在內(nèi)存中存放的位置、存儲的內(nèi)容和存放方式,這樣學(xué)生對整形變量就有完整清晰的認(rèn)識。通過進(jìn)一步演示可以看到整形變量的值為32767時(shí),再加1不等于32768,而是等于-32768,但其溢出時(shí)系統(tǒng)卻沒有任何報(bào)警提示,所以要求程序設(shè)計(jì)者做出正確處理,如溢出飽和等。同樣,講完定時(shí)器/計(jì)數(shù)器的工作原理和初始化方法后,編寫簡單的定時(shí)器/計(jì)數(shù)器應(yīng)用程序,在仿真軟件中運(yùn)行進(jìn)行演示,可以清楚看到程序運(yùn)行時(shí),計(jì)數(shù)器的值不斷變化,也可以看到定時(shí)器中斷服務(wù)程序的執(zhí)行結(jié)果。這樣定時(shí)器/計(jì)數(shù)器的整體形象非常生動(dòng),其工作原理也就不難理解了。通過講解、演示這些教學(xué)方式,使學(xué)生掌握了Keil C51集成開發(fā)軟件的使用方法,以后只要碰到有疑難的地方,就可以用仿真軟件調(diào)試運(yùn)行解決,增強(qiáng)了對C語言的直觀了解。
下面以流水燈為例,介紹以C語言為主的教學(xué)法具體講解步驟。
1)硬件部分:P1口接8只發(fā)光二極管,編寫程序?qū)崿F(xiàn)讓發(fā)光二極管按P1.0—P1.1—P1.2—…P1.7—P1.0—…的順序依次循環(huán)點(diǎn)亮。圖略。
2)軟件部分:
3)利用仿真器或編程器在面包板上現(xiàn)場調(diào)試并運(yùn)行該實(shí)例,證明軟硬件設(shè)計(jì)的正確性。
4)軟件部分,介紹主要語句功能。
5)講解課本相關(guān)知識點(diǎn)。
6)在學(xué)生掌握該例題后,引申該例題,同學(xué)生互動(dòng)(如若采用定時(shí)器,程序應(yīng)如何修改?等等)。
7)講解相應(yīng)的匯編程序。
8)講解該例題未涉及的知識點(diǎn)。
該課程是實(shí)踐性很強(qiáng)的課程,因此除理論教學(xué)外必須重視實(shí)驗(yàn)教學(xué)。盡量給學(xué)生提供充分的上機(jī)實(shí)踐是調(diào)動(dòng)、激發(fā)學(xué)生學(xué)習(xí)主動(dòng)性的很好手段。通過上機(jī)實(shí)踐,學(xué)生能自主地獲得知識,提高調(diào)試程序的能力。這樣就可以把一部分教學(xué)內(nèi)容移到上機(jī)的過程中去自行獲取,既能節(jié)約教學(xué)學(xué)時(shí),又能幫助學(xué)生牢固掌握知識。一般課堂教學(xué)學(xué)時(shí)與上機(jī)實(shí)踐學(xué)時(shí)應(yīng)掌握為3:1。
在實(shí)驗(yàn)內(nèi)容安排上,努力建立由淺入深、從基礎(chǔ)到前沿、從接受知識到培養(yǎng)綜合能力的實(shí)驗(yàn)新體系。在實(shí)驗(yàn)內(nèi)容上要突出綜合性、實(shí)踐性特點(diǎn)。綜合性實(shí)驗(yàn)著重于實(shí)驗(yàn)原理及要求。實(shí)驗(yàn)內(nèi)容、操作步驟等從略或簡述操作事項(xiàng),以加強(qiáng)實(shí)驗(yàn)動(dòng)手能力的培養(yǎng)。例如,為了讓學(xué)生真正掌握可編程并行接口芯片8255A的使用,要求學(xué)生對它的實(shí)驗(yàn)原理及編程方法吃深吃透,從最簡單的做起,讓8255A芯片的PA口的8個(gè)引腳PA7~PA0與8個(gè)發(fā)光二極管相接,讓發(fā)光二極管一個(gè)一個(gè)或兩個(gè)兩個(gè)或三個(gè)三個(gè)循環(huán)閃爍顯示。當(dāng)學(xué)生真正理解了8255A芯片使用主要在于編程,其3種工作方式可用軟件編程的方法來實(shí)現(xiàn)后,再在指導(dǎo)性實(shí)驗(yàn)后面增加相關(guān)的思考題,要求學(xué)生按照教師提出的實(shí)驗(yàn)?zāi)康暮鸵?,自己設(shè)計(jì)、自擬操作方法與步驟,在面包板上接插線,上機(jī)調(diào)試。當(dāng)學(xué)生做完實(shí)驗(yàn)后又要求他們寫出有結(jié)論、有分析、有體會的實(shí)驗(yàn)報(bào)告,經(jīng)過這樣的舉一反三,活學(xué)活用,充分調(diào)動(dòng)學(xué)生積極性,有利于培養(yǎng)新型人才。它可以開闊學(xué)生知識面,有利于學(xué)生的動(dòng)手能力的培養(yǎng),使學(xué)生學(xué)到的知識得到鞏固和升華。
課程設(shè)計(jì)是一個(gè)綜合性的教學(xué)環(huán)節(jié),也是一個(gè)實(shí)戰(zhàn)練兵的機(jī)會。為此安排一周的課程設(shè)計(jì),讓學(xué)生有較充裕的時(shí)間系統(tǒng)地編寫并調(diào)試一套完整并有一定程序量的程序。課程設(shè)計(jì)題目分為兩大類型,即基本類型和提高類型?;绢愋桶娮隅姵绦蛟O(shè)計(jì)、交通燈控制器程序設(shè)計(jì)、模擬全主動(dòng)洗衣機(jī)程序設(shè)計(jì)、步進(jìn)電機(jī)單步進(jìn)給特性的測試等題目;提高類型包括單片機(jī)與微機(jī)串行通信軟件設(shè)計(jì)、閉環(huán)恒溫控制系統(tǒng)程序設(shè)計(jì)、倒車?yán)走_(dá)設(shè)計(jì)、溫度顯示儀表等題目。學(xué)生可根據(jù)自己的情況自主選擇設(shè)計(jì)內(nèi)容。
課程設(shè)計(jì)要求完成硬件原理圖、軟件流程圖、調(diào)試成功的軟件。通過課程設(shè)計(jì)的實(shí)戰(zhàn)練兵,可以達(dá)到以下幾個(gè)目的:1)進(jìn)一步鞏固了所學(xué)理論知識;2)使學(xué)生對該課程有系統(tǒng)的認(rèn)識;3)使學(xué)生對這門課從理論到實(shí)踐跨出了關(guān)鍵性的一步。
通過采用以C語言為主、匯編語言為輔的教學(xué)方法的改革后,學(xué)生學(xué)習(xí)單片機(jī)與接口技術(shù)的積極性有了較大的提高,學(xué)生既能扎實(shí)地學(xué)好理論知識,又具備了較強(qiáng)的動(dòng)手能力。根據(jù)對幾屆學(xué)生的調(diào)查和成績統(tǒng)計(jì)來看,學(xué)生對該課程的掌握與實(shí)際開發(fā)能力均得到了較大的提高,為學(xué)生今后的畢業(yè)設(shè)計(jì)乃至將來的工作打下了良好的基礎(chǔ)。學(xué)生在學(xué)完本課程后,參加校內(nèi)和省內(nèi)的電子設(shè)計(jì)競賽的成績比以前有了較大的提高。
在以后的教學(xué)進(jìn)程中,還需要進(jìn)一步完善課程的教學(xué)改革,為培養(yǎng)出高素質(zhì)、能力強(qiáng)、符合現(xiàn)代化建設(shè)需要的新型人才,為實(shí)現(xiàn)學(xué)校的人才培養(yǎng)目標(biāo)繼續(xù)努力,力爭使教學(xué)水平、教學(xué)質(zhì)量躍上一個(gè)新的臺階。
[1]胡漢才.單片機(jī)原理及其接口技術(shù)[M].2版.北京:清華大學(xué)出版社,2004:237-367.
[2]牛驍.單片機(jī)和C語言的教學(xué)探討[J].江蘇機(jī)械制造與自動(dòng)化,2001(4):136-138.
[3]林益平,等.單片機(jī)C語言課程教學(xué)的探索與實(shí)踐[J].電氣電子教學(xué)學(xué)報(bào),2007(4):104-106.
[4]苗新法.單片機(jī)教學(xué)改革方案探索[J].中國現(xiàn)代教育裝備,2009(8):79-80.