单片机课程设计信号发生器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计实验报告
电子信息工程学院
指导教师:***
08年6月30日
单片机课程设计实验报告
一.系统总体介绍
1)题目意义:
这次课程设计的题目我选择的是信号发生器,我之所以选择这个题目的原因有三个
①它是一个DA转换的实验,在前不久的市电子大赛中,我们做的是AD的转换,所
以想将模数/数模都熟悉一遍,为今后可能遇到的接口实验打下坚实的基础;
②另外一个原因是用到的芯片是MAX518,该芯片是串行数模转换,运用I2C总线,
通过这个实验可以更好的运用串行通信,同时能够学习I2C总线的协议,掌握了一
门新的总线,我觉得比其他实验收获更大;
③MAX518的时序比较复杂,通过练习针对时序的编程可以更好的提高自己读PDF
资料的能力和编程的能力。
2)本人所做的工作
这个实验从始至终都是自己完成的。
①程序的编写,程序的编写是我结合MAX518的时序图编写出来的,编程的重点在于
对与MAX518的编程,在编程的过程中对于应答信号的理解和处理是整个程序的核心,在单步调试中能够很明显的观测到SDA和SCL信号线上电平的变化;
②四种波形的表格数据的建立。表格的建立是通过MATLAB函数产生的。其函数分别
为:正弦波y=round(127*sin(0:2*pi/256:2*pi))+127
锯齿波y=round(0:1:255)
三角波y=round(0:2:255)
Y=round(255:2:0)
方波直接是0和255
由于MATLAB产生的数据之间含有回车和空格,不符合汇编语言的语法规则,所以要用WORD对所得的数据进行处理,利用WORD的查找替换同能讲回车和空格替换为英文的逗号,其中回车的表示方法为^p
③学习KEIL和SSTFlashFlex51.exe的使用
④元器件的购买和焊接
⑤实验报告的完成
3)系统的主要功能
该系统能够产生正弦波,锯齿波,三角波和方波四种波形,同时能够产生16HZ,12HZ,10HZ,8HZ四种频率,也就是可以产生4*4=16种信号,通过8个按键
开关来选择,同时有八个发光二极管来指示产生信号的频率和波形,形象直观。
经过改进后增加了双路输出的功能,按下双波形选择键,可以同时发出两路波形,波形的种类由按下的两个波形选择开关决定。定义位于左边的按键优先级高,右边的优先级低,优先级高的波形将由通道0输出,优先级低的将由通道1输出。单路输出时功能同前所述。
二.硬件电路设计及描述
本电路由SST89E58单片机,开关(10个),放光二极管(8个),11.0592M晶振,电容电阻组成。
为保证单片机能正常工作,首先将电源和地接好,将EA/VPP接到+5V;
P1.4~P1.7,P3.0~P3.3口作为开光控制端口,用10K电阻上拉到+5V,通过开关控制是否接地;
P1.1和P1.2作为SCL和SDA线,与MAX518通信;
MAX518的AD0和AD1接地,地址为00,模拟信号由OUT0输出,由于MAX518的参考电压由电源电压提供,不用外接参考电压;
三.软件设计流程及描述;
首先是检测频率按键和波形按键,如果没有键按下就循环等待,选择好波形和频率后就进入主程序循环发送数据。先发送MAX 518地址58H,然后发送控制信号00H,再发送数据,重复上述过程256次发送完一个周期的波形,再发送下一个周期,循环往复
四.程序代码及源注释
SDA EQU P1.2
SCL EQU P1.1
ORG 0000H
AJMP FQ0 ;跳转到频率查询程序
ORG 0100H
FQ0: JB P1.7,FQ1 ;查询1.7口是否为低电平,高电平的话继续查询1.6口MOV R5,#02H ;延迟2us
SETB P0.0 ;灭0.0口指示灯
SETB P0.1 ;灭0.1口指示灯
SETB P0.2 ;灭0.2口指示灯
CLR P0.3 ;亮0.3口指示灯
AJMP SS ;跳转到波形查询程序
FQ1: JB P1.6,FQ2 ;查询1.6口是否为低电平,高电平的话继续查询1.5口MOV R5,#22H ;延迟34us
SETB P0.0
SETB P0.1
SETB P0.3
CLR P0.2 ;亮0.2口指示灯
AJMP SS ;跳转到波形查询程序
FQ2: JB P1.5,FQ3 ;查询1.5口是否为低电平,高电平的话继续查询1.4口MOV R5,#42H ;延迟66us
SETB P0.0
SETB P0.2
SETB P0.3
CLR P0.1 ;亮0.1口指示灯
AJMP SS ;跳转到波形查询程序
FQ3: JB P1.4,FQ0 ;查询1.7口是否为低电平,高电平的话继续查询1.6口MOV R5,#62H ;延迟98us
SETB P0.1
SETB P0.2
SETB P0.3
CLR P0.0 ;亮0.0口指示灯
AJMP SS ;跳转到波形查询程序
SS: MOV R0,#00H ;R0保存是单数循环还是双数循环
JB P1.0,SIN ;没有按下开关时是单路输出,跳到SIN
AJMP LOP
SIN: JB P3.0,JUCHI ;查询3.0口是否为低电平,高电平则查询3.1口MOV DPTR,#TABSIN ;DPTR指针指向正弦波数
CLR P0.4 ;亮0.4口指示灯
SETB P0.5 ;灭0.5口指示灯
SETB P0.6 ;灭0.6口指示灯
SETB P0.7 ;灭0.7口指示灯
AJMP ST ;跳转到主程序
JUCHI: JB P3.1,SANJIAO ;查询3.0口是否为低电平,高电平则查询3.1口MOV DPTR,#TABJUCHI ;DPTR指针指向锯齿波数据
CLR P0.5 ;亮0.5口指示灯
SETB P0.4
SETB P0.6
SETB P0.7
AJMP ST ;跳转到主程序
SANJIAO:JB P3.2,FANGBO ;查询3.0口是否为低电平,高电平则查询3.1口MOV DPTR,#TABSANJIAO;DPTR指针指向三角波数据
CLR P0.6 ;亮0.6口指示灯
SETB P0.4
SETB P0.5
SETB P0.7
AJMP ST ;跳转到主程序
FANGBO:JB P3.3,SIN ;查询3.0口是否为低电平,高电平则查询3.1口MOV DPTR,#TABFANGBO ;DPTR指针指向方波数据
CLR P0.7 ;亮0.7口指示灯
SETB P0.4
SETB P0.5
SETB P0.6
AJMP ST ;跳转到主程序
LOP: MOV R7,#255 ;R7存放每个波形的取样点数
MOV R0,#00H ;R0保存是单数循环还是双数循环
SETB P0.7
SETB P0.6
SETB P0.5
SETB P0.4
SENDA:
JB P1.0,ST ;单输出的时候跳到ST正常输出