基于AT89C52单片机信号发生器方案设计书.docx
《基于AT89C52单片机信号发生器方案设计书.docx》由会员分享,可在线阅读,更多相关《基于AT89C52单片机信号发生器方案设计书.docx(18页珍藏版)》请在冰豆网上搜索。
基于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、主编:
周航慈《单片机应用程序设计技术》北京航空航天大学出版社