用Proteus仿真單片機的方法_第1頁
用Proteus仿真單片機的方法_第2頁
用Proteus仿真單片機的方法_第3頁
用Proteus仿真單片機的方法_第4頁
用Proteus仿真單片機的方法_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 用PROTEUS對單片機進行仿真的方法與實例 吳漢清 Proteus軟件是英國Labcenter Electronics公司的一款電路設計與仿真軟件,它包括ISIS、ARES等軟件模塊,ARES模塊主要用來完成PCB的設計; ISIS模塊用來完成電路原理圖的布圖和仿真。它可以進行模擬電路仿真、數字電路仿真,也可以進行單片機及其外圍電路組成的系統(tǒng)的仿真;軟件提供了各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器、電壓表、電流表等。和其它仿真軟件相比,Proteus ISIS最大特色是對單片機系統(tǒng)的仿真,目前支持的單片機類型有: 68000系列、8051系列、ARM系列、AVR系列、PIC系列、Z

2、80系列、HC11系列等。本文主要介紹Proteus軟件在單片機方面的仿真功能,即ISIS模塊的用法。 在單片機學習開發(fā)的過程中,程序的調試是一個很重要的環(huán)節(jié),要安裝電路進行實驗,而且電路在調試過程中往往要進行調整和改變,這不緊增加了費用和難度,而且也影響了學習和開發(fā)的進度,這也成了一些初學者學習的障礙。如果使用Proteus 軟件就可以大大節(jié)省時間和開發(fā)費用,可以在軟件仿真通過后再制作印刷電路板進行電路實驗。一、Proteus ISIS軟件的工作環(huán)境和一些基本使用方法 下面通過一個流水燈的實例來說明Proteus的基本使用方法,使用的軟件版本是Proteus.Professional 7.1

3、 SP2。 流水燈使用AT89C51單片機,用P2口作輸出口。先在Keil uVision編譯器中輸入下列程序:#include <reg51.h>void Delay1ms(unsigned int count)/延時子程序 unsigned int i,j; for(i=0;i<count;i+) for(j=0;j<120;j+);main() /主程序 unsigned char LEDIndex = 0; bit LEDDirection = 1; while(1) if(LEDDirection) P2 = (0x01<<LEDIndex); e

4、lse P2 = (0x80>>LEDIndex); if(LEDIndex=7) LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%8; Delay1ms(200); 將上述程序編譯生成目標文件LED.hex。然后按下列步驟進行:1. 運行Proteus 7 Professional(ISIS 7 Professional)出現如圖1所示的界面: 這是一種標準的Windows界面,包括標題欄、主菜單、標準工具欄、繪圖工具欄、狀態(tài)欄、對象選擇按鈕、預覽對象方位控制按鈕、仿真進程控制按鈕、預覽窗口、對象選擇器窗口、圖形編輯窗口

5、。2.添加元件到對象選擇器元件列表中 單擊繪圖工具欄中的按鈕,再單擊對象選擇按鈕P,出現挑選元件對話框,見圖2。按表1添加本例所用的元件。表1 名稱元件種類(Category)子種類(Sub-category)單片機AT89C51Microprocessor ICs8051 Family按鈕開關BUTTONSwitches & RelaysSwitches電容器CAPCapacitorsGeneric電解電容器CAP-ELECCapacitorsGeneric電阻器RESResistorsGeneric發(fā)光二極管LED-REDOptoelectronicsLEDs晶振CRYSTALMi

6、scellaneous 如果一開始對種類不熟悉,可直接在對話框的KEYWORDS中輸入元件的名稱如AT89C51、CAP等,就可以直接找到所需的元件,如圖3。 添加好元件的對象選擇器元件列表見圖4。 3.放置元件 在元件列表中左鍵選取AT89C51,在原理圖編輯窗口中適當的位置單擊左鍵,這樣AT89C51就被放到原理圖編輯窗口中了,同樣放置其它元件。兩次右擊可以刪除放置的元件,右擊選中元件后按方向控制按鈕可改變元件的方向。右擊選中元件后再按住左鍵可移動元件位置。 4.放置“地”、“電源” 添加“地”:左鍵選擇模型選擇工具欄中的 圖標,在圖5中左鍵選擇GROUND,并在原理圖編輯窗口中左擊,這樣

