由Proteus仿真入门单片机学习

发布者:vettykatty最新更新时间:2011-12-03 关键字:Proteus  仿真入门 手机看文章 扫描二维码
随时随地手机看文章

1 引言

对于单片机的学习,由于其比较抽象,特别是在编写程序时,完全只是凭借程序员周密的逻辑思维来进行程序设计,为了让程序设计员更好的理解和调试其所设计的程序,所有单片机生产厂家都针对他们的单片机系列设计生产了相应的仿真器。然而这些仿真器的价格却不菲,无凝这是初次学习单片机时重要考虑的因素。而目前随着我国电子技术的飞速发展,我们所有生活上所用到、见到的电子产品都离不开单片机的身影,这也愈加激起我们对单片机的学习热情。然而在具体学习这门技术时,特别是高校教学时,因为实验设备不够和教学课时少等原因,往往都是采用纯理论性的或集体性的实验。而通过这种学习之后,以我个人在校学习时的经历和对一些高校学生的了解,大部分学习者最终都是知识考试过了关,却什么都不会。针对这一现象,在此本文提倡运用仿真的方法结合具体的设计来学习单片机知识。

目前国外很多软件设计公司都针对单片机的学习而设计了许多仿真软件,这使得单片机学习者只需要一台个人电脑就可以完成单片机程序的设计和调试,大大降低了我们的学习成本,方便了我们的学习。其中,Proteus[1]是由英国Labcenter 公司开发的具有硬件电路分析、实物仿真软件和程序仿真功能的仿真软件。通过软件安装在个人电脑后,可以实现了单片机和SPICE 电路相结合的仿真。在此运用该仿真软件,设计以AT89C2051[2]的P1 口输出正弦波为目的的硬件电路和相应程序,通过这一具体的项目设计,把理论与实践结合起来,以期引导入门单片机学习。

2设计Proteus里的仿真电路

为了对单片机内部程序运行时有感性上的理解,在此利用Proteus7 Professional 下的ISIS7 Professional 仿真电路设计软件设计了如下图1 所示的电路,该电路所预达到的功能是通过单片机AM89C2051 的P10-P17 口输出准正弦波并通过虚拟示波器显示出来,为了避免可能由电路元器件引起后面的调试工作,电路所有采用的元器件都采用软件自带的标准库里的元器件。

newmaker.com
 
图1 Proteus 中基于AT89C2051 单片机的准正弦波电路[page]

图1 所示电路的核心部件是信号处理器U1,双击它时可对它进行相应的设定,完成相应的设定后其功能就完全可以用来履行已烧入程序代码的CPU 的功能;时钟电路有晶体振荡器Y1 和瓷片电容C7、C8 组成;信号由U1 的P10-P17 这8 个输出口输出,信号再经过上来电阻RP1、R1-R8 分压输出和通过电压跟随器电路转化成近似于正弦波信号。

电阻R1 至R8 满足如下方程:

newmaker.com

newmaker.com


于是得出S0-S8 分别约为:0、0.0381、0.1464、0.3087、0.5、0.6913、0.8536、0.7619和1。S(n)值确定后,作出S(n)的值在EXCEL 里折线图如图2 所示,从图表中可以看出其形状类似于正弦信号在-90°到+90°象限内的波形。再依据以上结果,由式(3)可计算出R1-R8 的阻值关系,并按照常用电阻阻值规则,可取定如图1 电路图所示电阻阻值。

newmaker.com
 
图2 S(n)的在Excel 里的折线图

3 设计相应程序

参照前面所设计电路,利用时间中断程序来产生频率为1KHz 的正弦波,所设计程序源代码及相关注释如下:

3.1定义P1端口的输出值

首先定义P1 端口的输出,P1 端口将按照数组P1_out[ ]给出的值不停的输出,也类似于P1 端口的P10 置“1”其他端口置“0”后不停的左移和右移。之所以该数组的大小为16是因为将输出正弦波周期在时域上分成16 等分。

code char P1_out[16]=
{0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x06,0x10,0x20,0x40,0x80};

3.2初始化时钟中断0和1

在此程序中主要是初始化有关时钟中断寄存器。

