基于AT89C52单片机信号发生器方案设计书.docx

上传人:b****3 文档编号:27481444 上传时间:2023-07-02 格式:DOCX 页数:18 大小:743.68KB
下载 相关 举报
基于AT89C52单片机信号发生器方案设计书.docx_第1页
第1页 / 共18页
基于AT89C52单片机信号发生器方案设计书.docx_第2页
第2页 / 共18页
基于AT89C52单片机信号发生器方案设计书.docx_第3页
第3页 / 共18页
基于AT89C52单片机信号发生器方案设计书.docx_第4页
第4页 / 共18页
基于AT89C52单片机信号发生器方案设计书.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于AT89C52单片机信号发生器方案设计书.docx

《基于AT89C52单片机信号发生器方案设计书.docx》由会员分享,可在线阅读,更多相关《基于AT89C52单片机信号发生器方案设计书.docx(18页珍藏版)》请在冰豆网上搜索。

基于AT89C52单片机信号发生器方案设计书.docx

基于AT89C52单片机信号发生器方案设计书

 

引言

信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。

这次的设计分为五个模块:

单片机控制及显示模块、数模转换模块、波形产生模块、输出显示模块、电源模块。

使用AT98C52作为主控台结合芯片DAC0832产生1HZ-10HZ频率可调的五种信号波(锯齿波、三角波、方波、梯形波、正弦波)。

这几种波形有几个开关控制,可以随意进行切换,十分方便。

另外,波形的频率和振幅也可以通过开关进行更改。

可以说这次的设计操作简单,内容丰富,而且电路快捷明了。

1设计任务

1.1设计内容

以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、梯形波等),且频率、幅度可变的函数发生器。

1.2设计要求

设计借口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图和仿真图,并编写出控制波形的程序。

2芯片功能介绍

2.1、DAC0832芯片介绍:

DAC0832为一个8位D/A转换器,单电源供电,在+5~+15V范围内均可正常工作。

基准电压的范围为±10V,电流建立时间为1μs,CMOS工艺,低功耗20mW。

DAC0832的内部结构框图如下图所示。

图2.1DAC0832的内部结构框图

2.2DAC0832的外部引脚及功能介绍图如下:

图2.2DAC0832介绍

2.3DAC0832的应用:

DAC0832一是用作单极性电压输出,二是用作双极性电压输出,最后是用作程控放大器。

2.4DAC0832与8031的连接方式:

DAC0832的与单片机的连接方式有三种方式:

(1)单缓冲;

(2)双缓冲、(3)直通方式。

本程序采用的是方式一即单缓冲方式,ILE为高电平,CS、WR1、WR2、XFER为低电平。

图2.4DAC0832引脚图

3总体功能图和总原理图

图3.1总体功能图

图3.2总原理图

 

4程序流程图

4.1锯齿波程序流程图

锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。

然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。

流程图如下所示:

4.2三角波程序流程图

三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作,这个操作跟锯齿波的实现是相似的。

此程序输入的VREF的电压是+5V,因此该波形输出的最大频率是初值为00H和最终值为0FFH,且步数为1,这样输出的波形是最大的。

程序流程图如下图所示:

4.3梯形波程序流程图

梯形波输出跟锯齿波和三角波相似,只不过当加到顶峰后的一段时间内不改变A的值,过了一段时间后再将减少A的值,不过先后的步数可以一样也可以不一样。

然后减到初始的值后也要持续一段时间,然后再进行加数,如此循环下去。

程序流程图如下图所示:

4.4方波程序流程图

此波形的实现更加简单,只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。

这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。

流程图如下图所示:

 

4.5正弦波程序流程图

正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出,不过这些值直接去网上下载下来使用就可以了。

输出的数据刚好是256个数据,这样则可以直接相加就行了。

流程图如下图所示:

4.6整体程序流程图

如下图所示:

5程序设计

ORG0000H;程序开始

MOVSP,#60H;设置堆栈

MOVDPTR,#7FFFH;0832的地址

SJMPLOP

TPL:

MOVR6,#04H;切换频率和幅度(手动调节)

MOVR5,#04H

SJMPSTART

LOP:

JNBP1.5,TPL;选择调频

MOVR6,#01H;设置步长

MOVR5,#01H

START:

JNBP1.0,BX1;输出锯齿波

JNBP1.1,BX2;输出三角波

JNBP1.2,BX3;输出梯形

JNBP1.3,BX4;输出方波

JNBP1.4,BX5;输出正弦波

SJMPLOP

BX1:

MOVA,#00H;设置初值

LOOP:

MOVX@DPTR,A;把数据送到端口

ADDA,R6;通过步长改变上升波形

CJNEA,#00H,LOOP

SJMPSTART;返回检测开关情况

BX2:

MOVA,#00H;设置初值

LOOP3:

MOVX@DPTR,A;把数据送到端口转换

ADDA,R6;通过步长改变上升波形

