摘要:通過對匯編語言、C語言進(jìn)行特點(diǎn)說明及應(yīng)用分析,結(jié)合實(shí)際教學(xué),探討在MCS-51單片機(jī)的教學(xué)中如何處理好對編程語言的選擇問題。
關(guān)鍵詞:MCS-51單片機(jī);匯編語言;C語言;教學(xué)探討
中圖分類號:G642.4 文獻(xiàn)標(biāo)志碼:A 文章編號:1674-9324(2013)36-0259-02
一、引言
MCS-51單片機(jī)課屬于嵌入式系統(tǒng)的基礎(chǔ)專業(yè)課程,實(shí)踐性很強(qiáng)[1]。其教學(xué)目前存在兩種傾向:一種是采用傳統(tǒng)的采用匯編語言教學(xué);另一種是采用C語言教學(xué)。前者認(rèn)為匯編語言貼近機(jī)器語言,有助于學(xué)生很好的理解單片機(jī)硬件資源;后者認(rèn)為用C語言教學(xué),能讓學(xué)生掌握C語言在單片機(jī)中的應(yīng)用。由于目前在嵌入式系統(tǒng)的工程項(xiàng)目開發(fā)中基本上都采用C語言,因此采用C語言教學(xué),有助于學(xué)生盡快利用單片機(jī)進(jìn)行相關(guān)工程項(xiàng)目的開發(fā),使學(xué)生在日后的相關(guān)工作中盡早適應(yīng)公司的需要,得到公司的認(rèn)可。那么,在教學(xué)中到底如何處理語言的選擇問題,本文就是基于這個問題進(jìn)行探討分析。
二、分析匯編語言的特性及應(yīng)用
匯編語言主要特性表現(xiàn)如下:首先是匯編語言的可移植性和通用性差。匯編語言與機(jī)器的相關(guān)性很強(qiáng),其指令是機(jī)器指令的一種符號表示。由于不同類型的CPU有不同的機(jī)器指令系統(tǒng),從而其對應(yīng)的匯編語言也是不同的,因此,匯編語言程序與機(jī)器有著密切的關(guān)系。對于同系列、不同型號CPU之間的匯編語言程序,它們有一定程度的可移植性,但對于其他不同類型CPU之間的匯編語言程序是無法移植的,所以說匯編語言程序可移植性比較差,即其通用性相對于其他語言(如C語言)來說比較差。其次是匯編語言執(zhí)行的高效率。正是由于匯編語言與機(jī)器有很強(qiáng)的相關(guān)性,程序員用匯編語言編寫程序時,可對機(jī)器內(nèi)部的各種硬件資源進(jìn)行合理的安排,使它們始終處于最佳狀態(tài)。因此匯編語言程序代碼能很好地對應(yīng)機(jī)器內(nèi)部資源,并可以對內(nèi)部資源直接操作,相對于其他語言(如C語言)編寫的程序,其程序執(zhí)行代碼短,執(zhí)行速度快,執(zhí)行效率高。再次是匯編語言編寫程序的復(fù)雜性。由于匯編語言與機(jī)器的相關(guān)性強(qiáng),因此是一種面向機(jī)器的語言。因?yàn)閰R編語言的匯編指令與機(jī)器指令基本上一一對應(yīng),所以,匯編指令具有功能單一、具體的特點(diǎn)。要用這些簡單指令完成某件具體任務(wù),就要求對任務(wù)的每一個細(xì)節(jié)都進(jìn)行具體細(xì)致的安排,那么編寫出匯編語言程序一定比較繁瑣、復(fù)雜,當(dāng)然這也是相對于其他高級語言(如C語言)而言的。最后是匯編語言程序調(diào)試的復(fù)雜性。匯編語言程序調(diào)試的復(fù)雜性表現(xiàn)如下:
其一,由于匯編語言指令涉及到機(jī)器內(nèi)部資源的具體細(xì)節(jié),因此,要求程序員在編寫具體任務(wù)程序前,首先必須清楚機(jī)器內(nèi)部硬件資源,在程序的調(diào)試過程中必須清楚這些資源的狀態(tài)變化;其二,為了很好地表示要完成的任務(wù),程序員在編寫程序時必須要用大量的各類轉(zhuǎn)移指令,這些轉(zhuǎn)移跳轉(zhuǎn)指令將極大地增加了調(diào)試程序的難度。
綜上,由于匯編語言的與機(jī)器相關(guān)性,使得它具有代碼執(zhí)行的高效性優(yōu)勢,但同時也引發(fā)其代碼編寫的復(fù)雜性,可移植性差和調(diào)試難等劣勢。因此,在實(shí)際應(yīng)用中匯編語言有其不可替代優(yōu)勢,有其在應(yīng)用方面的復(fù)雜性。
三、分析C語言的特點(diǎn)及應(yīng)用
標(biāo)準(zhǔn)C語言是一種不依賴于具體機(jī)器的智能化高級語言,易于學(xué)生接受學(xué)習(xí)。目前,C語言是世界上應(yīng)用最廣泛的幾種計(jì)算機(jī)語言之一,國內(nèi)工科院校普遍將其作為一種基礎(chǔ)計(jì)算機(jī)語言進(jìn)行教學(xué)。作為計(jì)算機(jī)基礎(chǔ)語言,它有以下特點(diǎn):
1.C語言簡潔、緊湊,使用靈活、方便。C語言共有9種控制語句。由于引入結(jié)構(gòu)化的控制語句(如for語句、while語句等),引入函數(shù)作為程序的基本模塊,從而使C語言具有了結(jié)構(gòu)化和模塊化,使程序組織結(jié)構(gòu)清晰,緊湊。C語言共有32個關(guān)鍵字,語法限制不太嚴(yán)格,區(qū)分大小寫,主要用小寫字母表示,程序設(shè)計(jì)自由度大,程序書寫形式自由,使用方便、靈活。相對于其他高級語言,C語言簡潔,源程序短,程序輸入工作量少,使用靈活、方便。
2.C語言運(yùn)算符和數(shù)據(jù)類型豐富。C語言運(yùn)算符包含的范圍很廣泛,共有34種運(yùn)算符。C語言把括號、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理,使其運(yùn)算符類型極其豐富。C語言豐富的運(yùn)算符類型使其具備處理復(fù)雜運(yùn)算的能力。C語言的數(shù)據(jù)類型有整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等,能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。
3.C語言可直接對硬件進(jìn)行操作。由于C語言允許直接訪問物理地址,能進(jìn)行位操作,能實(shí)現(xiàn)匯編語言的大部分功能,可以直接對硬件進(jìn)行操作,因此它既有高級語言的功能,又有低級語言的許多功能,能夠像匯編語言一樣對位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元。
4.C語言生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高,可移植性好。相對于其他高級語言,C語言生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。但相對于匯編語言,其生成的目標(biāo)代碼效率還是要低10%~20%。與匯編語言相比,C語言編寫的程序基本上不做修改就能用于各種型號的計(jì)算機(jī),因此C語言編寫的程序便于移植。
綜上,C語言是結(jié)構(gòu)式模塊化的高級語言,該語言簡潔緊湊、靈活方便、運(yùn)算符和數(shù)據(jù)結(jié)構(gòu)豐富。其最大特點(diǎn)是適用范圍大,數(shù)據(jù)處理能力強(qiáng),可移植性好,正是基于這點(diǎn)使其在嵌入式系統(tǒng)開發(fā)中得到廣泛應(yīng)用。
四、單片機(jī)原理及應(yīng)用課的教學(xué)分析
MCS-51單片機(jī)課是一門偏硬件的課程,包含兩部分內(nèi)容:單片機(jī)原理和單片機(jī)應(yīng)用。因此,在教學(xué)中有必要對兩者區(qū)別處理。單片機(jī)原理主要講述MCS-51單片機(jī)的結(jié)構(gòu)、組成原理;MCS-51單片機(jī)芯片的引腳結(jié)構(gòu)、功能;MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu)組成,包括其內(nèi)部包含的寄存器、RAM、ROM等資源;MCS-51單片機(jī)P3口的第二功能:中斷功能、定時/計(jì)數(shù)器功能以及串口通信功能。上述MCS-51單片機(jī)內(nèi)容都是單片機(jī)的硬件組成結(jié)構(gòu),對這部分的講解必須借助一種語言工具,而且要求這種語言工具能充分的表達(dá)單片機(jī)的硬件結(jié)構(gòu)。
基于前面對匯編語言的分析,可以發(fā)現(xiàn)其與機(jī)器相關(guān)性的特點(diǎn)使得該語言工具能有效地表達(dá)單片機(jī)的硬件結(jié)構(gòu),滿足教學(xué)MCS-51單片機(jī)原理的需要。比如,對MCS-51單片機(jī)的不同存儲空間進(jìn)行操作時,匯編語言可以通過采用不同的匯編指令加以區(qū)別:對內(nèi)部RAM空間操作可采用MOV指令,對內(nèi)部ROM空間操作可采用MOVC指令,而對外部擴(kuò)展RAM空間操作時可采用MOVX指令。當(dāng)然對MCS-51單片機(jī)的寄存器進(jìn)行操作就是對內(nèi)部RAM進(jìn)行操作,也用MOV指令。還有,在對MCS-51單片機(jī)串口進(jìn)行數(shù)據(jù)傳送時,在硬件上只要對SBUF進(jìn)行操作就行,即利用MOV SBUF,A發(fā)送數(shù)據(jù),利用MOV A,SBUF指令接收數(shù)據(jù)[2],這樣看起來就非常的清楚、簡潔、易于理解。顯然,匯編語言是理解整個單片機(jī)系統(tǒng)內(nèi)部硬件結(jié)構(gòu)的最佳起點(diǎn)和最有效途徑[3]。匯編語言采用助記符直接描述機(jī)器指令,比機(jī)器指令容易記憶和理解。學(xué)習(xí)和使用匯編語言,能夠感知、理解機(jī)器的硬件邏輯功能。因此,在單片機(jī)原理的教學(xué)中采用匯編語言效果會更好。目前,大多數(shù)MCS-51單片機(jī)的教材中對于單片機(jī)應(yīng)用的講解中,普遍將鍵盤,LED數(shù)碼管,LCD以及電機(jī)等作為教學(xué)重點(diǎn)。有的教材還將I2C總線,SPI總線等的應(yīng)用作為單片機(jī)的應(yīng)用內(nèi)容進(jìn)行講解,這主要是因?yàn)?1單片機(jī)沒有這些總線接口,一般采用MCS-51單片機(jī)模擬這些總線接口。單片機(jī)應(yīng)用中的內(nèi)容都利用了MCS-51單片機(jī)的IO端口來進(jìn)行應(yīng)用操作。如果學(xué)生通過匯編語言掌握了MCS-51單片機(jī)的硬件原理,那么應(yīng)用內(nèi)容可采用C語言進(jìn)行講解,使學(xué)生能理解C51語言在單片機(jī)上的應(yīng)用。通過實(shí)驗(yàn)訓(xùn)練能夠讓學(xué)生掌握C51語言在單片機(jī)開發(fā)中的應(yīng)用。
基于前面分析,C語言簡潔緊湊、靈活方便、運(yùn)算符和數(shù)據(jù)結(jié)構(gòu)豐富。其最大特點(diǎn)是適用范圍大,數(shù)據(jù)處理能力強(qiáng),可移植性好[4]。那么,在單片機(jī)應(yīng)用的教學(xué)中采用C51語言,不但有助于學(xué)生更好的掌握C51語言在單片機(jī)開發(fā)中的應(yīng)用,也有助于學(xué)生為后續(xù)的嵌入式系統(tǒng)開發(fā)中利用C語言打下堅(jiān)實(shí)的基礎(chǔ)。
目前,在MCS-51單片機(jī)課的教學(xué)中,安排有理論課,實(shí)驗(yàn)課和課程設(shè)計(jì)。在理論課和實(shí)驗(yàn)課中,主要采用匯編語言,從而讓學(xué)生熟悉匯編指令,并通過匯編語言理解、掌握單片機(jī)原理及部分應(yīng)用內(nèi)容;在課程設(shè)計(jì)中,讓學(xué)生自己設(shè)計(jì)題目,利用C51語言完成題目所設(shè)定的任務(wù)。鑒于C語言在嵌入式工程應(yīng)用中的重要性,在課程開始就強(qiáng)調(diào)讓學(xué)生自學(xué)C51語言;講解MCS-51單片機(jī)應(yīng)用內(nèi)容時采用C51語言;實(shí)驗(yàn)中,驗(yàn)證性實(shí)驗(yàn)要求用匯編語言,綜合實(shí)驗(yàn)要求用匯編語言和C51語言兩種語言完成;最后的課程設(shè)計(jì)中可以明確要求用C51語言完成題目要求。
五、結(jié)論
MCS-51單片機(jī)課是一門實(shí)踐性很強(qiáng)的嵌入式基礎(chǔ)性課程,因此,一方面在教學(xué)中對單片機(jī)原理采用匯編語言教學(xué),以便學(xué)生理解MCS-51單片機(jī)的硬件結(jié)構(gòu)[5];另一方面加強(qiáng)學(xué)生對C51語言在單片機(jī)應(yīng)用中的熟練掌握,這可在單片機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)中得到加強(qiáng)。實(shí)踐證明,這種教學(xué)安排是可行的、有效的。
參考資料:
[1]賴曉晨,周寬久,夏鋒,等.嵌入式系統(tǒng)工程實(shí)例解析[M].北京:清華大學(xué)出版社,2012.
[2]王新穎.單片機(jī)原理及應(yīng)用[M].北京大學(xué)出版社,2008.
[3]張毅剛,彭喜元.單片機(jī)原理及接口技術(shù)[M].北京:人民郵電出版社,2008.
[4]馬斌,韓忠華,王長濤,等.單片機(jī)原理及應(yīng)用——C語言程序設(shè)計(jì)與實(shí)現(xiàn)[M].北京:人民郵電出版社,2009.
[5]李廣弟,朱月秀,王秀山.單片機(jī)基礎(chǔ)[M].北京:北航出版社,2007.