李志強,向 卓,眭仁武
(衡陽師范學院 物理與電子工程學院,湖南 衡陽 421002)
“單片機應用技術(shù)”是一門邏輯性較強的實踐課程,核心內(nèi)容是單片機應用程序的設(shè)計[1]。學生在初學程序設(shè)計的過程中常受到語法錯誤和邏輯錯誤的困擾,語法錯誤可根據(jù)編譯器的編譯提示進行修改,而邏輯錯誤需由程序設(shè)計者通過編程調(diào)試來糾正[2-3]。因此,積極探索“單片機應用程序設(shè)計”的模擬仿真,可以加深學生對單片機程序運行過程和運行效果的理解,充分利用仿真技術(shù)的優(yōu)勢,強化過程學習,提高“單片機應用技術(shù)”課程的教學質(zhì)量和教學效果。本研究將從模擬仿真內(nèi)容、模擬仿真實踐和仿真結(jié)果3個方面進行闡述。
近年來,單片機應用程序設(shè)計大多采用德國Keil 51單片機集成開發(fā)環(huán)境。初次運用Keil進行程序設(shè)計時,設(shè)計者并不太清楚程序在單片機內(nèi)部的運行原理,很可能達不到預期目標,需通過仿真過程對設(shè)計程序的邏輯錯誤進行分析、調(diào)試和糾正。該仿真過程可通過硬件仿真器的“實時”在線仿真和軟件的模擬仿真實現(xiàn)。采用硬件“實時”在線仿真可以真實地呈現(xiàn)單片機應用程序的實時運行狀況,方便觀察運行結(jié)果,并及時解決相關(guān)問題,但實驗設(shè)備價格較高。采用軟件模擬仿真,僅需在PC機的仿真軟件上設(shè)置相應的條件,來模擬單片機實際運行的條件,進而觀察程序的運行狀況,方便簡易的軟件模擬仿真,更適合學生入門階段的程序?qū)W習。
初學單片機時,編寫的第一個單片機應用程序常為點亮發(fā)光二極管,若通過模擬仿真讓初學者觀察單片機輸入/輸出(Input/Output,I/O)端口上的高低電平變化情況,可以幫助學生更好地理解單片機程序的運行過程。當單片機程序運行時,若需獲取外部狀態(tài),在Keil集成開發(fā)環(huán)境下讀取I/O端口外部輸入電平,讀入的電平值均為高電平,顯然讀入結(jié)果不準確[4]。為了讓單片機程序運行時獲取真實的外部狀態(tài)條件,可通過模擬設(shè)置外部條件來實現(xiàn)。Keil 51集成開發(fā)環(huán)境的模擬器能模擬51單片機內(nèi)部特性和外部設(shè)備(I/O口、中斷、串行、定時等)的運行情況。采用Keil 51集成開發(fā)環(huán)境模擬器調(diào)試單片機程序既方便又能排除硬件錯誤,在單片機程序模擬仿真時,可以設(shè)置斷點、單步、全速、進入某個程序的內(nèi)部運行來查看變量的變化過程、I/O端口電平狀態(tài)變化、代碼執(zhí)行時間等信息。
單片機應用程序模擬仿真實踐主要從單片機I/O端口輸出和輸入、代碼執(zhí)行時間、中斷響應、串口通信等方面開展。
點亮發(fā)光二極管是通過程序來控制單片機I/O端口,打開I/O端口,查看I/O端口運行情況,圖1(a)為P1口的第0位,為高電平;程序運行后為低電平,如圖1(b)所示。
單片機程序從啟動到圖2(a)光標處用時為194.50 μs,當程序執(zhí)行完兩個for循環(huán)到圖2(b)光標處時,總用時為639.00 μs,也就是說,單片機在執(zhí)行完兩個for循環(huán)時,相應的程序代碼執(zhí)行時間為444.50(639.00-194.50)μs。
當單片機程序運行需要讀取單片機外部數(shù)據(jù)時,例如按鍵輸入程序,Keil軟件的調(diào)試工具沒有與硬件相連,就無法準確獲取單片機I/O端口引腳電平,但可通過模擬仿真設(shè)置來實現(xiàn)。打開按鍵輸入P3端口調(diào)試,當未設(shè)置相應端口引腳電平狀態(tài)時,程序無法執(zhí)行有鍵按下的語句,其運行界面如圖3(a)所示;當設(shè)置了相應端口引腳電平為低電平時,程序即可執(zhí)行有鍵按下的語句,如圖3(b)所示。
圖1 I/O端口輸出模擬仿真效果
圖2 代碼執(zhí)行時間模擬仿真效果
圖3 I/O端口輸入模擬仿真效果
在keil集成環(huán)境下的中斷請求,在采用定時中斷實現(xiàn)定時需求時,其定時中斷服務程序的調(diào)試可通過設(shè)置斷點或?qū)⒊绦驁?zhí)行到光標處來進行調(diào)試,先看能否進入其中斷服務程序,還未執(zhí)行中斷服務程序如圖4(a)所示;若能進入,再查看進入中斷服務程序時的時間,如圖4(b)所示。
圖4 中斷響應模擬仿真效果
串口通信程序包括串口發(fā)送程序和串口接收程序。串口發(fā)送程序的模擬仿真可以通過觀察串行通信調(diào)試窗口,如在執(zhí)行“while(!TI);”將會一直等待,直到TI變?yōu)?時才可繼續(xù)執(zhí)行,在串行窗口中的SBUF中看到發(fā)送的字符為0xAA,其仿真運行效果如圖5(a)所示;串口接收程序模擬仿真可在串行窗口中輸入相應的字符0X55,該字符可傳遞到中央處理器(Central Processing Unit,CPU)中,但不會顯示,其仿真運行效果如圖5(b)所示。
圖5 串口通信模擬仿真效果
基于keil集成開發(fā)環(huán)境模擬仿真單片機運行情況開展的教學實踐活動,能幫助學生更好地理解單片機程序的運行過程。衡陽師范學院2015—2018級電子信息工程專業(yè)的教學實踐表明,該教學實踐活動不僅幫助學生克服了程序設(shè)計過程的畏難情緒,還提高了學生程序設(shè)計的查錯糾錯能力,較好地完成了單片機相關(guān)課程的教學目標。