新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用PROTEUS對(duì)單片機(jī)進(jìn)行仿真的方法與實(shí)例

用PROTEUS對(duì)單片機(jī)進(jìn)行仿真的方法與實(shí)例

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

接上電源后,PIC12F675的GP4輸出低電平,三極管VT1飽和導(dǎo)通,兩節(jié)電池開始充電。隨著電池電壓的上升,輸入到單片機(jī)的模擬電壓也不斷升高,當(dāng)電壓大于預(yù)定的設(shè)定值3V時(shí),GP4輸出高電平使VT1截止,電池停止充電,并自鎖在這一工作狀態(tài),即使電池在停止充電后電壓略有下降也不會(huì)重新進(jìn)行充電。
在PIC單片機(jī)的MPLAB IDE編譯器中輸入下列程序:
#INCLUDE "P12F675.INC"
W_TEMP EQU 20H
SW EQU 21H
TEMP EQU 22H
ORG 000H
MAIN NOP
MOVLW 00H
MOVWF SW
MOVLW 95H
MOVWF TEMP
BSF STATUS,RP0
MOVLW B00001001
MOVWF TRISIO
MOVLW B00000001
MOVWF ANSEL
MOVLW B10000111
MOVWF OPTION_REG
BCF STATUS,RP0
MOVLW B00000111
MOVWF CMCON
BCF GPIO,GP4
BSF GPIO,GP5
LOOP BTFSC SW,0
GOTO LOOP
MOVLW B00000001
MOVWF ADCON0
BSF ADCON0,GO
ADC BTFSS PIR1,ADIF
GOTO ADC
MOVF ADRESH,0
SUBWF TEMP,0
BTFSC STATUS,C
GOTO LOOP
BSF GPIO,GP4
BCF GPIO,GP5
BSF SW,0
GOTO LOOP
END
然后編譯生成目標(biāo)文件charger.hex。
對(duì)充電器仿真時(shí)有一個(gè)難點(diǎn),就是Proteus元件庫(kù)中沒有可仿真的充電電池,它的電池元件加上充電電流后電壓不會(huì)上升,為此可在電池上串一只可變電阻,這樣改變可變電阻的大小就可以就可以改變充電回路兩端的電壓,用來(lái)模擬電池電壓的變化。
電路中所使用的元件見表3。



表3

名稱元件種類(Category)子種類(Sub-category)
單片機(jī)PIC16F675Microprocessor ICsPIC12 Family
電阻器RESResistorsGeneric
可變電阻器POT-LINResistorsVariable
三極管2N5415TransistorsBipolar
按鈕開關(guān)BUTTONSwitches & RelaysSwitches
發(fā)光二極管LED-REDOptoelectronicsLEDs
單節(jié)電池CELLMiscellaneous

繪制仿真電路圖時(shí)添加直流電壓表和上例中選擇示波器類似,先左鍵選擇模型選擇工具欄中的 圖標(biāo),再選擇DC VOLTMETER即可。
將可變電阻器RP1滑動(dòng)觸點(diǎn)調(diào)到中點(diǎn)以下的位置單擊 開始仿真,仿真結(jié)果見圖12。






RP1的滑動(dòng)觸點(diǎn)向上調(diào)節(jié),電壓表的讀數(shù)會(huì)逐漸上上升,當(dāng)讀數(shù)大于3V時(shí),會(huì)停止充電,發(fā)光二極管VD1熄滅,電壓表的讀數(shù)恢復(fù)為2.5V,這時(shí)即使我們把RP1 滑動(dòng)觸點(diǎn)調(diào)到中點(diǎn)以下也不會(huì)重新充電,只有按一下復(fù)位鍵S1才會(huì)重新充電。
3. 電機(jī)調(diào)速控制器
直流電機(jī)的調(diào)速主要調(diào)整其工作電流,通常有兩種方式:一種是在電機(jī)供電電路中串接一個(gè)可變電阻,通過(guò)改變可變電阻的阻值調(diào)節(jié)工作電流,從而調(diào)節(jié)轉(zhuǎn)速;另一種方法是在直流電機(jī)上加直流脈沖電壓,通過(guò)改變脈沖直流電的占空比來(lái)調(diào)節(jié)轉(zhuǎn)速。前一種方法因?yàn)榭勺冸娮枭嫌袎航狄獡p耗功率,所以效率不高,只有用小功率直流電機(jī)時(shí)使用,后一種工作效率高,如目前的電動(dòng)自行車都采用這種調(diào)速方式。
下面用AVR單片機(jī)ATmega8設(shè)計(jì)一個(gè)電機(jī)調(diào)速控制器,使其定時(shí)/計(jì)數(shù)器T/C1工作在PWM模式,作為PWM脈寬調(diào)制器。
在ICCAVR編譯器中輸入下列程序:
#include
#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:2
void INT_0(void)
{
if(k!=250)
k=k+5;
OCR1A=k; //設(shè)置PWM參數(shù)
DelayMs(100);
}

#pragma interrupt_handler INT_1:3
void INT_1(void)
{
if(k!=5)
k=k-5;
OCR1A=k; //設(shè)置PWM參數(shù)
DelayMs(100);
}