CJNEA,#00H,LOOP3

DECA;减少步长改变数据下降波形

LOOP2:

MOVX@DPTR,A;把数据送到端口转换

DECA;减少步长改变数据下降波形

CJNEA,#00H,LOOP2

SJMPSTART;返回检测

BX3:

MOVA,#00H;设置初值

LOOP4:

MOVX@DPTR,A;把数据送到端口转换

ADDA,R6;增加步长改变数据上升波形

CJNEA,#00H,LOOP4

DECA

MOVR7,0EEH;循环次数

LOP2:

MOVX@DPTR,A;进行延时

DJNZR7,LOP2

LOOP1:

MOVX@DPTR,A;把数据送到端口转换

DECA

CJNEA,#00H,LOOP1;是否到最低点

MOVR7,0EEH;循环次数

LOP1:

MOVX@DPTR,A;把数据送到端口转换

DJNZR7,LOP1;进行延时

SJMPSTART;返回检测

BX4:

MOVA,#00H;设置初值最低点

MOVR7,#0EEH;循环次数

LOOP5:

MOVX@DPTR,A;进行数据转换

DJNZR7,LOOP5;进行延时

MOVA,#0FFH;设置最高点

MOVR7,#0EEH;循环次数

LOOP6:

MOVX@DPTR,A;进行数据转换

DJNZR7,LOOP6;进行延时

MOVA,#00H

SJMPSTART;返回检测开关变化

BX5:

MOVA,#00H;设置初值

LOOP7:

MOVR7,A;保存当前的数据

MOVDPTR,#SIN;读取表的地址

MOVCA,@A+DPTR;读取表中的数据

MOVDPTR,#7FFFH;D/A0832的端口地址

MOVX@DPTR,A;进行数据转换

MOVA,R7;恢复当前数据

INCA;为读取表的下一个值做准备

CJNEA,#00H,LOOP7;是否读完表的数据

SJMPSTART;返回检测开关

SIN:

DB80H,83H,86H,89H,8DH,90H,93H,96H

DB99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH

DB0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H

DB0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H

DB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H

DB0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H

DB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH

DB0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH

DB0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H

DB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH

DB0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH

DB0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H

DB0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H

DB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H

DB96H,93H,90H,8DH,89H,86H,83H,80H

DB80H,7CH,79H,78H,72H,6FH,6CH,69H

DB66H,63H,60H,5DH,5AH,57H,55H,51H

DB4EH,4CH,48H,45H,43H,40H,3DH,3AH

DB38H,35H,33H,30H,2EH,2BH,29H,27H

DB25H,22H,20H,1EH,1CH,1AH,18H,16H

DB15H,13H,11H,10H,0EH,0DH,0BH,0AH

DB09H,08H,07H,06H,05H,04H,03H,02H

DB02H,01H,00H,00H,00H,00H,00H,00H

DB00H,00H,00H,00H,00H,00H,01H,02H

DB02H,03H,04H,05H,06H,07H,08H,09H

DB0AH,0BH,0DH,0EH,10H,11H,13H,15H

DB16H,18H,1AH,1CH,1EH,20H,22H,25H

DB27H,29H,2BH,2EH,30H,33H,35H,38H

DB3AH,3DH,40H,43H,45H,48H,4CH,4EH

DB51H,55H,57H,5AH,5DH,60H,63H,66H

DB69H,6CH,6FH,72H,76H,79H,7CH,80H

END

6仿真测试

现在使用软件Proteus进行仿真测试,下面就相应的仿真效果图:

图5锯齿波仿真效果图

图6三角波仿真效果图

图7梯形波仿真效果图

图8方波仿真效果图

图9正弦波仿真效果图

从仿真的效果来看,这次的信号发生器的设计是很成功的。

而且波形也产生的很漂亮和标准。

7总结与体会

经过一系列的努力,终于顺利地完成了这个单片机课程的设计。

这是一个磨练意志的过程。

从课题的选择开始,计算器的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。

一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Proteus软件画电路图时,然后再转换成一维的WORD中进行编辑,这个过程中让我掌握了计算机辅助的设计技术。

当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。

需要的是细心和耐心。

在很大程度上培养了我拼搏的工作精神。

使我受益匪浅,更加明确了自己专业的方向。

在这一次的设计中,我不仅学到了关于单片机技术方面的许多专业知识,同时也让我感觉到团队合作的重要性。

其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。

与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。

课设是一个通过思考、发问、自己解惑并动手、提高的过程。

我会在以后的学习中不断学习,积累经验,不断完善自己,让自己变得更加出色。

参考文献

1、主编:

张毅刚,副主编:

彭喜元,董继成《单片机原理及应用》,高等教育出版社

2、主编:

胡辉《单片机应用系统设计与训练》中国水利水电出版社

3、主编:

周航慈《单片机应用程序设计技术》北京航空航天大学出版社

 

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

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1