7、“地”就被放置到原理圖編輯窗口中了。同樣地,選擇POWER可放置“電源”。 5.編輯元件的屬性 右擊選元件后再左擊即可編輯元件的屬性,也可以右擊后在快捷菜單中選擇命令Edit Prorerties。如R1的屬性窗口如圖6。 在對AT89C51的屬性進行編輯時要加入仿真文件,在Program File中單擊出現文件瀏覽對話框,找出LED.hex文件,單擊確定完成添加文件,單擊OK退出。6.連線 在要連線的一個點左擊,移動鼠標到到另一個點再左擊即可畫好一條連線,按 放置導線連接結點,畫好連線的仿真電路圖見圖7。 AT89C51的VSS、VDD不需要連線,默認VSS=0V、VDD=+5V、GND=0

8、V。 7.仿真 單擊仿真進程控制按鈕中的開始仿真,我們可看到發(fā)光二極管分別按兩個方向依次點亮。輸出端的小方點紅色代表高點平,藍色代表低電平,灰色代表不確定電平。在仿真時單片機的晶振電路和復位電路可以省略不畫,時鐘頻率可以在AT89C51的屬性中設置,默認值為12MHz。對于設計好的文件可以保存以便下次調用。 二、單片機仿真實例 上面通過一個簡單的例子介紹了Proteus ISIS的基本使用方法,下面再通過筆者設計的幾個實例進一步介紹Proteus ISIS的使用方法和技巧,同時也能夠使大家看到幾個單片機應用的實例。 1.電感測試儀電感測試儀以電感加上電壓后電流增加的規(guī)律作為測量依據,因為電感加

9、上電壓后電流增加的速度與電感量相關,通過測量電流達到某一預定值所花的時間就能測量出電感的電感量。單片機使用AT89C2051,測量電路如圖8所示,A為AT89C2051內部構造的電壓比較器,利用電壓比較器測量電感中電流的變化,合上開關后電源電壓E+ 加在電感LX和電阻R的串聯回路上,這時回路中電流IL由零開始逐漸增加,在電阻R兩端電壓從0升到0.632E+的過程中,P3.6口輸出為0,當電阻R兩端電壓一旦超過0.632E+后,P3.6口輸出電平即變?yōu)?。以P3.6口的輸出狀態(tài)為依據,用AT89C2051內部的定時器T0對時間進行計數,再將計數結果顯示出來即得出測量結果。量程可分為多檔,采用兩位

10、半數碼管顯示,單位為mH。我們只要仿真其中的一檔即可,這里取×10檔進行仿真,即讀數乘以10為實際電感量。電感測試儀的源程序如下:#include <reg51.h>unsigned char j,m,n,t,DispBuf3;unsigned int L;unsigned char codeBitTab3=0xdf,0xef,0xf7;/位驅動碼unsigned char codeDispTab11=0x41,0xcf,0x52,0x46,0xcc,0x64,0x60,0x4f,0x40,0x44,0xff;/字形碼sbit P1_2=P12;sbit P3_6=P36

11、;void Delay1ms(unsigned int count) /延時程序 for(n=0;n<count;n+) for(m=0;m<250;m+);void main() /主程序 TMOD=0x01;/定時器T0方式1 while(1) /無限循環(huán) t=BitTabj;/取位值 P1=P1|0x38;/P1.3-P1.5送1 P1=P1&t; /P1.3-P1.5輸出取出的位值 t=DispBufj;/取出待顯示的數 t=DispTabt;/取字形碼 P3=t; /字型碼由P3輸出顯示 Delay1ms(5); j+; /j作為數碼管的計數器,取值0-2,顯示程

12、序通過它確認顯示哪個數碼管 if(j=3) j=0; TH0=0; TL0=0; P1_2=0;/測試開始 TR0=1; /開定時器T0 for(;P3_6=0;);/判斷電阻上的電壓上升到參考電壓否 TR0=0;/電壓達到參考電壓,關定時器T0 P1_2=1; L=TL0|(TH0<<8);/取定時器T0中的數值 L=L-3; if(L>=200) DispBuf2=10; DispBuf1=10; DispBuf0=1; /超量程,百位數顯示1,個位、十位不顯示(滅) else /不超量程,取各位數值 DispBuf2=L;/取個位數 L=L/10; DispBuf1=L

