新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用PROTEUS對單片機進行仿真的方法與實例

        用PROTEUS對單片機進行仿真的方法與實例

        作者: 時間:2016-11-25 來源:網絡 收藏

        接上電源后,PIC12F675的GP4輸出低電平,三極管VT1飽和導通,兩節電池開始充電。隨著電池電壓的上升,輸入到單片機的模擬電壓也不斷升高,當電壓大于預定的設定值3V時,GP4輸出高電平使VT1截止,電池停止充電,并自鎖在這一工作狀態,即使電池在停止充電后電壓略有下降也不會重新進行充電。
        在PIC單片機的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
        然后編譯生成目標文件charger.hex。
        對充電器仿真時有一個難點,就是Proteus元件庫中沒有可仿真的充電電池,它的電池元件加上充電電流后電壓不會上升,為此可在電池上串一只可變電阻,這樣改變可變電阻的大小就可以就可以改變充電回路兩端的電壓,用來模擬電池電壓的變化。
        電路中所使用的元件見表3。



        表3

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

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






        RP1的滑動觸點向上調節,電壓表的讀數會逐漸上上升,當讀數大于3V時,會停止充電,發光二極管VD1熄滅,電壓表的讀數恢復為2.5V,這時即使我們把RP1 滑動觸點調到中點以下也不會重新充電,只有按一下復位鍵S1才會重新充電。
        3. 電機調速控制器
        直流電機的調速主要調整其工作電流,通常有兩種方式:一種是在電機供電電路中串接一個可變電阻,通過改變可變電阻的阻值調節工作電流,從而調節轉速;另一種方法是在直流電機上加直流脈沖電壓,通過改變脈沖直流電的占空比來調節轉速。前一種方法因為可變電阻上有壓降要損耗功率,所以效率不高,只有用小功率直流電機時使用,后一種工作效率高,如目前的電動自行車都采用這種調速方式。
        下面用AVR單片機ATmega8設計一個電機調速控制器,使其定時/計數器T/C1工作在PWM模式,作為PWM脈寬調制器。
        在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; //設置PWM參數
        DelayMs(100);
        }

        #pragma interrupt_handler INT_1:3
        void INT_1(void)
        {
        if(k!=5)
        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.hex。
        電路中所使用的元件見表4。
        表4

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

        繪制好仿真電路圖,仿真結果見圖13。




        當按下S1時,PB1輸出PWM信號占空比減小,電機速度減小;當按下S2時,PB1輸出PWM信號占空比增加,電機速度增加。從示波器上可以看到PWM信號占空比在調節時的變化。
        4. 智力競賽搶答器
        用單片機AT89C51做一個搶答器,供8組搶答,當主持人按一下開始鍵后即可開始搶答,當某一組按下搶答鍵后,其它各組的按鍵被鎖定,主機上的數碼管顯示相應的組號,同時該組桌上的發光二極管也點亮,并發出1秒鐘的報警聲,數碼管和發光二極管的顯示時間為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) //延時子程序
        {
        for(;t>0;t--)
        { for(i=0;i<250;i++); }
        }
        void main() //主程序
        {
        while(1) //無限循環
        {
        if(START==0)//若開始鍵按下
        {
        n=0;
        while(n==0)//若n=0,循環執行
        {
        if(S1==0)//若S1按下
        {VD1=0;P2=0x79;n=1;} //發光二極管VD1點亮,數碼管顯示1
        else if(S2==0) //若S2按下
        {VD2=0;P2=0x24;n=1;} //發光二極管VD2點亮,數碼管顯示2
        else if(S3==0) //若S3按下
        {VD3=0;P2=0x30;n=1;} //發光二極管VD3點亮,數碼管顯示3
        else if(S4==0) //若S4按下
        {VD4=0;P2=0x19;n=1;} //發光二極管VD4點亮,數碼管顯示4
        else if(S5==0) //若S5按下
        {VD5=0;P2=0x12;n=1;} //發光二極管VD5點亮,數碼管顯示5
        else if(S6==0) //若S6按下
        {VD6=0;P2=0x02;n=1;} //發光二極管VD6點亮,數碼管顯示6
        else if(S7==0) //若S7按下
        {VD7=0;P2=0x78;n=1;} //發光二極管VD7點亮,數碼管顯示7
        else if(S8==0) //若S8按下
        {VD8=0;P2=0x00;n=1;} //發光二極管VD8點亮,數碼管顯示8
        }
        for(m=0;m<1000;m++) //發出1秒報警聲
        {
        SOUND=!SOUND;
        delay(1);
        }
        delay(5000); //發光二極管、數碼管繼續點亮5秒
        P1=0xff;
        P2=0xff;
        }
        }
        }
        將上述源程序編譯生成目標文件vie_answer.hex。
        電路中所使用的元件見表5。
        表5

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

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





        上一頁 1 2 3 下一頁

        關鍵詞: PROTEUS單片機仿

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 涟源市| 黔东| 改则县| 抚松县| 莲花县| 锦屏县| 南丹县| 竹山县| 绿春县| 上栗县| 广水市| 绥江县| 呈贡县| 五寨县| 淮安市| 句容市| 抚州市| 舒城县| 铜陵市| 社旗县| 永丰县| 宁河县| 普兰县| 甘孜县| 青田县| 新晃| 夹江县| 荔浦县| 安远县| 望谟县| 蛟河市| 永昌县| 江永县| 边坝县| 徐州市| 津市市| 商南县| 台中县| 新宾| 普陀区| 广丰县|