俞 萍 劉苗生
1.廣東培正學(xué)院,廣東 廣州 510830
2. 華南農(nóng)業(yè)大學(xué)珠江學(xué)院信息工程系,廣州從化 510900
當(dāng)前全國理工科普通高等學(xué)校電類各專業(yè), 計算機類有關(guān)專業(yè), 機械類有關(guān)專業(yè)都開設(shè)有“單片機原理及應(yīng)用”或“單片機原理及接口技術(shù)”的課程。而且?guī)缀醵际且?1單片機某一種機型為授課對象,用匯編語言作為編程語言, 兩者相輔相成。 許多學(xué)校及教師都在探索提高該課程教學(xué)效果的方法[1]。本文就是作者探索提高該課程教學(xué)效果的總結(jié)。
眾所周知,匯編語言是面向機器的語言, 它一刻也離不開具體的機器, 所以不同的機器, 匯編語言也不同。
匯編語言是與計算機的機器語言一一對應(yīng)的,因此,用匯編語言編寫的程序效率高, 占用儲存空間小, 運行速度快, 這是匯編語言程序的優(yōu)勢所在。
然而禍為福所倚,正因為匯編語言與計算機的硬件密不可分,不同的機器就有不同的匯編語言,因此匯編語言難學(xué)、難編、難讀、難懂、難移植,這五難是公認(rèn)的, 幾乎所有的單片機教材中都有相應(yīng)的論述[2]。既是所有用匯編語言從事過單片機的開發(fā)與應(yīng)用的工程技術(shù)人員的共同感受;也是所有用匯編語言從事過單片機教學(xué)的各級各類教師的共同感受。這就是匯編語言的不足。
C語言是一種結(jié)構(gòu)化語言,它層次清晰,按模塊化組織程序,易于調(diào)試和維護。C語言的表現(xiàn)能力和處理能力極強。它不僅具有豐富的運算符和數(shù)據(jù)類型,便于實現(xiàn)各類復(fù)雜的數(shù)據(jù)結(jié)構(gòu),它還可以直接訪問內(nèi)存的物理地址,進行位(bit)一級的操作。由于C語言實現(xiàn)了對硬件的編程操作,因此C語言集高級語言和底層級語言功能于一體,既可用于系統(tǒng)軟件的開發(fā),也適合于應(yīng)用軟件的開發(fā)。此外,C語言還具有效率高、可移植性強等特點,因此C語言廣泛地移植到了各類各型計算機上,從而形成了多種版本的C語言,單片機的C語言就是這多種版本之一,它是應(yīng)用于51單片機的一種C程序開發(fā)語言. 現(xiàn)在幾乎所有的單片機、微處理器、微控制器開發(fā)平臺都支持用C語言進行程序設(shè)計。使C語 成為當(dāng)代最優(yōu)秀的程序設(shè)計語言之一,獲得了極為廣泛的應(yīng)用。
C語言進入51單片機后, 它的優(yōu)勢得到了充分的展示, 它不象匯編語言那樣要熟練掌握指令系統(tǒng), 也不要象匯編語言那樣要對程序的起始地址、主程序的起始地址、中斷服務(wù)子程序起始地址、保護現(xiàn)場、恢復(fù)現(xiàn)場、保存斷點、返回斷點、堆棧指針、進堆棧、出堆棧、子程序中的入口參數(shù)、出口參數(shù)、參數(shù)的傳遞、四組工作寄存器的內(nèi)在聯(lián)系等難度很大的知識點要有非常透徹的了解; 它只要求對單片機的片內(nèi)結(jié)構(gòu)有個大致的了解;它易學(xué)、易懂、上手快;它功能強大,移植性強;它集高級語言和底層語言于一身;它的各種各樣的數(shù)據(jù)(信息)既可以以變量的形式出現(xiàn)于各個函數(shù)中,也可以以地址的形式訪問單片機的片內(nèi)、片外的各種數(shù)據(jù)存儲器及程序存儲器的任何單元??梢哉f,匯編語言能做到的事情,C語言不但能做到, 而且能輕而易舉的實現(xiàn)之。因此它獲得了越來越廣泛的應(yīng)用。正因為C語言有如此明顯的優(yōu)越性, 原來使用匯編語言的工程技術(shù)人員也紛紛拋棄匯編語言而跨入用C語言開發(fā)單片機的行列中。 這就是我們?yōu)槭裁匆肅語言對單片機進行教學(xué)的原因。
C語言相對匯編語言而言, 同樣功能的程序所需內(nèi)存相對較多, 執(zhí)行速度相對較慢, 這就是C語言的不足。
C51系列單片機在各行各業(yè)獲得了廣泛應(yīng)用這已經(jīng)是不爭的事實,繼最初的基本型8031/8051/8751和增強型8032/8052/8752后, 相繼又推出 了AT89C51/89C52/89S52/89C55和 S T C 8 9 C 5 1/S T C 8 9 C 5 2/STC89S51/STC89S52/STC89C55,目 前 的STC12C5A60S2系 列單片機, 它的應(yīng)用程序空間有8K/16K/20K/32K/40K/48K/52K/60K字節(jié); 它的工作頻率范圍為0-35MHZ, 由于它的機器周期是單時鐘周期, 即一個時鐘周期就是一個機器周期(光這一點就使單片機的運行速度提高12倍), 所以0-35MHZ的工作頻率相當(dāng)普通的8051的0-420MHZ的工作頻率, 這兩大優(yōu)勢使C51相對于匯編語言而言的代碼運行效率低和代碼長的缺陷得到了很好的彌補, 也使得用匯編語言編寫的程序效率高、占用儲存空間小、運行速度快這一匯編語言的優(yōu)點失去了光澤, 使這一優(yōu)點變得沒有什么實際意義了。相反它的難編、難讀、難懂、難移植的缺點沒有絲毫改變。為C51成為單片機開發(fā)與應(yīng)用的主流程序設(shè)計語言奠定了基礎(chǔ)。
對單片機實施C語言教學(xué)法時, 將C語言程序中不需要的匯編語言的指令系統(tǒng)、偽指令、匯編語言程序設(shè)計都刪去不講,講述單片機的硬件知識時也以C語言編程需要為出發(fā)點, 與C51編程無關(guān)的硬件知識不再講授。
理論課的具體做法是:第1章單片機慨述(花兩學(xué)時講授單片機的發(fā)展歷史及發(fā)展趨勢,單片機的應(yīng)用,MCS-51系列,ATMEL系列,STC系列單片機簡介);第2章STC89C51單片機的硬件結(jié)構(gòu), 重點講授存儲器的分布及結(jié)構(gòu)、四個 行I/O 口 (P0、P1、P2、P3)、40個 片 腳 及 功能;第3章講授單片機的C51基礎(chǔ)知識,由于開設(shè)單片機課程之前, 學(xué)生已經(jīng)學(xué)習(xí)完C語言程序設(shè)計, 這一章重點介紹C51與標(biāo)準(zhǔn)C的不同之處, 復(fù)習(xí)C語言程序的基本結(jié)構(gòu)與相關(guān)語句(if語句、swith/case語句、while語句、for語句)的用法。笫4章介紹Keil C51軟件的安裝、項目的建立、C51程序的編輯、編譯、下載及執(zhí)行(做一個實驗解決)和C51的庫函數(shù)。第5-第7章介紹89C51的內(nèi)部資源,包括STC89C51的中斷系統(tǒng),定時器/計數(shù)器,串行囗及它們的C51編程技術(shù)。第8-第11章介紹STC89C51單片機與I/O接口、獨立鍵盤、矩陣鍵盤、LED顯示器、LCD顯示器、A/D、D/A及I2C的C51編程及應(yīng)用技術(shù), 第5章及以后各章介紹硬件知識時著重講授51單片機中21個特殊功能寄存器中的15個(P0、P1、P2、P3、IE、IP、TCON、SCON、TMOD、TH0、TL0、TH1、TL1、PCON、SBUF)的 功能及用法,如何實現(xiàn)I/O控制、外中斷控制、定時中斷控制、計數(shù)中斷控制、LED靜態(tài)顯示、LED動態(tài)顯示、獨立鍵盤檢測、行列式鍵盤檢測、LCD1602顯示字符、LCD12864(或LCD12232)顯示漢字、A/D轉(zhuǎn)換及顯示、D/A轉(zhuǎn)換及顯示、I2C電路在線存儲數(shù)據(jù)等各種實用的編程技術(shù)及理論基礎(chǔ)知識。
單片機的教學(xué)不管 用哪種教學(xué)方法,實踐動手能力的培養(yǎng)是非常重要的一環(huán),與單片機C語法教學(xué)法配套的實驗開發(fā)板不但功能強、性能好、而且價格便宜(150元/套左右),可以開出I/O控制(流水燈)、外中斷控制、定時中斷控制、計數(shù)中斷控制、LED靜態(tài)顯示、LED動態(tài)顯示、獨立鍵盤檢測、行列式鍵盤檢測、LCD1602顯示字符、LCD12864(或LCD12232)顯示漢字、A/D轉(zhuǎn)換及顯示、D/A轉(zhuǎn)換及顯示、I2C電路在線存儲數(shù)據(jù)、單片機控制繼電器、單片機控制報警器、單片機控制步進電機、單片機與單片機的串行通信、單片機與PC機的串行通信等20多個實驗,學(xué)生愛不釋手,許多家庭經(jīng)濟條件許可的學(xué)生干脆自己買一臺,有空閑時就動手,這種開發(fā)實驗板激發(fā)起學(xué)生濃厚的興趣,大大提高了學(xué)生的積極性,為單片機的C語言教學(xué)法提供了理想的實驗手段和支撐。
開設(shè)單片機原理及應(yīng)用課程的多數(shù)專業(yè)都有一個與該課程配套的課程設(shè)計。與單片機的C語言教學(xué)法配套的課程設(shè)計有實時時鐘的設(shè)計與實現(xiàn)和數(shù)據(jù) 集系統(tǒng)的設(shè)計與實現(xiàn),下面我們把實時時鐘的設(shè)計與實現(xiàn)的功能及具體做法介紹如下。
要求實現(xiàn)的具體功能:
1)時間顯示在LCD1602液品上, 按秒實現(xiàn)更新;
2)能夠利用按鍵隨時調(diào)節(jié)時鐘的時、分、秒, 按鍵可設(shè)計三個有效鍵, 分別為功能選擇鍵、數(shù)值 大鍵、數(shù)值 小鍵;
3)每次有鍵按下時,蜂鳴器都以短“滴”聲報警;
4)利用AT24C02實現(xiàn)斷電自動保護顯示數(shù)據(jù)的功能, 當(dāng)下次上電時接著上次斷電前的時間數(shù)據(jù)繼續(xù)運行;
5)在LCD1602的第一行顯示年、月、日和星期, 第二行顯示時、分、秒;具體做法:第一步先用Proteus仿真實現(xiàn)之, 第二步在萬能板上焊接調(diào)試成功。其結(jié)果是70%以上的同學(xué)能做出來, 達到良好或優(yōu)良,30%的同學(xué)為中等和及格。
筆者于2011年上半年及下半年針對民辦獨立學(xué)院的計算機科學(xué)與技術(shù)專業(yè)0801班、網(wǎng)絡(luò)工程專業(yè)0801班、電子信息工程專業(yè)0901班三個班的教學(xué)實踐證明,不管是單片機的內(nèi)部結(jié)構(gòu)、內(nèi)部資源還是理論與實踐結(jié)合在一起的單片機控制流水燈、單片機的外中斷控制報警器、控制繼電器、LED靜態(tài)顯示、LED動態(tài)顯示、定時中斷實現(xiàn)實時時鐘的顯示、串行通訊、獨立鍵盤的檢測與顯示、行列式鍵盤的檢測與顯示、LCD1602顯示字符及左移右移、LCD12864顯示漢字及左移右移、DAC0832數(shù)模轉(zhuǎn)換及顯示、ADC0809系列的模數(shù)轉(zhuǎn)換及顯示、E2PROMAT24C02與單片機的通訊等的教學(xué)都非常順利,與匯編語言教學(xué)法相比真有 半功倍之效。學(xué)生學(xué)起來輕松,興趣盎然,勁頭十足;教師教起來也是輕松愉快,信心十足。本文中的有關(guān)課程設(shè)計的內(nèi)容難度也不小,先用Proteus仿真, 然后各自在萬能板上焊接單片機的最小系統(tǒng)配以LCD1602、AT24C02及報警器,70%的同學(xué)可以達到良好及以上。有人說你要是用單片機做出一個電子鐘,那你基本上已經(jīng)掌握單片機的80%了,這句話有道理,電子鐘對編程的綜合性要求還是相當(dāng)高的【3】。從這句話也可以看出單片機C語言教學(xué)法的效果。
[1]唐存皮,陳小琴,金紅.提高單片機教學(xué)效果的實驗教法方法探討[J]. 電氣電子教學(xué)學(xué)報.2006(3):108-109.
[2]劉劍,劉奇.51單片機開發(fā)與應(yīng)用基礎(chǔ)教程(C語言版)[M].北京:中國電力出版社,2012.
[3]郭天祥.新概念51單片機C語言教程-入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2010.