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