单片机课程设计(论文)-数字信号发生器设计.doc_第1页
单片机课程设计(论文)-数字信号发生器设计.doc_第2页
单片机课程设计(论文)-数字信号发生器设计.doc_第3页
单片机课程设计(论文)-数字信号发生器设计.doc_第4页
单片机课程设计(论文)-数字信号发生器设计.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

35 单片机课程设计报告目 录一、题目的意义1二、本人所做的工作1三、课设要求2四、课设所需设备及芯片功能介绍241、所需设备242、芯片功能介绍2五、总体功能图及主要设计思路551、总体功能图552、主要设计思想5六、硬件电路设计及描述761、硬件原理图762、线路连接步骤7七、软件设计流程及描述771、锯齿波的实现过程772、三角波的实现过程873、梯形波的实现过程974、方波的实现过程1175、正弦波的实验过程1276、通过开关实现波形切换和调频、调幅13八、程序调试步骤与运行结果1581、调试步骤1582、运行结果15九、课程设计体会17十、参考文献18十一、源代码及注释18一、题目的意义(1)、利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。(2)、我们这次的课程设计是以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、方波、梯形波等)且频率、幅度可变的函数发生器。(3)、掌握各个接口芯片(如0832等)的功能特性及接口方法,并能运用其实现一个简单的微机应用系统功能器件。(4)、在平时的学习中,我们所学的知识大都是课本上的,在机房的练习大家也都是分散的对各个章节的内容进行练习。因此,缺乏一种系统的设计锻炼。在课程所学结束以后,这样的课程设计十分有助于学生的知识系统的总结到一起。(5)、通过这几个波形进行组合形成了一个函数发生器,使得我对系统的整个框架的设计有了一个很好的锻炼。这不仅有助于大家找到自己感兴趣的题目,更可以锻炼大家单片机知识的应用。三、课设要求1、设计接口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图。2、编写下列控制程序(1) 能输出正弦波、三角波、锯齿波、方波、梯形波。(2) 由k0-k4键分别控制以上所述波形的产生。(3) 根据开关对输出波形的频率、幅度进行控制调节。四、课设所需设备及芯片功能介绍41、所需设备单片机最小开发系统,dac0832一片,pc机一台,运算放大器,其他器件任选。42、芯片功能介绍 (1)、dac0832芯片介绍: dac0832为一个8位d/a转换器,单电源供电,在+5+15v范围内均可正常工作。基准电压的范围为10v,电流建立时间为1s,cmos工艺,低功耗20mw。dac0832的内部结构框图如下图所示。dac0832的外部引脚及功能介绍图如下: (2)、dac0832的应用:dac0832一是用作单极性电压输出,二是用作双极性电压输出,最后是用作程控放大器。 (3)、dac0832与8031的连接方式: dac0832的与单片机的连接方式有三种方式:一、单缓冲二、双缓冲、三是直通方式。本程序采用的是方式一即单缓冲方式,ile为高电平,cs、wr1、wr2、xfer为低电平。电源及时钟引脚:vcc、vss;xtal1、xtal2控制引脚 psen、ale、ea、reset(即rst).i/o口引脚: p0、p1、p2、p3为4个8位i/o口的外部引脚.rst/vpd(9脚)rst:单片刚接上电源时,其内部各寄存器处于随机状态,在此脚输入24个时钟周期宽度以上的高电平将使单片机复位。单片机正常工作时,此脚应为0.5v低电平。vpd:备用电源输入端。当vcc下降到低于规定的值,而vpd在其规定的电压范围内(50.5v)时,vpd就向内部ram提供备用电源以保持内部ram的数据。 ale/prog(30引脚)ale引脚输出为地址锁存允许信号,当单片机上电工作 后,ale引脚不断输出正脉冲信号. 当访问片外存储器时,ale(地址锁存允许信号)输出脉冲的负跳沿用于16位地址的低8位锁存信号。不访问片外存储器,ale端以时钟振荡器频率的1/6固定输出正脉冲。在访问外部数据存储器时(执行movx指令),ale会丢失一个ale脉冲。mcs-51单片机的片外总线结构 mcs-51系列单片机片外引脚可以构成如上图所示的三总线结构:地址总线(ab) 数据总线(db) 控制总线(cb)8031各个口的功能定义p0口:双向8位三态i/o口,此口为地址总线(低8位)及数据总线分时复用口,可带8个lsttl负载。p1口:8位准双向i/o口,可带4个 lstttl负载。p2口:8位准双向i/o口,与地址总线(高8位)复用。p3口:8位准双向i/o口,双功能复用口。五、总体功能图及主要设计思路51、总体功能图函数发生器的设计k1键三角波k2键梯形波k3键方波k4键正弦波k5调频调幅k0键锯齿波52、主要设计思想从此题的要求我的设计思路分以下几步:(一)、课设需要各个波形的基本输出。如输出锯齿波、三角波、梯形波、方波、正弦波。这些波形的实现的具体步骤:锯齿波实现很简单,只需要一开始定义一个初值,然后不断的加1,当溢出后又重初值开始加起,就这样循环下去。三角波的实验过程是先加后减,我的一开始的实现方法是先是从00h开始加1直到溢出后就执行减1操作,就这样不断调用这个循环。梯形波的实现过程是前后加和减的速度不同而已,如你可以在上升加的步数大一些,减时少一些。方波的实现方法是连续输出一个数,到某个时候就改变一下值,可以把值定义为正极性的,也可以是负极性。正弦波的实现是非常麻烦的。它的实现过程是通过定义一些数据,然后执行时直接输出定义的数据就可以了。在设计之初,我一直都在尝试使用数学的泰勒级数展开来计算输出波形,使用这种方法,实现起来相对来说要比较困难一点,而且会使得频率会下降。要使得它达到更高的频率,就得另辟蹊径了。分析一下为什么频率上不去,主要原因在于,使用单片机进行正弦函数的运算时占去了不少时间,如果去掉这一计算过程波形的频率应该大有提高,另外就是cpu时钟频率没有调至最高,以及dac转换过程需要时间。为了达到更高的频率,首先就要免去单片机的计算负担,我使用的解决方法是人为计算出要输出的点,然后建一个表通过查表来进行输出,这样主要工作任务就落到了建表的过程中。这样做的好处在于,查表所耗费的时钟周期相同,这样输出的点与点之间的距离就相等了,输出的波形行将更趋于完美,当然更让我们感到的高兴的是它输出波形的频率将近达到了100k赫兹,能够满足我们设计的扩展要求了。为了实现频率的调整,我在一个正弦波周期里建了两百个点,如果我们隔一个取点的话,且在cpu时钟频率不改变的情形下,正弦波频率将相对于前面的频率提高将近一倍。这样我们就得到了解决频率调整的方法,首先进行cpu时钟频率选择,再调整一个正弦函数一个周期输出的点数,幅度的调节是通过初始幅度设置再通过外部放大电路来调节,设计程序流程图如图所示。(二)、通过p3口和开关k0-k5相连接来控制各个波形的输出。能根据k0-k5键状态进行波形切换,开关键向上接“1”,产生波形,向下拔接“0”,无波形输出。如k0键向上拔,k1-k4键向下拔,产生锯齿波; k1键向上拔,k0、k2-k4键向下拔,产生三角波;以此类推。通过k5键来控制调频/调幅。六、硬件电路设计及描述61、硬件原理图62、线路连接步骤(1)d/a区0832片选信号cs插孔和译码输出y2插孔相连。 (2)用排线将d/a区d0d7连到bus2区xd0xd7。 (3)将0832的wr信号线连到bus3区的xwr上。 (4)d/a区的12v插孔分别与外置电源的12v端相连。 (5)w2区的vin接+12v,如果电源内置,vin插孔和d/a区的+12v插孔相连。(6)d/a区的vref接w2区 vref,并调节w2使 vref=+5v。(7)k0-k5开关分别接到p3口的p3.0-p3.5七、软件设计流程及描述71、锯齿波的实现过程锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。流程图如下所示:设置初值amov dptr,#8000hmovx dptr,a加上设定的步数,add a,步数判断a是否已经满了?否重新设置初值a是开 始72、三角波的实现过程 三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作,这个操作跟锯齿波的实现是相似的。此程序输入的vref的电压是5v,因此该波形输出的最大频率是初值为00h和最终值为0ffh,且步数为1,这样输出的波形是最大的。程序流程图如下图所示:给a设置初值mov dptr,#8000hmovx dptr,aadd a,步数判断a是否已满?否是subb a,步数判断是否等于初值?否/是开 始73、梯形波的实现过程 梯形波输出跟锯齿波和三角波相似,只不过当加到顶峰后的一段时间内不改变a的值,过了一段时间后再将减少a的值,不过先后的步数可以一样也可以不一样。然后减到初始的值后也要持续一段时间,然后再进行加数,如此循环下去。开 始给a设置初值mov dptr,#8000h是持续一段时间subb a,步数2判断是否等于初值?否是 持续一段时间movx dptr,aadd a,步数1判断a是否已满?否74、方波的实现过程 此波形的实现更加简单,只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。流程图如下图所示:开 始 给a设置初值 mov dptr,#8000h movx dptr,a 设置输出的时间 再设置一个初值放入a中 movx dptr,a 输出一段时间 75、正弦波的实验过程 正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出,不过这些值直接去网上下载下来使用就可以了。输出的数据刚好是256个数据,这样则可以直接相加就行了。开 始mov a,#00hmov r7,amov dptr,#sinmovc a,a+dptrmov dptr,#8000hmovx dptr,amov a,r7inc a 76、通过开关实现波形切换和调频、调幅 通过开关实现波形的切换比较简单只需通过输出波形后不断返回到检测开关的子程序中,判断是否有别的开关拨动,如果有别的开关拨动则执行别的程序,否则输出原来的波形,不过如果要能够识别别的开关发生变化,必须将此开关关掉否则会识别不了别的键按下。当然开关的调频和调幅的实现也一样,不过首先先输出一个波形,然后再检测开关是否需要调频或者调幅,如果需要则转入到相应的程序中,最后再重新输出波形。下面是调频和调幅:开 始判断p3.5是否为1?否是输出各种波形调整一下数字量下面要实现的各种波形通过开关的切换过程的流程图,按下一个开关通过p3.0为1则输出锯齿波,p3.1为1输出三角波,p3.2为1输出梯形波,p3.3为1输出方波,p3.4为1输出正弦波。开 始判断p3.0是否为1?判断p3.1是否为1?判断p3.2是否为1?判断p3.3是否为1?判断p3.4是否为1?否否否否否是是是是是输出响应的波形 八、程序调试步骤与运行结果81、调试步骤(1)、按照实验原理图及电路图和接线步骤连好实验线路。(2)、把设计好的程序放在两个地方:一是在系统监控中,二是在上位机实验系统软件中。(3)、运行“dvcc实验系统”,稍后出现“dvcc实验系统”菜单。打开存放的课设程序。(4)、打开实验箱外置电源,显示器显示闪动的“p.”,按下“reset 复位键,然后按下“pcdbg”功能键,再点击系统菜单中的“联接”,此时出现“寄存器窗口”、“反汇编窗口”和“数据窗口”等,说明联机成功。再点“编译”和“调试”,将目标文件传送到实验系统的仿真ram区。最后点击“运行”,将输出端连接到示波器,观察波形是否满足设计要求。82、运行结果根据p3口内容判断波形输出,p3.0=1时,为锯齿波;p3.1=1时,为三角波;p3.2=1时,为梯形波;p3.3=1时,为方波;p3.4=1时,为正弦波。根据p3.5的值进行频率与振幅的改变,改变当前波形频率,改变当前波形振幅。各个波形的运行情况如下:(1)、正弦波原始大小及调频调幅后的波形: 原始正弦波 频率改变后 振幅改变后(2)、三角波原始大小及调频调幅后的波形: 原始三角波 频率改变后 振幅改变后(3)、锯齿波原始大小及调频调幅后的波形: 原始锯齿波 频率改变后 振幅改变后(4)、方波原始大小及调频调幅后的波形: 原始方波 频率改变后 振幅改变后(4)、梯形波原始大小及调频调幅后的波形:原始方波 频率改变后 振幅改变后参考文献 1、主编:张毅刚,副主编:彭喜元,董继成 单片机原理及应用,高等教育出版社。 2、主编:胡辉单片机应用系统设计与训练 中国水利水电出版社3、主编:周航慈单片机应用程序设计技术 北京航空航天大学出版社 十一、源代码及注释波形输出程序和切换: org 0000h ;程序开始 mov sp,#60h ;设置堆栈mov dptr,#8000h ;0832的地址lop: jb p3.5,tiao ;是否需要调频 mov r6,#01h ;设置步长 mov r5,#01h start:jb p3.0,jchi ;输出锯齿波程序 jb p3.1,sjiao ;输出三角波程序 jb p3.2,txing ;输出梯形波程序 jb p3.3,fbo ;输出方波程序 jb p3.4,zxuan ;输出正弦波程序 sjmp lop ;循环检测;- jchi:mov a,#00h ;设置初值 loop:movx dptr,a ;把数据送到端口转换 add a,r6 ;通过步长改变数据,上升波形 cjne a,#00h,loop ;a值是否到最高点 ; djnz r5,loop sjmp lop ;返回检测开关;-sjiao:mov a,#00h ;设置初值 loop3:movx dptr,a ;把数据送到端口转换 add a,r6 ;通过步长改变数据上升波形 cjne a,#00h,loop3 ; a值是否到最高点 dec a ;减少步长改变数据下降波形 loop2:movx dptr,a ;把数据送到端口转换 dec a ;减少步长改变数据下降波形 cjne a,#00h,loop2 ;a值是否到最低点 djnz r5,loop3 ;波形周期 sjmp lop ;返回检测开关;-txing:mov a,#00h ;设置初值 loop4:movx dptr,a ;把数据送到端口转换 add a,r6 ;增加步长改变数据上升波形 cjne a,#00h,loop4 ;a值是否到最高点 ;subb a,r6 ;下降波形做准备 dec a mov r7,0eeh ;循环次数 lop2:movx dptr,a ;进行延时 djnz r7,lop2 loop1:movx dptr,a ;把数据送到端口转换 ;subb a,r6 dec a cjne a,#00h,loop1 ;是否到最低点 mov r7,0eeh ;循环次数 lop1:movx dptr,a ;把数据送到端口转换 djnz r7,lop1 ;进行延时 sjmp lop ;返回检测开关;- fbo: mov a,#00h ;设置初值最低点 mov r7,#0eeh ;循环次数 loop5:movx dptr,a ;进行数据转换 djnz r7,loop5 ;进行延时 mov a,#0ffh ;设置最高点 mov r7,#0eeh ;循环次数 loop6:movx dptr,a ;进行数据转换 djnz r7,loop6 ;进行延时 mov a,#00h sjmp lop ;返回检测开关变化;-zxuan: mov a,#00h ;设置初值loop7: mov r7,a ;保存当前的数据 mov dptr,#sin ;读取表的地址 movc a,a+dptr ;读取表中的数据 mov dptr,#8000h ;d/a0832的端口地址 movx dptr,a ;进行数据转换 mov a,r7 ;恢复当前数据 inc a ;为读取表的下一个值做准备 cjne a,#00h,loop7 是否读完表的数据 sjmp start ;返回检测开关tiao: mov r6,#04h ;改变调频/调幅 mov r5,#02h sjmp start ;返回检测开关;-以下是通过正弦的值所建立的一个表sin: db 80h,83h,86h,89h,8dh,90h,93h,96h db 99h,9ch,9fh,0a2h,0a5h,0a8h,0abh,0aeh dbb1h,0b4h,0b7h,0bah,0bch,0bfh,0c2h,0c5h db0c7h,0cah,0cch,0cfh,0d1h, 0d4h,0d6h,0d8h db 0dah,0ddh,0dfh,0e1h,0e3h, 0e5h,0e7h,0e9h db 0eah,0ech,0eeh,0efh,0f1h, 0f2h,0f4h,0f5h db 0f6h,0f7h,0f8h,0f9h,0fah, 0fbh,0fch,0fdh db 0fdh,0feh,0ffh,0ffh,0ffh, 0ffh,0ffh,0ffh db 0ffh,0ffh,0ffh,0ffh,0ffh, 0ffh,0feh,0fdh db 0fdh,0fch,0fbh,0fah,0f9h, 0f8h,0f7h,0f6h db 0f5h,0f4h,0f2h,0f1h,0efh, 0eeh,0ech,0eah db 0e9h,0e7h,0e5h,0e3h,0e1h, 0deh,0ddh,0dah db 0d8h,0d6h,0d4h,0d1h,0cfh, 0cch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论