用PROTEUS对单片机进行仿真的方法与实例

6.连线

在仿真时单片机的晶振电路和复位电路可以省略不画,时钟频率可以在AT89C51的属性中设置,默认值为12MHz。
对于设计好的文件可以保存以便下次调用。
电感测试仪以电感加上电压后电流增加的规律作为测量依据,因为电感加上电压后电流增加的速度与电感量相关,通过测量电流达到某一预定值所花的时间就能测量出电感的电感量。单片机使用AT89C2051,测量电路如图8所示,A为

AT89C2051内部构造的电压比较器,利用电压比较器测量电感中电流的变化,合上开关后电源电压E+ 加在电感LX和电阻R的串联回路上,这时回路中电流IL由零开始逐渐增加,在电阻R两端电压从0升到0.632E+的过程中,P3.6口输出为0,当电阻R两端电压一旦超过0.632E+后,P3.6口输出电平即变为1。以P3.6口的输出状态为依据,用AT89C2051内部的定时器T0对时间进行计数,再将计数结果显示出来即得出测量结果。量程可分为多档,采用两位半数码管显示,单位为mH。我们只要仿真其中的一档即可,这里取×10档进行仿真,即读数乘以10为实际电感量。
电感测试仪的源程序如下:
#include
unsigned char j,m,n,t,DispBuf[3];
unsigned int L;
unsigned char code
BitTab[3]={0xdf,0xef,0xf7};//位驱动码
unsigned char code
DispTab[11]={0x41,0xcf,0x52,0x46,0xcc,0x64,0x60,0x4f,0x40,0x44,0xff};//字形码
sbit P1_2=P1^2;
sbit P3_6=P3^6;
void Delay1ms(unsigned int count) //延时程序
{
}
void main()
{
}
用Keil uVision将上述程序编译生成目标文件DGZS.hex。
电路中所使用的元件见表2。
表2
名称 | 元件 | 种类(Category) | 子种类(Sub-category) |
单片机 | AT89C2051 | Microprocessor ICs | 8051 Family |
电阻器 | RES | Resistors | Generic |
可变电阻器 | POT-LIN | Resistors | Variable |
三极管 | 2N2905 | Transistors | Bipolar |
电感器 | IND-AIR | Inductors | Generic |
4位共阴数码管 | 7SEG-MPX4-CA | Optoelectronics | 7-Segment Displays |
绘制好的仿真电路图如图9。图中添加示波器时,先左键选择模型选择工具

栏中的 图标,再选择OSCILLOSCOPE,并在原理图编辑窗口中左击,这样示波器就被放置到原理图中了。
由于AT89C2051的P1.0和P1.1是复用端口,除了作I/O口外,还有一个功能是作为电压比较器的输入端,P1.0为同相输入端,P1.1为反相输入端,这里作电压比较器的输入端使用,因此在设置AT89C2051的属性时要将其设置电压比较器的输入端,即Ehable Comparator选择Yes,如图10。

被测电感器的电感量定为1H。单击开始仿真,可变电阻RP1是用来校准测量值的,按动RP1的+或-按钮,调节RP1使数码管显示100。仿真结果见图10。电阻R2为换挡电阻,改变它的值即可改变挡位。
2. 充电器
图11是电路图,图中PIC12F675的7脚作模拟信号输入端AN0使用。单片

机使用内部时钟振荡器,引脚3作充电控制电压输出端GP4使用。S为复位开关,复位开关主要在重新放上电池后使用。
评论