新闻中心

EEPW首页>嵌入式系统>设计应用> 由Proteus仿真入门单片机学习

由Proteus仿真入门单片机学习

作者: 时间:2011-12-03 来源:网络 收藏

图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; //允许中断发生
}

51单片机相关文章:51单片机教程


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理




关键词:Proteus仿真入门

评论


相关推荐

技术专区

关闭