基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx

上传人:b****3 文档编号:7119243 上传时间:2023-05-07 格式:DOCX 页数:16 大小:232.15KB
下载 相关 举报
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第1页
第1页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第2页
第2页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第3页
第3页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第4页
第4页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第5页
第5页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第6页
第6页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第7页
第7页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第8页
第8页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第9页
第9页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第10页
第10页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第11页
第11页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第12页
第12页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第13页
第13页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第14页
第14页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第15页
第15页 / 共16页
基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx

《基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx》由会员分享,可在线阅读,更多相关《基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx(16页珍藏版)》请在冰点文库上搜索。

基于AT89C52单片机的数字式简易低频信号发生器Word下载.docx

对于本设计的电容C用30pF,晶振选用12MHZ。

晶振电路解法图3-2,一条引脚接在XTAL1,另一条接在XTAL2。

电路图如图3-1-1所示:

图3-1-1

3.2单片机复位电路

复位是单片机的初始化工作,复位后中央处理器CPU和单片机内的其它功能部件都处在一定的初始状态,并从这个状态开始工作。

为了防止程序执行过程中失步或运行紊乱,此处我们采用了上电复位及手动复位电路,电路图如图3-1-2所示:

图3-1-2

3.3完整电路

参照附录三

四、软件设计

单片机内部数据只有0、1之分,所产生的信号也都是离散信号。

为了能够让单片机输出所需的数字信号,我们采用对信号采样、量化的方法来实现由单片机产生所需信号。

在设计中,对正弦信号进行采样,通过查表来实现输出不同的幅度值。

采样点越密,信号失真度也就越小。

对于三角波,就是实现2次循环,通过由最小值到最大值和由最大值到最小值的循环来实现三角波的输出。

方波的输出时间间隔由键盘输入,然后由软件通过定时、计数器来控制。

因此,通过控制不同的计数初值就可以控制整个方波信号的频率,其计数初值=65536-输入值。

对于其他波形,程序根据输入频率值计算出波形的输出时间参数,即波形中每2点的时间间隔C。

程序设定寄存器T0作定时器,T1作计数器。

当计算出C≤65536时,CPU只使用T0。

当C>

65536时,CPU将T0和T1串联起来使用。

T0/T1被调用后开始计数,总定时时间到,输出一个点,反复循环,从而在一个周期内输出完整波形。

设计中软件分为初始化模块、显示模块、键盘扫描模块、键值处理模块和波形产生模块。

4.1初始化子函数

初始化子函数的主要工作是设置定时器的工作模式、初值预置、开中断和打开定时器等。

在这里,定时器T1工作于16位定时模式,单片机按定时时间重复的把波形送到DAC0832的寄存器。

其程序流程图如下图4-2所示:

4.2键扫描子函数

键扫描子函数的任务是检查3个键是否有键按下,若有键按下,则执行相应的功能。

这里3个键分别用于频率增加、频率减小和正弦波,锯齿波和方波的选择功能。

其程序流程图如图4-3所示:

程图

4.3波形数据产生子函数

波形数据产生函数是定时器T1的中断程序。

当定时器溢出时,发生一次中断。

当发生中断时,单片机按次序将波形数据表中的波形数据一一送到DAC8032,DAC8032根据输入的数据大小输出对应电压。

波形数据产生子函数流程图如图4-4所示:

图4-4

4.4主函数

主函数的任务是进行上电初始化,并在程序运行中不断查询按键情况执行相应的功能。

程序设计见附录五

五、系统测试及结果

硬件电路的调试比较简单,只要元器件安装无误,一般都能一次成功。

软件调试主要是各子程序的调试,对于频数的增减按键,由于计数器为16位定时器,最大值为65535,在加减时用255作为减数,这样频率的调整变化较快些,但是在接近最高频率变化太快;

如果加减时用一作加减数,那么在频率的高端变化平稳,而在频率的低端则变化太慢。

调试时可根据应用特点选择加减数的大小。

简易低频信号源输出频率指标实际测试如下:

(1)当按下K3键一下时,波形为正弦波。

波形图如图5-1所示:

图5-1正弦波波形图

(2)当按下K3键两下时,播行为三角波。

仿真图如图5-2所示:

图5-2三角波波形图

(3)由P2.0口直接可输出方波。

仿真图如图5-3所示:

K1键是频率增加键,K2键是频率减小键