void int_init(void)
{ EA=0;//关闭所有中断,以保证在调用此子程序时中断不会发生
TMOD=0x11; //#00000001B ;定义时钟中断0 为16 位时钟发生器
TCON=0x50; //#00010000B ; 使能时钟中断0
IE=0x0a; //#00000010B ; 运行时钟中断0
IP=0x02; //#00000010B ; 时钟中断0 优先
TL0= (65535-1000/16);
TH0= ((65535-1000/16)>>8); /*初始化时钟中断0 的计数寄存器,系统时钟12MHz, 所以中断计数时间为1us,中断发生时间为1000/16X1us=1/16ms, 频率为16KHz,除以16 是因为一个周期被分成16 等分*/

EA=1; //允许中断发生
}

[page]

3.3主程序

#include
#include
#include
void main(void)
{
static short P1_out_cnt=0; //定义对P1 口输出时计数
int_init(); //调用中断初始化子程序
while(1) //下面为一个无限循环
{
_nop_();
}
}

3.4时钟中断子程序

void timer_0 (void) interrupt 1 using 1
{ TL0= (65535-1000/16);
TH0= ((65535-1000/16)>>8); //重置时钟中断0 的时间计数寄存器值
P1=P1_out[P1_out_cnt]; //P1 口按数组给定值输出
P1_out_cnt++; //指向数组中下一个值
P1_out_cnt&=0x0f; //00001111B,保证0≤P1_out_cnt≤15
}

4 仿真与实验

在以上工作完成之后,通过仿真软件Proteus7 professional 下面的ISIS7 Professional 菜单窗口里对一些参数进行设定,为了简单完成仿真,在此只对必要的参数进行设定:首先对Design/Configure Power Rail 下的电源Vcc=5V 和GND=0 进行设定,其次是对Source/add or remove source code file 下的源程序代码名和Code generation tool=ASEM51 进行设定,在次是对双击单片机U1 弹出的菜单进行Clock Frequency 和Program file 目标代码(有源代码编译后产生的HEX 后缀名文件)的设定。最后点击Debug/Execute 便开始仿真运行,在运行过程中可以看到电脑屏上电路图中U1 输出口的输出状态,虚拟示波器上显示如图3 所示的波形。

为了对所仿真的结果做进一步的认证,在此设计了实际的电路来与之加以比较,如图4所示是按照图1 电路图设计了实际电路板之后,用示波器对其输出进行测试所得实际波形,实验表明仿真的结果与实际的测试结果相一致。

newmaker.com


图3 仿真输出波形

newmaker.com


图4 实际输出波形

5 结束语

对所设计的C 语言程序结合硬件电路的进行了仿真,并通过虚拟示波器显示了所设计程序运行的结果,并比较了仿真与实际电路运行输出结果,表明了通过Proteus 仿真软件可以达到与通过实际电路来学习单片机的效果。

完整的设计了一个项目的硬件电路和C 程序,通过真实具体的正弦波发生电路及其程序的设计来达到学习单片机引路作用,增强了学习者对单片机工作原理和应用设计的理解,为单片机初学者提供了一种切实可行的方法。
 newmaker.com
附图实际测试电路板
注:实际电路板上包涵了文中图1 的电路

 

关键字:Proteus  仿真入门 引用地址:由Proteus仿真入门单片机学习

上一篇:基于51单片机的折页机卡纸检测系统的设计
下一篇:基于51单片机与Lonworks的可视对讲系统设计

推荐阅读最新更新时间:2024-03-16 12:47

嵌入式基于Proteus的ARM虚拟开发
1 引言   现在,人们生活中的每个角落都有嵌入式设备的存在,比如数码相机、移动电话、TV机顶盒及掌上电脑等等。这些嵌入式设备多采用32位RISC嵌入式处理器作为核心部件。 其中基于ARM核的嵌入式处理器独占鳌头,在32位RISC处理器中占据超过75%的市场份额。ARM核嵌入式处理器通常采用C语言编程,目前ARM公司的开发工具ADS、RealView以及Keil与arm核处理器结合较好,得到了广大嵌入式学习者的一致认可。   在传统的嵌入式系统学习中,嵌入式开发平台是必不可少的。其中资源少的开发平台便宜但功能较少,资源多的开发平台又价格不菲,这对广大的嵌入式爱好者无疑是个障碍。然而,有没有在不增加甚至降低开发成本的同时
[单片机]
嵌入式基于<font color='red'>Proteus</font>的ARM虚拟开发
ATMEGA48利用按键控制时钟proteus仿真
ATMEGA48时钟程序源码: #include iom48v.h //共阳数码管键码 const unsigned char disp_table_ca = { 0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90 }; char a_second=0; char b_second=0; int count=0,flag; void delay(unsigned int x) { int i,j; for(i=0;i x;i++) for(j=0;j 1141;j++); } void main() { DDRD=0xff; DDRB=0XFF; PORTC
[单片机]
ATMEGA48利用按键控制时钟<font color='red'>proteus</font><font color='red'>仿真</font>
单片机的Proteus虚拟仿真软件
   引言   单片机体积小、重量轻、具有很强的灵活性而且价格便宜,具有逻辑判断、定时计数等多种功能,广泛应用于仪器仪表、家用电器、医用设备的智能化管理和过程控制等领域。以单片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。   在嵌入式系统的中,开发板成本高,特别是对于大量的初学者而言,还可能由于设计的错误导致开发板损坏。利用Proteus软件工具我们可以很好地解决这个问题,由此我们可以快速地建立一个仿真系统。   Proteus介绍   Proteus是英国Labcenter Electronics公司开发的一款电路仿真软件,软件由两部分组成:一部分是智能原理图输入系统ISIS和虚拟系统模型VSM;另一部分是
