摘要:文章針對各高校單片機實驗設備數量少、學生實踐機會少的問題提出了采用軟件仿真教學和實驗的方法,并列舉了一些應用實例。
關鍵詞:單片機;仿真;教學;WAVE6000
單片機原理相關課程早已經成為許多高職院校的工科電氣類、電子類、計算機等相關專業的專業必修課。該課程具有很強的綜合性、實踐性。內容涉及單片機硬件結構和軟件使用,其中包括單片機的內部結構、指令系統、資源擴展、接口技術,單片機應用系統的硬件結構,開發過程及手段等。要讓學生學好這門課程,除了應該重視理論教學之外還必須非常重視實踐教學,通過大量的實踐課來提高學生的學習興趣。然而,很多高職院校單片機實驗設備數量有限,無法完全滿足學生的實驗要求,只能解決基本的實驗問題。而解決這個問題的一個既行之有效,又經濟快速的方法就是采用仿真軟件進行教學和實驗。這不需要大量的單片機實驗設備,只需要普通電腦就可以解決。而計算機室在每個學校的數量要遠多于單片機實驗室。因此,采用軟件仿真教學,硬件配合實驗的方法可以大大提高學生接觸“單片機”的機會,有助于學生分析問題和解決問題。
常用的單片機仿真軟件有WAVE6000和Medwin。其中WAVE6000軟件,中文/英文界面可任選,簡單易懂、操作方便,不用仿真器也能模擬運行用戶程序。WAVE6000軟件集成了編輯器、編譯器、調試器以及源程序編輯、編譯、下載、調試。WAVE6000軟件支持ASM(匯編)、PLM、C語言多模塊混合源程序調試,在線直接修改、編譯、調試源程序。如果源程序有錯,可直接定位錯誤所在行。在源程序窗口,WAVE6000軟件可以顯示單片機內部CPU及各個存儲器的內容,點擊變量就可以觀察此變量的值,方便快捷。WAVE6000軟件的書簽、斷點功能可快速定位程序,為編寫、查找、比較程序提供幫助。在學生學習單片機內部硬件結構和指令系統時,使用仿真軟件教學比使用實驗箱教學更有效果。WAVE6000軟件在教學中較為常用,在教學中它主要能起到以下作用。
(一)仿真軟件可以將CPU及各存儲器的內容以具體的形式進行展示,讓學生對存儲器結構及程序、數據存放方式有更深的認識。
計算機執行命令時,識別的代碼是機器語言,也就是二進制代碼。而學生編程的時候采用的卻是匯編語言或更高級語言。初學者在這一點上往往難以理解。但是利用WAVE6000仿真軟件,可以清楚地看到程序存儲器里的內容,同時對于一些偽指令的使用方法及意義有所了解。另外,單片機的七種尋址方式,也可以通過仿真軟件的演示讓學生進一步掌握,特別是寄存器間接尋址、變址尋址這些較難理解的尋址方式,通過編寫一些簡單的實例,運行程序后,演示CPU及各存儲器的內容,便一目了然。例如:
ORG 0010H
MOV 20H,#30H
MOV R0,#20H
MOV A,R0
MOV A,@R0
當程序進行匯編后,可以從CODE窗口展示程序的內容,可看到從程序存儲器0010H單元開始,依次存放,75H、20H、30H、78H、20H、E8H、E6H,這些便是程序編譯后產生的程序代碼,也是計算機所識別的機器語言。例如75H表示立即數尋址,20H表示地址,接著的30H即表示立即數。讓學生看到了機器語言和匯編語言的不同,體會到了“語言”在計算機技術里的作用,更加了解單片機存放程序的形式,了解了偽指令的意義,類似的偽指令如DB,DW的意義也可以演示出來。同時,執行WAVE6000軟件中的“單步”指令,觀察A、R0和DATA窗口20H單元中的內容變化,可以將寄存器尋址方式和寄存器間接尋址方式區別開來。另外WAVE6000獨創的控制文件方式的反匯編功能,可以將機器碼反匯編成工整的匯編語言,通過控制文件可以定義程序中數據區、程序區、無用數據區,還可將一些數據、地址定義成符號,便于閱讀。
(二)仿真軟件可以演示指令的執行的過程,對學習控制及轉移指令特別有幫助
在程序編譯后,可以執行WAVE6000軟件中的“單步”指令,同時可以在軟件下方的狀態欄中觀察程序計數器PC指針的變化。即采用“單步”運行,可看到指針從第一句程序開始運行,每執行一句程序PC的值會自動增加,而增加的數量也就是所執行語句占用的字節數,當執行到跳轉指令時,指針變指向目的程序,而PC的值也會顯示為目的程序的地址。控制及轉移指令編程中經常使用,是構建循環結構或分支結構必不可少的指令,在指令學習中是個難點重點,學生對此非常頭疼。在WAVE6000軟件的幫助下,學生通過全程觀察程序的執行過程,深刻地理解控制及轉移指令的作用,對提高學習效率和學習效果很有幫助,這甚至比即使使用真正的單片機設備實驗教學效果還要好。
(三)仿真軟件,可以演示指令的執行情況,結果,有助于學生理解指令,加強指令的記憶。
PSW寄存器包含了各種程序狀態的信息,在程序執行的過程中,存放著指令運行的某些結果。我們可以利用一些簡單的程序,如算術運算程序,跳轉程序等通過仿真軟件演示對標志位的影響。而堆棧指令通常用來保護現場,那么究竟是怎么保護?保護的數據又存放在什么位置?“先進后出,后進先出”的原則又是怎么體現?SP又起到什么作用?以上問題我們可以通過簡單的PUSH和POP指令進行演示,并從SFR窗口和數據窗口中觀察SP和相關存儲單元的內容變化。這也是軟件教學的突出優點。
(四)仿真軟件可以幫助編寫程序
在軟件的外設菜單中,可以對定時器/計數器的工作方式進行定義,并可以生成相應的匯編/C語言,對于采用中斷、串行口的程序,可以選擇相應的選項,輔助生成中斷初始化程序。
另外,在大部分單片機程序中,常常用到延時程序。延時程序分為軟件延時和硬件延時,其中軟件延時是通過執行一個具有固定延遲時間的循環程序來實現延時的,編寫簡單,但在計算方面較為麻煩,而且修改循環次數后需要重新進行時間的計算。但是,如果利用WAVE6000我們就可以很快地知道軟件延時的時間。編寫程序如下(設單片機的晶振頻率為12MHZ):
MOV R6,#0FFH
LOOP2:MOV R7,#0FFH
LOOP1:NOP
NOP
DJNZ R7,LOOP1
DJNZ R6,LOOP2
SJMP $
編譯后,將光標移至SJMP $語句的開始位置,然后執行WAVE6000軟件的命令“執行到光標處”,執行結束后,可以在下方的狀態欄中看到執行的時間為260.886ms。由此我們可以推算出,如果晶振頻率為6MHZ,則該程序延時的時間就變為521.772ms。可以通過更改循環次數和循環范圍來增加或減少時間,并執行程序便很快地知道延時的時間。其他類似的程序,比如采用定時器編寫的延時程序也可以通過此種方法來了解延時時間,提高延時的精度。這是教學軟件給編程者提供的一個便利。
(五)仿真軟件,可以加強學生的程序編寫能力和調試能力。
對于語法上的錯誤,編譯后給出錯誤代碼,根據提示的內容,并結合所學的知識進行修改,也可以采用跟蹤、設置段點等方法進行局部調試。并通過軟件指示并結合所學的知識進行修改后,正確的程序能讓學生很有成就感。對于初學者仿真軟件的這個功能可以提供練習指令的機會,而對于進行大中型程序編寫者,仿真軟件的這個功能又可以替他們把關。這也是教學軟件的一大優越性。
單片機是一門軟件和硬件知識綜合的課程,我們需要不斷改進教學方法,豐富教學手段來提高學生學習的興趣。計算機軟件教學是對理論教學和普通實驗教學的補充和強力的支持,在教學要求越來越高和教學手段日益豐富的今天,它們之間已形成了互相輔助,互相補充,又相互依存的關系,我們只有正確認清它們之間的關系,并適當地運用各種教學手段,才能較好地完成單片機教學任務,達到既定的教學目標,取得較好的教學效果。在單片機教學的過程中,適當地引入仿真軟件進行教學及實驗,已成為提高學生學習效率,提高編程和調試能力,開拓學生思路的行之有效的教學手段。
作者簡介:
張弘(1980—),廣西大學電氣工程系在讀電氣工程碩士,廣西水利電力職業技術學院助講,研究方向為電子技術及計算機控制技術。
黃志先(1978—),廣西大學電氣工程系在讀電氣工程碩士,廣西水利電力職業技術學院助講,研究方向為電力行業技能培訓及計算機控制技術。