<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏

          接上電源后,PIC12F675的GP4輸出低電平,三極管VT1飽和導通,兩節(jié)電池開始充電。隨著電池電壓的上升,輸入到單片機的模擬電壓也不斷升高,當電壓大于預定的設定值3V時,GP4輸出高電平使VT1截止,電池停止充電,并自鎖在這一工作狀態(tài),即使電池在停止充電后電壓略有下降也不會重新進行充電。
          在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
          發(fā)光二極管LED-REDOptoelectronicsLEDs
          單節(jié)電池CELLMiscellaneous

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






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

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

          void main(void)
          {
          DDRD=0X00;
          PORTD=0xff; //設置PD口為帶上拉電阻的輸入口
          DDRB=0xff; //設置PB口為推挽1輸出
          PORTB=0xff;
          SREG=0x80; //開全局中斷
          GICR=0xc0; //開外部中斷
          TCCR1A=0xc1; //8位PWM,向上計數(shù)置位OC1A,向下計數(shù)清零OC1A
          TCCR1B=0x01; //時鐘1分頻,PWM信號頻率為1M/512=2KHz
          k=125;
          OCR1A=k; //設置PWM參數(shù)
          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信號占空比在調(diào)節(jié)時的變化。
          4. 智力競賽搶答器
          用單片機AT89C51做一個搶答器,供8組搶答,當主持人按一下開始鍵后即可開始搶答,當某一組按下?lián)尨疰I后,其它各組的按鍵被鎖定,主機上的數(shù)碼管顯示相應的組號,同時該組桌上的發(fā)光二極管也點亮,并發(fā)出1秒鐘的報警聲,數(shù)碼管和發(fā)光二極管的顯示時間為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) //無限循環(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點亮,數(shù)碼管顯示1
          else if(S2==0) //若S2按下
          {VD2=0;P2=0x24;n=1;} //發(fā)光二極管VD2點亮,數(shù)碼管顯示2
          else if(S3==0) //若S3按下
          {VD3=0;P2=0x30;n=1;} //發(fā)光二極管VD3點亮,數(shù)碼管顯示3
          else if(S4==0) //若S4按下
          {VD4=0;P2=0x19;n=1;} //發(fā)光二極管VD4點亮,數(shù)碼管顯示4
          else if(S5==0) //若S5按下
          {VD5=0;P2=0x12;n=1;} //發(fā)光二極管VD5點亮,數(shù)碼管顯示5
          else if(S6==0) //若S6按下
          {VD6=0;P2=0x02;n=1;} //發(fā)光二極管VD6點亮,數(shù)碼管顯示6
          else if(S7==0) //若S7按下
          {VD7=0;P2=0x78;n=1;} //發(fā)光二極管VD7點亮,數(shù)碼管顯示7
          else if(S8==0) //若S8按下
          {VD8=0;P2=0x00;n=1;} //發(fā)光二極管VD8點亮,數(shù)碼管顯示8
          }
          for(m=0;m<1000;m++) //發(fā)出1秒報警聲
          {
          SOUND=!SOUND;
          delay(1);
          }
          delay(5000); //發(fā)光二極管、數(shù)碼管繼續(xù)點亮5秒
          P1=0xff;
          P2=0xff;
          }
          }
          }
          將上述源程序編譯生成目標文件vie_answer.hex。
          電路中所使用的元件見表5。
          表5

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

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





          上一頁 1 2 3 下一頁

          關鍵詞: PROTEUS單片機仿

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();