本次设计的信号发生器正弦波的频率范围在0.01HZ~83HZ,方波的输出频率范围在1.3~10.6KHZ。

在对系统进行波形仿真时可以在虚拟示波器上观察到锯齿波、三角波、正弦波和方波的波形。

其中锯齿波、三角波以及正弦波的输出误差较大,方波波形较为理想。

这一方面与电路设置的参数有关,另一方面也与使用的仿真软件有关。

对于上述问题的解决办法是:

改变仿真电路的参数或着换用版本较高的仿真软件。

当然一般产生这种情况的原因多由于电路的参数设计不合理所制。

但从仿真波形上可以看出输出波形的频率大致与程序中的设置吻合。

波形的幅度与程序设置的最大值有关,而频率受机器周期的控制。

当仿真时,由于存在一定的系统误差,波形效果不是很好。

简易低频信号源输出的频率不是很高,在设计时每周期波形用255个采样点合成,波形不是很光滑。

如果增加采样点,则输出的频率会更低,所以在设计时应根据应用特点选择合理的采样点数。

用单片机产生低频信号的最大优点是可以输出产生复杂的不规则波形,这是一般通用信号源无法做到的。

六、实习体会

通过这次实验,熟悉了基于AT89C52单片机的数字式简易低频信号发生器,利用数模转换器DAC832来实现波形又通过按键来改变波形的频率以及波形的转换。

在这次设计中,遇到很多的问题,包括硬件的设计以及软件的设计。

硬件方面,就电路而言,根据硬件的设计,该电路简单方便,实现波形并不是很困难,但是,在焊接电路过程中,由于粗心大意,第一次去测试的时候,没有任何反应,经过自己和同学的检查,最终发现是由于晶振没有焊接(由于晶振是次电路的灵魂,它提供了电路的出事震荡),所以一开始没有任何反应。

第二次去测试的时候发现只有按住开关才能有波形(K1,K2,K3任何一个都行),后来经过检查发现单片机的接地线20脚没有接地,经过这次的接地,终于成功了,输出了完整而稳定的波形

在软件设计中,要熟悉整个电路的工作原理以及就具体芯片管脚的程序代码,运行过程中,调整好电路板,接好每一根导线,进行调试。

若程序与电路工作原理一致,将会出现预期效果。

调节K1是增加波形信号的频率,K2是减少波形信号的频率,K3是三角波以及正弦波的转换键。

总而言之,在这次实习中,收获颇多,不仅练习了焊接的工艺,而且也熟悉了电路的流程,以及单片机程序设计和单片机AT89C51的工作原理。

参考文献

[1]牛昱光,等.单片机原理及接口技术.北京:

电子工业出版社,2008.

[2]李光飞,等.单片机C程序设计实例指导.北京:

北京航空航天出版社,2005.

[3]黄仁欣,等.单片机原理及应用技术.北京:

清华大学出版社,2005.

[4]张毅刚,等.MCS-51单片机应用设计.哈尔滨:

哈尔滨工业大学出版社,2002.

附录一:

元器件清单

元器件名称及规格

标注

AT89C52

U1

DAC0832

U2

电阻10K

R1

上拉电阻

RP1

晶体振荡器12M

X1

瓷片电容30Pf

C1,C2

电解质电容10uF

C3

按键开关

K1,K2,K3

直流电源5V

VCC

数字示波器

附录二:

芯片管脚图:

1、AT89C52

2、DAC0832

附录三:

电路原理图

附录五:

设计程序

#include"

reg51.h"

#defineucharunsignedchar

#defineuintunsignedint

#definekeyP1

#definedataoutP0

/**********正弦波数据表*************/

ucharcodesin_tab[256]=