[单片机]
单片机的<font color='red'>Proteus</font>虚拟<font color='red'>仿真</font>软件
Proteus仿真H桥+直流伺服电机 附详细文档+源程序
仿真原理图如下 单片机源程序如下: /******************************************************************************* * 文 件 名 : main.c * 函数功能 : LCD 显示控制|中断初始化|主程序 *******************************************************************************/ #include reg52.h #include stdio.h #include lcd.h #include key.h sbit mot
[单片机]
用<font color='red'>Proteus</font><font color='red'>仿真</font>H桥+直流伺服电机 附详细文档+源程序
利用DS18B20测温,并通过LCD1602 显示 proteus仿真 +DS1302时钟模块
main.c #include reg52.h #include onewire.h #include LCD.h #include ds1302.h #define uchar unsigned char #define uint unsigned int uchar code Write_addr ={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//写地址 uchar code Read_addr = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//读地址 uchar Time = {0x50,0x59,0x23,0x07,0x06,0x02,
[单片机]
利用DS18B20测温,并通过LCD1602 显示 <font color='red'>proteus</font><font color='red'>仿真</font> +DS1302时钟模块
基于51单片机的温控电机proteus仿真及源程序
温控电机项目特别提醒: 用Proteus软件进行电路仿真时,TLC549和AT89C51的电源引脚均隐藏了,在制作电路板时一定要给TLC549的Pin8接+5V,Pin4接地;AT89C51的的Pin40接+5V,Pin20接地。 单片机温控电机源程序如下: //产生频率为100Hz的PWM #include reg51.h #define uchar unsigned char #define uint unsigned int sbit TLC549_SCLK=P1^5; //定义P1.5引脚位名称为TLC549_SCLK sbit TLC549_SDO=P1^3; //定义P1.3引脚位名称为TLC549_S
[单片机]
基于51单片机的温控电机<font color='red'>proteus</font><font color='red'>仿真</font>及源程序
基于Proteus的公交车液晶显示报站系统的设计与仿真
1 引 言 公交车对提升城市形象、促进社会经济发展起到积极推动作用。但在我国偏远的西部和经济还不太发达的一些地方,公交车的发展还明显跟不上人们日益增长的物质需求,如2009 年3 月,康定县才成为四川藏区第一个开通公交服务的城市。对于我国二级以下的城市,目前公交车报站的情况大多还存在以下问题: ①没有自动报站,实行人工报站;②有自动报站,却停留在单一的语言报站上;③LED站台数字编号(比如002) 显示;④LED 汉字显示屏,但屏幕显示内容单一。这些在乘客对路线不熟悉或在乘车拥挤的情况下,势必会给乘客带来不便。本文设计了公交车报站系统液晶显示汉字的控制电路,并在Proteus 仿真平台上完成了模拟。 2 Proteus 介
[电源管理]
基于<font color='red'>Proteus</font>的公交车液晶显示报站系统的设计与<font color='red'>仿真</font>
51单片机做的音乐盒,带八段数码管显示程序+Proteus仿真
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit key1=P3^2;//按key1可以暂停播放 sbit key2=P3^3;//按key2可切换歌曲 sbit fm=P3^7;//蜂鸣器连续的IO口 uchar code shuzi0=0x3f; uchar code shuzi1=0x06;//数字1 uchar code shuzi2=0x5b;//数字2 uchar code shuzi3=0x4f; uchar code shuzi4=0x66; uchar code shuzi5=0x6d; uchar code
[单片机]
51单片机做的音乐盒,带八段数码管显示程序+<font color='red'>Proteus</font><font color='red'>仿真</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved