微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于单片机的模拟开关时序设计与仿真

基于单片机的模拟开关时序设计与仿真

时间:05-16 来源:电子技术应用 点击:

4 开关时序的设计与仿真

开关时序设计原理图如图4所示,图中采用80C51芯片,其中管脚XTAL1、XTAL2接时钟控制器,RST端上电,5个输出管脚P1.0~P1.4分别控制开关S1、S2、S3、S4和S5,电源VCC为+5 V的直流电源。


4.1 程序设计

在Keil平台进行如图5所示的程序编译。

程序代码如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P1^0; //控制开关1
sbit s2=P1^1; //控制开关2
sbit s3=P1^2; //控制开关3
sbit s4=P1^3; //控制开关4
sbit s5=P1^4; //控制开关5
bit flag,flag1,flag2,flag3;
uchar ds,ds1,ds2,ds3;
uint jishi;
void Initialization() //初始化函数
{
EA=1;
ET0=1;
TMOD=0X02; //定时器工作方式为2
TH0=0x06; //定时250 ?滋s
TL0=0x06;
TR0=1;
s1=0;
s2=1;
s3=1;
s4=1;
s5=1;
flag1=1;flag2=0;flag3=0;
}
void inte() interrupt 1 using 3 //1s中断处理函数
{
if(++jishi==40) //时间间隔4000×250 ?滋s=1 s
{
jishi=0;
if(flag1){ds1++;}
if(flag2){ds2++;}
if(flag3){ds3++;}
}
}
void main ()
{
Initialization();
while(1)
{
if(flag1)
{
if(ds1==4){s3=0;}
if(ds1==11){s5=0;}
if(ds1==12){s2=0;}
if(ds1==13){s1=1;}
if(ds1==20){s4=0;flag1=0;flag2=1;}
}
if(flag2)
{
if(ds2==1){s3=1;}
if(ds2==2){s5=1;}
if(ds2==9){s2=1;}
if(ds2==10){s1=0;}
if(ds2==17){s4=1;flag2=0;flag3=1;ds2=0;}
}
if(flag3)
{
if(ds3==7){s3=0;}
if(ds3==14){s5=0;}
if(ds3==15){s2=0;}
if(ds3==16){s1=1;}
if(ds3==23){s4=0;flag2=1;flag3=0;ds3=0;}
}
}
}

4.2 仿真

编写好程序代码后将该程序文件加载到当前项目中进行编译,编译通过后进行仿真。单击Debug菜单下的Go菜单项连续运行程序,再切换至Proteus界面,可看到电路开始仿真运行,结果如图6所示,实现了预期功能。

通过对仿真结果和LED实时动作情况的分析,验证了整个系统的程序与外围电路设计的正确性,提高了调试效率。采用该仿真设计方法可以大大简化硬件电路测试和系统调试过程,而且使用该方法进行系统虚拟开发成功后再进行实际制作,可以提高开发效率,降低开发成本,提升开发速度。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top