单片机课程设计信号发生器.docx
- 文档编号:25923029
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:19
- 大小:1.19MB
单片机课程设计信号发生器.docx
《单片机课程设计信号发生器.docx》由会员分享,可在线阅读,更多相关《单片机课程设计信号发生器.docx(19页珍藏版)》请在冰豆网上搜索。
单片机课程设计信号发生器
单片机课程设计
实验报告
电子信息工程学院
指导教师:
***
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的参考电压由电源电压提供,不用外接参考电压;
三.软件设计流程及描述;
检测频率端口
检测波形端口
发送MAX518地址数据
发送MAX518控制字
查表发送转换的数据
是否发送完256个数据
是
否
首先是检测频率按键和波形按键,如果没有键按下就循环等待,选择好波形和频率后就进入主程序循环发送数据。
先发送MAX518地址58H,然后发送控制信号00H,再发送数据,重复上述过程256次发送完一个周期的波形,再发送下一个周期,循环往复
四.程序代码及源注释
SDAEQUP1.2
SCLEQUP1.1
ORG0000H
AJMPFQ0;跳转到频率查询程序
ORG0100H
FQ0:
JBP1.7,FQ1;查询1.7口是否为低电平,高电平的话继续查询1.6口
MOVR5,#02H;延迟2us
SETBP0.0;灭0.0口指示灯
SETBP0.1;灭0.1口指示灯
SETBP0.2;灭0.2口指示灯
CLRP0.3;亮0.3口指示灯
AJMPSS;跳转到波形查询程序
FQ1:
JBP1.6,FQ2;查询1.6口是否为低电平,高电平的话继续查询1.5口
MOVR5,#22H;延迟34us
SETBP0.0
SETBP0.1
SETBP0.3
CLRP0.2;亮0.2口指示灯
AJMPSS;跳转到波形查询程序
FQ2:
JBP1.5,FQ3;查询1.5口是否为低电平,高电平的话继续查询1.4口
MOVR5,#42H;延迟66us
SETBP0.0
SETBP0.2
SETBP0.3
CLRP0.1;亮0.1口指示灯
AJMPSS;跳转到波形查询程序
FQ3:
JBP1.4,FQ0;查询1.7口是否为低电平,高电平的话继续查询1.6口
MOVR5,#62H;延迟98us
SETBP0.1
SETBP0.2
SETBP0.3
CLRP0.0;亮0.0口指示灯
AJMPSS;跳转到波形查询程序
SS:
MOVR0,#00H;R0保存是单数循环还是双数循环
JBP1.0,SIN;没有按下开关时是单路输出,跳到SIN
AJMPLOP
SIN:
JBP3.0,JUCHI;查询3.0口是否为低电平,高电平则查询3.1口
MOVDPTR,#TABSIN;DPTR指针指向正弦波数
CLRP0.4;亮0.4口指示灯
SETBP0.5;灭0.5口指示灯
SETBP0.6;灭0.6口指示灯
SETBP0.7;灭0.7口指示灯
AJMPST;跳转到主程序
JUCHI:
JBP3.1,SANJIAO;查询3.0口是否为低电平,高电平则查询3.1口
MOVDPTR,#TABJUCHI;DPTR指针指向锯齿波数据
CLRP0.5;亮0.5口指示灯
SETBP0.4
SETBP0.6
SETBP0.7
AJMPST;跳转到主程序
SANJIAO:
JBP3.2,FANGBO;查询3.0口是否为低电平,高电平则查询3.1口
MOVDPTR,#TABSANJIAO;DPTR指针指向三角波数据
CLRP0.6;亮0.6口指示灯
SETBP0.4
SETBP0.5
SETBP0.7
AJMPST;跳转到主程序
FANGBO:
JBP3.3,SIN;查询3.0口是否为低电平,高电平则查询3.1口
MOVDPTR,#TABFANGBO;DPTR指针指向方波数据
CLRP0.7;亮0.7口指示灯
SETBP0.4
SETBP0.5
SETBP0.6
AJMPST;跳转到主程序
LOP:
MOVR7,#255;R7存放每个波形的取样点数
MOVR0,#00H;R0保存是单数循环还是双数循环
SETBP0.7
SETBP0.6
SETBP0.5
SETBP0.4
SENDA:
JBP1.0,ST;单输出的时候跳到ST正常输出
MOVA,R7;
ANLA,#01H;判断是单数还是双数循环
JNZSINGLE;单数的话跳到SINGLE
MOVR0,#01H;双数的话将R0赋1
WAVE0:
JBP3.3,WAVE1;倒序判断,从2通道输出
MOVDPTR,#TABFANGBO;DPTR指针指向方波数据
CLRP0.7;亮0.7口指示灯
AJMPST
WAVE1:
JBP3.2,WAVE2
MOVDPTR,#TABSANJIAO;DPTR指针指向三角波数据
CLRP0.6;亮0.6口指示灯
SETBP0.7;灭0.7口指示灯
AJMPST
WAVE2:
JBP3.1,WAVE3
MOVDPTR,#TABJUCHI;DPTR指针指向锯齿波数据
CLRP0.5;亮0.5口指示灯
SETBP0.7;灭0.7口指示灯
SETBP0.6;灭0.6口指示灯
AJMPST
WAVE3:
JBP3.0,WAVE0
MOVDPTR,#TABSIN;DPTR指针指向正弦波数
CLRP0.4;亮0.4口指示灯
SETBP0.5;灭0.5口指示灯
SETBP0.6;灭0.6口指示灯
SETBP0.7;灭0.7口指示灯
AJMPST
SINGLE:
MOVR0,#00H
WAVE4:
JBP3.0,WAVE5
MOVDPTR,#TABSIN;DPTR指针指向正弦波数
CLRP0.4;亮0.4口指示灯
AJMPST
WAVE5:
JBP3.1,WAVE6
MOVDPTR,#TABJUCHI;DPTR指针指向锯齿波数据
CLRP0.5;亮0.5口指示灯
SETBP0.4;灭0.7口指示灯
AJMPST
WAVE6:
JBP3.2,WAVE7
MOVDPTR,#TABSANJIAO;DPTR指针指向三角波数据
CLRP0.6;亮0.6口指示灯
SETBP0.4;灭0.4口指示灯
SETBP0.5;灭0.5口指示灯
AJMPST
WAVE7:
JBP3.3,WAVE4
MOVDPTR,#TABFANGBO;DPTR指针指向方波数据
CLRP0.7;亮0.7口指示灯
SETBP0.4;灭0.4口指示灯
SETBP0.5;灭0.5口指示灯
SETBP0.6;灭0.6口指示灯
AJMPST
ST:
SETBSDA;起始信号
SETBSCL
CLRSDA
MOVA,#58H;发送地址
MOVR6,#08H;每个字节有8位
LOP0:
CLRSCL
RLCA;左移一位,将最高位移至C寄存器
MOVSDA,C;写入地址线
SETBSCL
DJNZR6,LOP0;没发送完8为则继续发送
CLRSCL
JBSDA,$;应答信号,SDA为高点平则等待
SETBSCL
JBSDA,$;SCL置成高电平后继续查询SDA是否为低电平
CLRSCL
MOVA,R0;发送控制命令,过程同上
MOVR6,#08H
LOP1:
CLRSCL
RLCA;左移一位
MOVSDA,C;写一位
SETBSCL
DJNZR6,LOP1
CLRSCL
JBSDA,$;应答信号,同上
SETBSCL
JBSDA,$
CLRSCL
LOP2:
JBP1.0,SINGL;发送数据
MOVA,#0FFH
SUBBA,R7
MOVCA,A+DPTR;将DPTR指向单元中的送入A中
AJMPBSEND
SINGL:
MOVA,#00H
MOVCA,A+DPTR;将DPTR指向单元中的送入A中
BSEND:
MOVR6,#08H;1字节8位
LOP3:
CLRSCL
RLCA;左移一位
MOVSDA,C;写一位
SETBSCL
DJNZR6,LOP3
INCDPTR
CLRSCL
JBSDA,$;应答信号
SETBSCL
JBSDA,$
CLRSCL
CLRSDA;结束信号
SETBSCL
SETBSDA
MOVA,R5;延时,用来控制波形的频率
MOVR4,A
DLY_MS:
DJNZR4,DLY_MS
DJNZR7,ZJT;设置一个中间跳转,因为超出了DJNZ的跳转围
AJMPFQ0
ZJT:
LJMPSENDA;是否发送完256个数,发送完则进入下一个周期
TABSIN:
DB127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184
DB187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231
DB233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252,252,253,253
DB253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245
DB244,243,242,240,239,238,236,234,233,231,229,227,225,223,221,219,217,215,212,210
DB208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155
DB152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90
DB87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25
DB23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,2,2,3
DB4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,33,35,37,39,42,44,46,49,51,54
DB56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124,127
TABJUCHI:
DB0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33
DB34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
DB64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93
DB94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116
DB117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137
DB138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158
DB159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179
DB180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200
DB201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221
DB222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242
DB243,244,245,246,247,248,249,250,251,252,253,254,255
TABSANJIAO:
DB0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62
DB64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114
DB116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156
DB158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198
DB200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240
DB242,244,246,248,250,252,254,255,253,251,249,247,245,243,241,239,237,235,233,231,229
DB227,225,223,221,219,217,215,213,211,209,207,205,203,201,199,197,195,193,191,189,187
DB185,183,181,179,177,175,173,171,169,167,165,163,161,159,157,155,153,151,149,147,145
DB143,141,139,137,135,133,131,129,127,125,123,121,119,117,115,113,111,109,107,105,103
DB101,99,97,95,93,91,89,87,85,83,81,79,77,75,73,71,69,67,65,63,61,59,57,55,53,51,49,47
DB45,43,41,39,37,35,33,31,29,27,25,23,21,19,17,15,13,11,9,7,5,3,1
TABFANGBO:
DB0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255
DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
END
五.课程设计体会
这是实验从电路的设计到程序的编写和调试是我自己独立完成的,这本身就是一个极大的锻炼,经过了无数次的失败最终产生了完美的波形。
总结起来,主要的收获有一下几点:
⑴懂得了如何调试和下载程序。
以前的编程只是纸上谈兵,并没有真正运行出来,而这次不仅需要将程序编译通过,还要产生结果。
在程序的调试过程中,主要使用的单步调试功能,通过每一步执行后相应寄存器和端口的值来判断程序执行是否正确,是否产生应答信号等待,最后调试成功后再下载。
这次实验让我真正明白了什么是仿真模式什么是下载模式,以及两种模式如何转换;
⑵学会了如何使用串行DA芯片和I2C总线协议。
这个实验的关键就在如何给MAX518送数,使得芯片能够转换。
在调试的过程中使用的是分步调试的功能,通过观察每一步执行之后SDA和SCL电平的变化,对比时序图,观察是否执行正确,进而修改程序;在修改的过程中对MAX518的时序图有了真正的理解,这种能力可以推广到学习更多的芯片,就像戴老师上课时曾说过的:
“就是要培养你们一看到芯片就兴奋”;
⑶硬件电路的焊接。
以前的实验包括数电实验和模电实验,我负责的都是电路图的设计和布局,但从来没有动手焊接过,因为我的焊接技术十分不好,但这次是一个人一组,只能自己焊接,最终的实验板效果非常好,远远超出了我的设想。
⑷刚开始的一周的主要工作都是研究如何使用调试软件和下载软件,因为开始时没有人会用,只能根据上课时的印象和开发板的PDF资料来一步步摸索。
最后终于明白了开发板有仿真和下载两种工作模式,通过KEIL仿真模式的INCLUDE和SST软件的SOFTICE来实现两者之间的转换,至此也真正明白了实验箱上面LOAD,MON和RUN三种模式到底有什么区别。
我感觉这是我这次实验收获最大的。
之前参加了微联杯,程序编完并检查无错误后,不知道如何用实验箱仿真,更不知道如何将程序下载到单片机部,这次实验之后才找到了下载的工具。
如果当初就做单片机课程设计的话,微联杯就可能获奖了
⑸这个实验从始至终都是用的小开发板来调试和下载程序的,开发板比实验箱精简了部分功能,但是使用起来更加方便,电路图更加明了,这大大减少了我们对于硬件的学习时间,使得我们能够将更多的时间用来编写程序;开发板的另一个优点就是效果特别稳定,不用担心是硬件出了问题。
现在实验室的资源特别紧,在实验室做实验一半的时间多花在找到一台好电脑和好的实验箱,找到实验箱后还经常
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 信号发生器