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