程婭荔 王巧玲
(井岡山大學電子信息與工程學院電子系 江西 吉安 343000)
各高等院校普及單片機及其相關(guān)知識,對增加學生知識面,開拓學生就業(yè)面,起到了積極有效的促進作用。但是,單片機這門課程綜合性強,內(nèi)容抽象,學起來艱澀難懂,對實驗設(shè)備和多媒體綜合運用的能力要求高,教與學都遇到了很大的困難?!皢纹瑱C原理及應用”是工科專業(yè)的一門主要專業(yè)課程,并且主要以8位51單片機為基礎(chǔ),長期以來國內(nèi)高校都在該課程的教學創(chuàng)新上苦下功夫,使單片機的應用在學生的就業(yè)上獲取優(yōu)勢,并且此課程的創(chuàng)新教育對人才創(chuàng)新有良好的促進作用。
目前,我國高等院校在單片機的教學中普遍的教學手段都是以理論講解為主,大部分時間都是老師在講理論知識,學生雖然也能聽懂,但是往往是一知半解,學完以后還是對單片機的概念很模糊,要求自己獨立開發(fā)程序就更是不可能完成的任務。
筆者所在學校的電子信息專業(yè)培養(yǎng)方案上《單片機原理與應用》一直開設(shè)在大學三年級下學期,即第六個學期。在大學的前幾個學期的課程教育中,C語言的學習和匯編語言的學習是兩個獨立的課程。C語言在大學課程中是最早學習的編程語言,是建立在計算機編程的基礎(chǔ)上進行講解學習的。而匯編語言在微機原理課程中的學習中會有大量應用。筆者曾經(jīng)用匯編語言貫穿整個單片機課程的教學,結(jié)果教學效果一般,而且因為匯編語言的冗長和龐雜,講解一個稍微復雜的程序非常耗時,在短短的一個學期內(nèi),很難完成單片機及其外圍模塊電路應用的教學任務。此后,筆者所采用的是使用Proteus單片機仿真軟件與Keil C51相結(jié)合采取案例教學的方法,該方法教學效果突出,有一個很大的優(yōu)勢就是能使學生較快的掌握單片機的一些基本應用,并獨立完成編程設(shè)計。筆者所教電子系學生,更注重的是對硬件的掌握和開發(fā),但是因為C51語言未對單片機的內(nèi)部硬件結(jié)構(gòu)模塊直接操作,只是加速了學生的編程思維,導致對硬件學習的間接忽視,而且因為對硬件結(jié)構(gòu)沒有一個形象和深入的認識,常常在單片機課程學習結(jié)束后學生仍然對單片機內(nèi)部硬件模塊原理一知半解,對單片機和外圍模塊的應用設(shè)計能力的提高有不小的影響。
C語言和匯編語言是單片機應用系統(tǒng)開發(fā)常用的編程工具。C語言作為一種高級語言,其優(yōu)點是C程序由函數(shù)構(gòu)成、數(shù)據(jù)類型和運算符豐富、面向應用、結(jié)構(gòu)簡潔和較強的可移植功能。匯編語言比較直觀,能夠直接對硬件進行操作,目標代碼質(zhì)量高,程序的執(zhí)行效率高;生成的機器代碼簡潔、占ROM空間少,適用于一些對時序要求特別精確的場合;是學習如DSP(數(shù)字信號處理)等后續(xù)課程的基礎(chǔ),有利于學生深入理解單片機的內(nèi)部結(jié)構(gòu)及工作原理。
筆者在單片機課程教學中通過對兩種語言的融合使用,更加系統(tǒng)、全面地豐富單片機課程的內(nèi)涵,使學生從整體上更好地理解和應用單片機。在整個單片機課程的學習中抓住各章節(jié)的重點,在不同章節(jié)使用不同的語言進行講解,章節(jié)講解遵循的原則為:用匯編語言講解的章節(jié)著重分析單片機的內(nèi)部硬件原理,用C51講解的章節(jié)著重單片機硬件的具體應用與功能實現(xiàn)。
51系列單片機的存儲器有ROM和RAM大小之分,由于單片機的RAM和CPU速度的限制,在編程時尤其要兼顧到單片機硬件基礎(chǔ)。在以往C語言的學習中,學生很少會注意到數(shù)據(jù)類型定義的差別給程序執(zhí)行帶來的影響,常常使用范圍較廣的數(shù)據(jù)類型,如無符號整形,就要占用16位的空間,而且也不會注意數(shù)據(jù)是存放在片內(nèi)還是片外擴展空間。
圖1 51單片機I/O口中P1口單引腳結(jié)構(gòu)
51系列處理器皆以8位為主,所以在匯編語言中的數(shù)據(jù)的存放是以8位為一個單元,因此在C語言中定義時大都以8位的數(shù)據(jù)范圍為主要的數(shù)據(jù)類型結(jié)構(gòu)。匯編語言中有MOV,MOVX,MOVC三條存儲器數(shù)據(jù)傳遞指令,由于內(nèi)部和外部ROM的地址是連續(xù)的,故用MOVC一條指令即可;片內(nèi)數(shù)據(jù)存儲器與片外數(shù)據(jù)存儲器的地址部分 (0000H-00FFH)是重疊的,所以用MOV和MOVX加以區(qū)分。在講解存儲器結(jié)構(gòu)時,使用匯編語言可以利用指令上的差異,使學生對單片機存儲器的邏輯和物理結(jié)構(gòu)都有一個深入的認識。對課程后期單片機外圍模塊存儲器擴展的硬件連接和軟件編程的理解有良好的促進作用。
這是51單片機I/O口中P1口單引腳結(jié)構(gòu),I/O口都有輸入和輸出雙向功能,輸入功能有一種是讀鎖存器的內(nèi)容,進行處理后再寫到鎖存器中,這種操作即讀—修改—寫操作,在匯編語言中JBC(邏輯判斷)、CPL(取反)、INC(遞增)、DEC(遞減)、ANL(與邏輯)和ORL(邏輯或)指令均屬于這類操作。這類操作的執(zhí)行大都要有內(nèi)部寄存器A輔助,匯編語言可以加深對讀鎖存器的了解。
輸入功能另一種便是直接讀取I/O口上的狀態(tài),常常在鍵盤設(shè)計的編程中使用,據(jù)以往的教學經(jīng)驗,因為C語言賦值語句的直接性,學生們常常會忘記先要讀入I/O口引腳狀態(tài),而直接賦值,導致程序出錯還往往不知道原因何在。運用匯編語言中專門的數(shù)據(jù)傳遞指令,可以形象得知該I/O口是輸入或是輸出用,在匯編語言中可以很清晰地得知目的操作數(shù)和源操作數(shù)的區(qū)別,學生們在對引腳狀態(tài)判斷時,會自動讀取I/O口的數(shù)據(jù),所以在教學I/O口輸入輸出基本應用時,先通過匯編語言的簡單編程使學生們對I/O口雙向性的應用和不同的編程方式有一個具體的了解,再轉(zhuǎn)換為C語言編程會達到事半功倍的效果。在學習51單片機的學習中對I/O口方向性的學習加以重視,對以后學習PIC和AVR等需確定方向性嵌入式應用有很大的幫助。
筆者所教學的是電子專業(yè)的學生,對硬件的熟悉掌握更甚于軟件的使用,通過C語言與匯編語言在單片機教學中的融合應用,是學生對單片機內(nèi)部硬件模塊原理熟練掌握,并且舉一反三,在類似元器件應用設(shè)計中可以借鑒運用。通過匯編和C語言在教學中的融合應用,培養(yǎng)學生快速的低級和高級語言的轉(zhuǎn)換思維,提高對匯編語言和C語言編程能力。
[1]馬斌,韓忠華,王長濤,夏興華.單片機原理及應用:C語言程序設(shè)計與實現(xiàn)[M].北京:人民郵電出版社,2009.
[2]趙念強,鮑可進.單片機原理及應用教學改革實踐[J].計算機教育,2008(24):9.