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