{0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92,

0x94,0x97,0x99,0x9B,0x9E,0xA0,0xA3,0xA5,

0xA7,0xAA,0xAC,0xAE,0xB1,0xB3,0xB5,0xB7,

0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7,

0xC9,0xCB,0xCC,0xCE,0xD0,0xD1,0xD3,0xD4,

0xD6,0xD7,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,

0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4,

0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7,

0xE7,0xE7,0xE7,0xE7,0xE6,0xE6,0xE5,0xE5,

0xE4,0xE4,0xE3,0xE3,0xE2,0xE1,0xE0,0xDF,

0xDE,0xDD,0xDC,0xDB,0xDA,0xD8,0xD7,0xD6,

0xD4,0xD3,0xD1,0xD0,0xCE,0xCC,0xCB,0xC9,

0xC7,0xC5,0xC3,0xC1,0xBF,0xBD,0xBB,0xB9,

0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7,

0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94,

0x92,0x8F,0x8D,0x8A,0x88,0x85,0x83,0x80,

0x7D,0x7B,0x78,0x76,0x73,0x71,0x6E,0x6C,

0x69,0x67,0x65,0x62,0x60,0x5D,0x5B,0x59,

0x56,0x54,0x52,0x4F,0x4D,0x4B,0x49,0x47,

0x45,0x43,0x41,0x3F,0x3D,0x3B,0x39,0x37,

0x35,0x34,0x32,0x30,0x2F,0X2D,0x2C,0X2A,

0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,

0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B,

0x1B,0x1A,0x1A,0x1A,0x19,0x19,0x19,0x19,

0x19,0x19,0x19,0x19,0x1A,0x1A,0x1A,0x1B,

0x1B,0x1C,0x1C,0x1D,0x1D,0x1E,0x1F,0x20,

0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,

0X2A,0x2C,0X2D,0x2F,0x30,0x32,0x34,0x35,

0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45,

0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56,

0x59,0x5B,0x5D,0x60,0x62,0x65,0x67,0x69,

0x6C,0x6E,0x71,0x73,0x76,0x78,0x7B,0x7D};

/*************三角波数据表*************************/

ucharcodethr_tab[256]=

{

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,

0x89,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,

0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,

0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,

0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,

0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,

0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,

0xBF,0xBE,0xBD,0xBC,0xBB,0xBA,0xB9,0xB8,

0xB7,0xB6,0xB5,0xB4,0xB3,0xB2,0xB1,0xB0,

0xAF,0xAE,0xAD,0xAC,0xAB,0xAA,0xA9,0xA8,

0xA7,0xA6,0xA5,0xA4,0xA3,0xA2,0xA1,0xA0,

0x9F,0x9E,0x9D,0x9C,0x9B,0x9A,0x99,0x98,

0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,

0x8F,0x8E,0x8D,0x8C,0x8B,0x8A,0x89,0x89,

0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,

0x7F,0x7E,0x7D,0x7C,0x7B,0x7A,0x79,0x78,

0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,

0x6F,0x6E,0x6D,0x6C,0x6B,0x6A,0x69,0x68,

0x66,0x66,0x65,0x64,0x63,0x62,0x61,0x60,

0x5F,0x5E,0x5D,0x5C,0x5B,0x5A,0x59,0x58,

0x55,0x55,0x55,0x54,0x53,0x52,0x51,0x50,

0x4F,0x4E,0x4D,0x4C,0x4B,0x4A,0x49,0x48,

0x44,0x44,0x45,0x44,0x43,0x42,0x41,0x40,

0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,

0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,

0x50,0x51,0x52,0x53,0x55,0x55,0x56,0x57,

0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,

0x60,0x61,0x62,0x63,0x66,0x65,0x66,0x67,

0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,

0x70,0x71,0x72,0x73,0x77,0x75,0x76,0x77,

0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F

};

/******************************************/

uintdataTHHL=65535;

uchardatakeyword,n=0;

bdatasinthr;

sbitsin_thr=sinthr^0;

sbitww=P2^0;

/**************键扫描子函数**************************/

keyscan()

keyword=key&

0x07;

if(keyword!

=0x07)

while((key&

0x07)!

=0x07);

switch(keyword)

case6:

{if(THHL>

=65235)THHL=65535;

else{THHL=THHL+255;

}break;

}

case5:

{if(THHL<

=500)THHL=0;

else{THHL=THHL-255;

case3:

{sin_thr=~sin_thr;

break;

default:

{break;

/**********初始化函数**************************/

voidclearmen()

key=0xff,dataout=0x00;

THHL=65535;

TH1=THHL/256;

TL1=THHL&

256;

TMOD=0x11;

ET1=1;

TR1=1;

EA=1;

/***********主函数*************************/

main()

clearmen();

while

(1)

keyscan();

/************T1中断函数*************************/

voidtime_intt1(void)interrupt3

EA=0;

TR1=0;

TL1=THHL%256;

if(sin_thr){dataout=sin_tab[n];

else{dataout=thr_tab[n];

if(n>

=255){n=0;

}else{n++;

ww=~ww;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2