13、;/取十位數 DispBuf0=L/10;/取百位數 用Keil uVision將上述程序編譯生成目標文件DGZS.hex。電路中所使用的元件見表2。表2 名稱元件種類(Category)子種類(Sub-category)單片機AT89C2051Microprocessor ICs8051 Family電阻器RESResistorsGeneric可變電阻器POT-LINResistorsVariable三極管2N2905TransistorsBipolar電感器IND-AIRInductorsGeneric4位共陰數碼管7SEG-MPX4-CAOptoelectronics7-Segment

14、Displays 繪制好的仿真電路圖如圖9。圖中添加示波器時,先左鍵選擇模型選擇工具 欄中的 圖標,再選擇OSCILLOSCOPE,并在原理圖編輯窗口中左擊,這樣示波器就被放置到原理圖中了。由于AT89C2051的P1.0和P1.1是復用端口,除了作I/O口外,還有一個功能是作為電壓比較器的輸入端,P1.0為同相輸入端,P1.1為反相輸入端,這里作電壓比較器的輸入端使用,因此在設置AT89C2051的屬性時要將其設置電壓比較器的輸入端,即Ehable Comparator選擇Yes,如圖10。 被測電感器的電感量定為1H。單擊開始仿真,可變電阻RP1是用來校準測量值的,按動RP1的+或-按鈕,

15、調節(jié)RP1使數碼管顯示100。仿真結果見圖10。電阻R2為換擋電阻,改變它的值即可改變擋位。2. 充電器 這是用PIC12F675單片機做的充電器,能對兩節(jié)鎳鎘或鎳氫電池充電,充電器采用電壓監(jiān)測的方法判斷充電是否結束,充電結束后能自動停止充電。圖11是電路圖,圖中PIC12F675的7腳作模擬信號輸入端AN0使用。單片機使用內部時鐘振蕩器,引腳3作充電控制電壓輸出端GP4使用。S為復位開關,復位開關主要在重新放上電池后使用。 接上電源后,PIC12F675的GP4輸出低電平,三極管VT1飽和導通,兩節(jié)電池開始充電。隨著電池電壓的上升,輸入到單片機的模擬電壓也不斷升高,當電壓大于預定的設定值3V

16、時,GP4輸出高電平使VT1截止,電池停止充電,并自鎖在這一工作狀態(tài),即使電池在停止充電后電壓略有下降也不會重新進行充電。 在PIC單片機的MPLAB IDE編譯器中輸入下列程序:#INCLUDE "P12F675.INC"W_TEMP EQU 20HSW EQU 21HTEMP EQU 22H ORG 000HMAIN NOP MOVLW 00H MOVWF SW MOVLW 95H MOVWF TEMP BSF STATUS,RP0 MOVLW B'00001001' MOVWF TRISIO MOVLW B'00000001' MOVW

17、F ANSEL MOVLW B'10000111' MOVWF OPTION_REG BCF STATUS,RP0 MOVLW B'00000111' MOVWF CMCON BCF GPIO,GP4 BSF GPIO,GP5LOOP BTFSC SW,0 GOTO LOOP MOVLW B'00000001' MOVWF ADCON0 BSF ADCON0,GOADC BTFSS PIR1,ADIF GOTO ADC MOVF ADRESH,0 SUBWF TEMP,0 BTFSC STATUS,C GOTO LOOP BSF GPIO,GP4

18、 BCF GPIO,GP5 BSF SW,0 GOTO LOOP END 然后編譯生成目標文件charger.hex。 對充電器仿真時有一個難點,就是Proteus元件庫中沒有可仿真的充電電池,它的電池元件加上充電電流后電壓不會上升,為此可在電池上串一只可變電阻,這樣改變可變電阻的大小就可以就可以改變充電回路兩端的電壓,用來模擬電池電壓的變化。電路中所使用的元件見表3。 表3 名稱元件種類(Category)子種類(Sub-category)單片機PIC16F675Microprocessor ICsPIC12 Family電阻器RESResistorsGeneric可變電阻器POT-LINR

19、esistorsVariable三極管2N5415TransistorsBipolar按鈕開關BUTTONSwitches & RelaysSwitches發(fā)光二極管LED-REDOptoelectronicsLEDs單節(jié)電池CELLMiscellaneous 繪制仿真電路圖時添加直流電壓表和上例中選擇示波器類似,先左鍵選擇模型選擇工具欄中的 圖標,再選擇DC VOLTMETER即可。 將可變電阻器RP1滑動觸點調到中點以下的位置單擊 開始仿真,仿真結果見圖12。 RP1的滑動觸點向上調節(jié),電壓表的讀數會逐漸上上升,當讀數大于3V時,會停止充電,發(fā)光二極管VD1熄滅,電壓表的讀數恢復為

