新闻中心

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单片机仿

评论


技术专区

关闭