徐 磊,申紅軍,蔡亞永
(新疆工程學院 電氣與信息工程系,新疆 烏魯木齊 830091)
流水燈實際上是一個帶有八個發(fā)光二極管的單片機最小應用系統(tǒng),即為由發(fā)光二極管D1~D8、晶振Xl、電源VCC、單片機AT89C51和程序等組成的系統(tǒng)[1]。其具體硬件組成如圖1所示。
圖1 硬件電路Fig.1 Hardware circuit
從原理圖中可以看出,如果讓接在P2.0口的D1亮起來,那么只要把P2.0口的電平變?yōu)榈碗娖骄涂梢粤耍幌喾?,如果要接在P2.0口的D1熄滅,就要把P2.0口的電平變?yōu)楦唠娖?;同理,接在P2.1~P2.7口的其他7只發(fā)光二極管點亮和熄滅的方法同D1。因此,要實現(xiàn)流水燈功能,只要將發(fā)光二極管D1~D8依次點亮、熄滅,8只發(fā)光二極管便會一亮一暗的做流水燈了。在此還應注意一點,由于人眼的視覺暫留效應以及單片機執(zhí)行每條指令的時間很短,在控制二極管亮滅的時候應該延時一段時間,否則就看不到“流水”效果了[2]。
單片機的應用系統(tǒng)由硬件和程序組成,上述硬件原理圖搭建完成上電之后,還不能看到流水燈循環(huán)點亮的現(xiàn)象,要實現(xiàn)流水燈循環(huán)點亮,還要告訴單片機該怎么進行工作,即編寫程序控制單片機管腳電平的高低變化,以實現(xiàn)發(fā)光二極管的一亮一滅。下面以8個發(fā)光二極管循環(huán)點亮來介紹兩種C語言程序的編程方法。
1)位控法
位控方法采用順序程序結構,用位指令控制P2口的每一個位輸出高低電平,從而來控制相應發(fā)光二極管的亮滅。程序如下:
由上述程序得知:8個發(fā)光二極管循環(huán)點亮是通過逐個控制P2端口的每個位來實現(xiàn)的,因程序編制起來繁瑣。所以程序結構顯得較為復雜,而且程序編譯后,占用的存儲空間也比較大,上面的程序編譯后,占用100 Byte存儲空間。
一是操作過程:依有限元分析方法的主要思想,將待輸入的物理狀態(tài)參數(shù)作為已知量,根據(jù)分析計算的目標設定相關邊界條件參數(shù)和規(guī)定各物理條件狀態(tài),通過壓力求解器求解計算內流體模型的內流場壓強p、速度v、溫度t等未知量。
2)循環(huán)移位法
循環(huán)移位法利用循環(huán)移位指令,采用循環(huán)程序結構進行編程。在程序一開始就給P2口送一個數(shù),這個數(shù)本身就讓P2.0先低,其他位為高,然后延時一段時間,再讓這個數(shù)據(jù)向高位移動,然后再輸出至P2口,實現(xiàn)“流水”效果。具體編程如下所示,
上述兩種方法編寫的程序,經(jīng)軟件仿真和硬件開發(fā)板上測試驗證都可以實現(xiàn)8為彩燈循環(huán)點亮的目的。但是采用循環(huán)位移發(fā)編寫的程序,實現(xiàn)向右循環(huán)點亮后又向左循環(huán)點亮的效果,是第1種方法的2倍,但是經(jīng)編譯后的代碼,占用90Byte的存儲空間[3]。
表明在軟件開發(fā)過程中,采用合理的編程方法和算法結構,可以提高代碼的效率,節(jié)省單片機資源元件的存儲空間。
1)Proteus仿真調試
采用Proteus仿真時,分以下幾個個步驟進行:
①啟動Proteus仿真軟件
雙擊“isis”圖標,出現(xiàn)isis操作頁面。
②搭建單片機系統(tǒng)仿真電路
分“器件選取”、“器件放置”和“電路連接”三步進行操作。③創(chuàng)建和導入ASM源文件
進入菜單欄,選擇“Source”下“Add/Remove Source files…即彈出“Add/Remove Source Code Files”對話框。再點擊“New”按鍵,彈出“New Source Files”對話框,即可以創(chuàng)建(只在文件名欄目輸入一個文件名,后綴為ASM)或導入ASM源文件。確 定 后,“Add/Remove Source Code Files”對 話 框 中“Source Code Filename"欄目即有ASM源文件名及路徑,然后在“Code Generation Tool”欄目中選擇“ASEM51”,最后點擊“OK”按鍵,即完成了創(chuàng)建和導人ASM源文件。此后“Source”下即可以看到相應的ASM源文件。
④編譯ASM和導入HEX文件
編譯ASM文件的前提是已導人ASM文件,啟動編譯的方法有兩種:①進入菜單欄,選擇“Source"下“Build All”即彈出“BUILD LOG"提示框,提示編譯ASM文件的結果。②直接點擊器件放置和運行區(qū)下方的“運行”按鍵,若ASM文件內容有變化,即自動對其編譯,若問題即彈出“SOURCE CODE BUILD ERRORS”提示框,提示編譯ASM文件的結果。編譯ASM文件成功后即生成HEX文件,單片機導人HEX文件的方法是,打開單片機器件屬性對話框,在“Program Files"欄目里打開文件目錄,選擇裝入HEX文件即可。單片機此后按照該HEX文件的代碼運行程序[4-5]。
2)調試方法
進入菜單欄,選擇“Debug”下“Start/Resart Debugging”,即進入調試狀態(tài),此后可以進行單步運行、全速運行、斷點設置等功能操作。
3)Keil C uVision2與Proteus連接仿真調試
安裝Keil C uVision2軟件及vdmagdi程序
Keil的配置
①進入keil uVision2集成開發(fā)環(huán)境,創(chuàng)建一個新項目(Project),選定AT89C51單片機的CPU器件,并未該項目加入Keil C源程序(以上所編C語言程序)。
②單機“Projedt菜單/Option for Target”選項或者單擊工具欄的“Option for Target”,彈出窗口,點擊“Debug”按鈕,出現(xiàn)如圖2所示的頁面。
圖2 目標設置選項Fig.2 Goal setting options
在出現(xiàn)的對話框里在右欄上部的下拉菜單里選擇“Proteus VSM Simulator”。并且還要點擊一下“Use”前面表示選中的小圓點。
再點擊“Setting”按鈕,設置通信接口,在“Host”后面添上“127.0.0.1”,如果使用的不是同一臺電腦,則需要在這里添上另一臺電腦的IP地址 (另一臺電腦也應安裝Proteus)。在“Port”后面添加“8000”。設置好的情形如圖3所示,點擊“OK”按鈕即可。最后將工程編譯,進入調試狀態(tài)并運行。
圖3 通信接口設置Fig.3 Communication interface settings
進入Proteus的ISIS。鼠標左鍵點擊菜單“Debug"。選中“use remote debuger monitor”,如圖4所示。此后,便可實現(xiàn)Keil C與Proteus連接調試[6]。
圖4 Proteus的設置Fig.4 Proteus settings
單擊仿真運行開始按鈕,能清楚地觀察到每一個引腳的電平變化。淺色代表高電平,深色代表低電平。
在Proteus里的仿真結果如圖5所示。
圖5 Proteus仿真結果Fig.5 The simulation results of Proteus
單片機開發(fā)Keil C51與Proteus軟件的聯(lián)合仿真應用于單片機接口技術的課程教學,收到了良好的教學效果,教學質量得到明顯提高,學生對單片機學習興趣明顯增強。在教學過程中,每個實例都采用單片機開發(fā)Keil C51與Proteus[7-8]軟件聯(lián)合仿真、調試,學生可以直觀地看到電路輸出狀態(tài),比易讀懂并理解所調試的程序。這在一定程度上降低了學生學習單片機的難度,也提高了學生學習單片機的興趣。
[1]劉國光.任務驅動法在單片機教學中的應用[J].高等教育研究學報,2004(4):74-75.LIU Guo-guang.The application of task-driving method in the teaching of single-chip microcomputer[J].Journal of Higher Education Research,2004(4):74-75.
[2]全國電子專業(yè)人才考試教材編委會.單片機設計與開發(fā)[M].北京:科學出版社,2009.
[3]周國運.單片機原原理及應用(C語言版)[M].北京:中國水利電力出版社,2009.
[4]周靈彬,張靖武.PROTEUS的單片機教學與應用仿真[J].單片機與嵌入式系統(tǒng)應用,2008(1):76-79.ZHOU Ling-bin,ZHANG Jing-wu.MCU Teaching and application of simulation PROTEUS[J].Microcontrollers&Embedded Systems,2008(1):76-79.
[5]尹春雷.基于Proteus的《單片機機原理與應用》課程教學改革與實踐[C]//全國高等學校電子技術研究會論文集,2007:354-356.
[6]杜樹春.基于Proteus和Keil C51的單片機設計與仿真[M].北京:電子工業(yè)出版社,2012.
[7]王靜,徐斌,張凱,等.基于Proteus心血管測試儀前置放大端的研制[J].電子科技,2012,25(8):3-5.WANG Jing,XU Bin,ZHANG Kai,et al.Development of a proteus-based cardiovascular tester endpreamplifier[J].Electronic Science and Technology,2012,25(8):3-5.
[8]吳文忠.基于Proteus的自動撥號報警器仿真設計[J].現(xiàn)代電子技術,2011,34(10):55-58.WU Wen-zhong.Simulation design of an auto-dial annunciator based on Proteus[J].Modern Electronics Technique,2011,34(10):55-58.