20、2.5V,這時即使我們把RP1 滑動觸點調到中點以下也不會重新充電,只有按一下復位鍵S1才會重新充電。 3. 電機調速控制器 直流電機的調速主要調整其工作電流,通常有兩種方式:一種是在電機供電電路中串接一個可變電阻,通過改變可變電阻的阻值調節(jié)工作電流,從而調節(jié)轉速;另一種方法是在直流電機上加直流脈沖電壓,通過改變脈沖直流電的占空比來調節(jié)轉速。前一種方法因為可變電阻上有壓降要損耗功率,所以效率不高,只有用小功率直流電機時使用,后一種工作效率高,如目前的電動自行車都采用這種調速方式。下面用AVR單片機ATmega8設計一個電機調速控制器,使其定時/計數器T/C1工作在PWM模式,作為PWM脈寬調制

21、器。在ICCAVR編譯器中輸入下列程序:#include <iom8v.h>#define uchar unsigned char char k; void DelayMs(char i) char j; for(;i!=0;i-) for(j=143;j!=0;j-); #pragma interrupt_handler INT_0:2void INT_0(void) if(k!=250) k=k+5; OCR1A=k; /設置PWM參數 DelayMs(100); #pragma interrupt_handler INT_1:3void INT_1(void) if(k!=5

22、) k=k-5; OCR1A=k; /設置PWM參數 DelayMs(100); void main(void) DDRD=0X00; PORTD=0xff; /設置PD口為帶上拉電阻的輸入口 DDRB=0xff; /設置PB口為推挽1輸出 PORTB=0xff; SREG=0x80; /開全局中斷 GICR=0xc0; /開外部中斷 TCCR1A=0xc1; /8位PWM,向上計數置位OC1A,向下計數清零OC1A TCCR1B=0x01; /時鐘1分頻,PWM信號頻率為1M/512=2KHz k=125; OCR1A=k; /設置PWM參數 while(1); 編譯生成目標文件djts.h

23、ex。電路中所使用的元件見表4。表4 名稱元件種類(Category)子種類(Sub-category)單片機ATmega8Microprocessor ICsAVR Family電阻器RESResistorsGeneric三極管2N3054TransistorsBipolar按鈕開關BUTTONSwitches & RelaysSwitches電池BATTERYMiscellaneous 直流電機MOTORElectromechanical 繪制好仿真電路圖,仿真結果見圖13。 當按下S1時,PB1輸出PWM信號占空比減小,電機速度減?。划敯聪耂2時,PB1輸出PWM信號占空比增加,

24、電機速度增加。從示波器上可以看到PWM信號占空比在調節(jié)時的變化。 4. 智力競賽搶答器 用單片機AT89C51做一個搶答器,供8組搶答,當主持人按一下開始鍵后即可開始搶答,當某一組按下搶答鍵后,其它各組的按鍵被鎖定,主機上的數碼管顯示相應的組號,同時該組桌上的發(fā)光二極管也點亮,并發(fā)出1秒鐘的報警聲,數碼管和發(fā)光二極管的顯示時間為5秒鐘。 在Keil uVision編譯器中輸入下列程序:#include <reg51.h>unsigned char n,i;unsigned long int m,t;sbit S1=P00;sbit S2=P01;sbit S3=P02;sbit S

25、4=P03;sbit S5=P04;sbit S6=P05;sbit S7=P06;sbit S8=P07;sbit VD1=P10;sbit VD2=P11;sbit VD3=P12;sbit VD4=P13;sbit VD5=P14;sbit VD6=P15;sbit VD7=P16;sbit VD8=P17;sbit SOUND=P30;sbit START=P31;void delay(t) /延時子程序 for(;t>0;t-) for(i=0;i<250;i+); void main() /主程序 while(1) /無限循環(huán) if(START=0)/若開始鍵按下 n=0; while(n=0)/若n=0,循環(huán)執(zhí)行 if(S1=0)/若S1按下 VD1=0;P2=0x79;n=1; /發(fā)光二極管VD1點亮

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論