void main(void)
{
DDRD=0X00;
PORTD=0xff; //設(shè)置PD口為帶上拉電阻的輸入口
DDRB=0xff; //設(shè)置PB口為推挽1輸出
PORTB=0xff;
SREG=0x80; //開全局中斷
GICR=0xc0; //開外部中斷
TCCR1A=0xc1; //8位PWM,向上計(jì)數(shù)置位OC1A,向下計(jì)數(shù)清零OC1A
TCCR1B=0x01; //時(shí)鐘1分頻,PWM信號(hào)頻率為1M/512=2KHz
k=125;
OCR1A=k; //設(shè)置PWM參數(shù)
while(1);
}
編譯生成目標(biāo)文件djts.hex。
電路中所使用的元件見表4。
表4

名稱元件種類(Category)子種類(Sub-category)
單片機(jī)ATmega8Microprocessor ICsAVR Family
電阻器RESResistorsGeneric
三極管2N3054TransistorsBipolar
按鈕開關(guān)BUTTONSwitches & RelaysSwitches
電池BATTERYMiscellaneous
直流電機(jī)MOTORElectromechanical

繪制好仿真電路圖,仿真結(jié)果見圖13。




當(dāng)按下S1時(shí),PB1輸出PWM信號(hào)占空比減小,電機(jī)速度減小;當(dāng)按下S2時(shí),PB1輸出PWM信號(hào)占空比增加,電機(jī)速度增加。從示波器上可以看到PWM信號(hào)占空比在調(diào)節(jié)時(shí)的變化。
4. 智力競(jìng)賽搶答器
用單片機(jī)AT89C51做一個(gè)搶答器,供8組搶答,當(dāng)主持人按一下開始鍵后即可開始搶答,當(dāng)某一組按下?lián)尨疰I后,其它各組的按鍵被鎖定,主機(jī)上的數(shù)碼管顯示相應(yīng)的組號(hào),同時(shí)該組桌上的發(fā)光二極管也點(diǎn)亮,并發(fā)出1秒鐘的報(bào)警聲,數(shù)碼管和發(fā)光二極管的顯示時(shí)間為5秒鐘。
在Keil uVision編譯器中輸入下列程序:
#include
unsigned char n,i;
unsigned long int m,t;
sbit S1=P0^0;
sbit S2=P0^1;
sbit S3=P0^2;
sbit S4=P0^3;
sbit S5=P0^4;
sbit S6=P0^5;
sbit S7=P0^6;
sbit S8=P0^7;
sbit VD1=P1^0;
sbit VD2=P1^1;
sbit VD3=P1^2;
sbit VD4=P1^3;
sbit VD5=P1^4;
sbit VD6=P1^5;
sbit VD7=P1^6;
sbit VD8=P1^7;
sbit SOUND=P3^0;
sbit START=P3^1;
void delay(t) //延時(shí)子程序
{
for(;t>0;t--)
{ for(i=0;i<250;i++); }
}
void main() //主程序
{
while(1) //無(wú)限循環(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點(diǎn)亮,數(shù)碼管顯示1
else if(S2==0) //若S2按下
{VD2=0;P2=0x24;n=1;} //發(fā)光二極管VD2點(diǎn)亮,數(shù)碼管顯示2
else if(S3==0) //若S3按下
{VD3=0;P2=0x30;n=1;} //發(fā)光二極管VD3點(diǎn)亮,數(shù)碼管顯示3
else if(S4==0) //若S4按下
{VD4=0;P2=0x19;n=1;} //發(fā)光二極管VD4點(diǎn)亮,數(shù)碼管顯示4
else if(S5==0) //若S5按下
{VD5=0;P2=0x12;n=1;} //發(fā)光二極管VD5點(diǎn)亮,數(shù)碼管顯示5
else if(S6==0) //若S6按下
{VD6=0;P2=0x02;n=1;} //發(fā)光二極管VD6點(diǎn)亮,數(shù)碼管顯示6
else if(S7==0) //若S7按下
{VD7=0;P2=0x78;n=1;} //發(fā)光二極管VD7點(diǎn)亮,數(shù)碼管顯示7
else if(S8==0) //若S8按下
{VD8=0;P2=0x00;n=1;} //發(fā)光二極管VD8點(diǎn)亮,數(shù)碼管顯示8
}
for(m=0;m<1000;m++) //發(fā)出1秒報(bào)警聲
{
SOUND=!SOUND;
delay(1);
}
delay(5000); //發(fā)光二極管、數(shù)碼管繼續(xù)點(diǎn)亮5秒
P1=0xff;
P2=0xff;
}
}
}
將上述源程序編譯生成目標(biāo)文件vie_answer.hex。
電路中所使用的元件見表5。
表5

名稱元件種類(Category)子種類(Sub-category)
單片機(jī)AT89C51Microprocessor ICs8051 Family
電阻器RESResistorsGeneric
三極管2N2905TransistorsBipolar
共陽(yáng)數(shù)碼管7SEG-COM-ANODEOptoelectronics7-Segment Displays
揚(yáng)聲器SPEAKERSpeakers & Sounders

繪制好仿真電路圖,設(shè)置好有關(guān)元件的屬性,仿真后先按一下開始按鈕S9,再按一下S1~S8中的任一個(gè)按鈕比如S6,仿真結(jié)果見圖14。





上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: PROTEUS單片機(jī)仿

評(píng)論


技術(shù)專區(qū)

關(guān)閉