单片机课程设计信号发生器
- 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产生的数据之间含有回车和空格,不符合汇编语言的语法规则,所以要用WOR对所得的数据进行处理,利用WOR啲查找替换同能讲回车和空格替换为英
文的逗号,其中回车的表示方法为A 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,模拟信号由OUTO输出,由于MAX518的参考电压由电源电压提供,不用外接参考电压;
三•软件设计流程及描述;
首先是检测频率按键和波形按键,如果没有键按下就循环等待,选择好波形和频率后就 进入主程序循环发送数据。先发送
MAX518地址58H,然后发送控制信号 00H,再发送数据,
重复上述过程256次发送完一个周期的波形,再发送下一个周期,循环往复
四•程序代码及源注释
SDA EQU P1.2 SCL EQU P1.1 ORG 0000H AJMP FQ0 ORG 0100H
检测频率端口
1
检测波形端口
1
F
发送MAX518地址数据
・
发送MAX518控制字
1
F
查表发送转换的数据
T
是否发送完256个数据
J b
跳转到频率查询程序
FQ0: JB P1.7,FQ1 MOV R5,#02H
SETB P0.0
SETB P0.1
SETB P0.2 CLR
P0.3 AJMP SS FQ1: JB P1.6,FQ2 MOV R5,#22H
SETB P0.0
SETB P0.1
SETB P0.3 CLR
P0.2 AJMP SS FQ2: JB P1.5,FQ3 MOV R5,#42H
SETB P0.0
SETB P0.2
SETB P0.3 CLR
P0.1 AJMP SS FQ3: JB P1.4,FQ0 MOV R5,#62H
SETB P0.1
SETB P0.2
SETB P0.3 CLR
P0.0 AJMP SS
查询1.7 口是否为低电平,高电平的话继续查询延
迟2us
灭0.0 口指示灯
灭0.1 口指示灯
灭0.2 口指示灯
亮0.3 口指示灯跳转到波形查询程序
查询1.6 口是否为低电平,高电平的话继续查询延
迟34us
亮0.2 口指示灯跳转到波形查询程序
查询1.5 口是否为低电平,高电平的话继续查询延
迟66us
亮0.1 口指示灯跳转到波形查询程序
查询1.7 口是否为低电平,高电平的话继续查询延
迟98us
亮0.0 口指示灯跳转
到波形查询程序
1.6 口
1.5 口
1.4 口
1.6 口
SS: MOV R0,#00H JB P1.0,SIN
AJMP LOP ;R0 保存是单数循环还是双数循环
没有按下开关时是单路输出,跳到SIN
SIN: JB P3.0,JUCHI 查询3.0 口是否为低电平,高电平则查询3.1 MOV DPTR,#TABSIN ;DPTR 指针指向正弦波数
CLR P0.4 ;
SETB P0.5 ;
SETB P0.6 ;
SETB P0.7 ;
AJMP ST ; JUCHI: JB P3.1,SANJIAO 亮0.4 口指示灯
灭0.5 口指示灯
灭0.6 口指示灯
灭0.7 口指示灯跳转到主程序查询3.0 口是否为低电平,高电平则查询3.1
MOV DPTR,#TABJUCHI ;DPTR 指针指向锯齿波数据
CLR P0.5 亮0.5 口指示灯