单片机课程设计信号发生器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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正常输出

相关文档
最新文档