当前位置:文档之家› 单片机课程设计信号发生器

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

单片机课程设计实验报告电子信息工程学院指导教师:***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.2SCL EQU P1.1ORG 0000HAJMP FQ0 ;跳转到频率查询程序ORG 0100HFQ0: JB P1.7,FQ1 ;查询1.7口是否为低电平,高电平的话继续查询1.6口MOV R5,#02H ;延迟2usSETB 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 ;延迟34usSETB P0.0SETB P0.1SETB P0.3CLR P0.2 ;亮0.2口指示灯AJMP SS ;跳转到波形查询程序FQ2: JB P1.5,FQ3 ;查询1.5口是否为低电平,高电平的话继续查询1.4口MOV R5,#42H ;延迟66usSETB P0.0SETB P0.2SETB P0.3CLR P0.1 ;亮0.1口指示灯AJMP SS ;跳转到波形查询程序FQ3: JB P1.4,FQ0 ;查询1.7口是否为低电平,高电平的话继续查询1.6口MOV R5,#62H ;延迟98usSETB P0.1SETB P0.2SETB P0.3CLR P0.0 ;亮0.0口指示灯AJMP SS ;跳转到波形查询程序SS: MOV R0,#00H ;R0保存是单数循环还是双数循环JB P1.0,SIN ;没有按下开关时是单路输出,跳到SINAJMP LOPSIN: 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.4SETB P0.6SETB P0.7AJMP ST ;跳转到主程序SANJIAO:JB P3.2,FANGBO ;查询3.0口是否为低电平,高电平则查询3.1口MOV DPTR,#TABSANJIAO;DPTR指针指向三角波数据CLR P0.6 ;亮0.6口指示灯SETB P0.4SETB P0.5SETB P0.7AJMP ST ;跳转到主程序FANGBO:JB P3.3,SIN ;查询3.0口是否为低电平,高电平则查询3.1口MOV DPTR,#TABFANGBO ;DPTR指针指向方波数据CLR P0.7 ;亮0.7口指示灯SETB P0.4SETB P0.5SETB P0.6AJMP ST ;跳转到主程序LOP: MOV R7,#255 ;R7存放每个波形的取样点数MOV R0,#00H ;R0保存是单数循环还是双数循环SETB P0.7SETB P0.6SETB P0.5SETB P0.4SENDA:JB P1.0,ST ;单输出的时候跳到ST正常输出MOV A,R7 ;ANL A,#01H ;判断是单数还是双数循环JNZ SINGLE ;单数的话跳到SINGLEMOV R0,#01H ;双数的话将R0赋1WAVE0: JB P3.3,WAVE1 ;倒序判断,从2通道输出MOV DPTR,#TABFANGBO ;DPTR指针指向方波数据CLR P0.7 ;亮0.7口指示灯AJMP STWAVE1: JB P3.2,WAVE2MOV DPTR,#TABSANJIAO ;DPTR指针指向三角波数据CLR P0.6 ;亮0.6口指示灯SETB P0.7 ;灭0.7口指示灯AJMP STWAVE2: JB P3.1,WAVE3MOV DPTR,#TABJUCHI ;DPTR指针指向锯齿波数据CLR P0.5 ;亮0.5口指示灯SETB P0.7 ;灭0.7口指示灯SETB P0.6 ;灭0.6口指示灯AJMP STWAVE3: JB P3.0,WAVE0MOV DPTR,#TABSIN ;DPTR指针指向正弦波数CLR P0.4 ;亮0.4口指示灯SETB P0.5 ;灭0.5口指示灯SETB P0.6 ;灭0.6口指示灯SETB P0.7 ;灭0.7口指示灯AJMP STSINGLE:MOV R0,#00HWAVE4: JB P3.0,WAVE5MOV DPTR,#TABSIN ;DPTR指针指向正弦波数CLR P0.4 ;亮0.4口指示灯AJMP STWAVE5: JB P3.1,WAVE6MOV DPTR,#TABJUCHI ;DPTR指针指向锯齿波数据CLR P0.5 ;亮0.5口指示灯SETB P0.4 ;灭0.7口指示灯AJMP STWAVE6: JB P3.2,WAVE7MOV DPTR,#TABSANJIAO ;DPTR指针指向三角波数据CLR P0.6 ;亮0.6口指示灯SETB P0.4 ;灭0.4口指示灯SETB P0.5 ;灭0.5口指示灯AJMP STWAVE7: JB P3.3,WAVE4MOV DPTR,#TABFANGBO ;DPTR指针指向方波数据CLR P0.7 ;亮0.7口指示灯SETB P0.4 ;灭0.4口指示灯SETB P0.5 ;灭0.5口指示灯SETB P0.6 ;灭0.6口指示灯AJMP STST: SETB SDA ;起始信号SETB SCLCLR SDAMOV A,#58H ;发送地址MOV R6,#08H ;每个字节有8位LOP0: CLR SCLRLC A ;左移一位,将最高位移至C寄存器MOV SDA,C ; 写入地址线SETB SCLDJNZ R6,LOP0 ;没发送完8为则继续发送CLR SCLJB SDA,$ ;应答信号,SDA为高点平则等待SETB SCLJB SDA,$ ;SCL置成高电平后继续查询SDA是否为低电平CLR SCLMOV A,R0 ;发送控制命令,过程同上MOV R6,#08HLOP1: CLR SCLRLC A ;左移一位MOV SDA,C ; 写一位SETB SCLDJNZ R6,LOP1CLR SCLJB SDA,$ ;应答信号,同上SETB SCLJB SDA,$CLR SCLLOP2: JB P1.0,SINGL ;发送数据MOV A,#0FFHSUBB A,R7MOVC A,A+DPTR ;将DPTR指向单元中的送入A中AJMP BSENDSINGL: MOV A,#00HMOVC A,A+DPTR ;将DPTR指向单元中的送入A中BSEND: MOV R6,#08H ;1字节8位LOP3: CLR SCLRLC A ;左移一位MOV SDA,C ;写一位SETB SCLDJNZ R6,LOP3INC DPTRCLR SCLJB SDA,$ ;应答信号SETB SCLJB SDA,$CLR SCLCLR SDA ;结束信号SETB SCLSETB SDAMOV A,R5 ;延时,用来控制波形的频率MOV R4,ADLY_MS:DJNZ R4,DLY_MSDJNZ R7,ZJT ;设置一个中间跳转,因为超出了DJNZ的跳转围AJMP FQ0ZJT: LJMP SENDA ;是否发送完256个数,发送完则进入下一个周期TABSIN:DB 127,130,133,136,139,143,146,149,152,155, 158,161,164,167,170,173,176,178,181,184DB187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225 ,227,229,231DB233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252 ,252,253,253DB253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248, 247,245DB244,243,242,240,239,238,236,234,233,231,229,227,225,223,221,219,217,215, 212,210DB208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161, 158,155DB152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,9 6,93,90DB87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27, 25DB23,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,4 9,51,54DB56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,12 1,124,127TABJUCHI: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,33DB34,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,63DB64,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,93DB94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,11 3,114,115,116DB117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133 ,134,135,136,137DB138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155, 156,157,158DB159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 ,176,177,178,179DB180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200DB201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217 ,218,219,220,221DB222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238 ,239,240,241,242DB 243,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,5 0,52,54,56,58,60,62DB64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108, 110,112,114DB116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150, 152,154,156DB158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192, 194,196,198DB200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234, 236,238,240DB242,244,246,248,250,252,254,255,253,251,249,247,245,243,241,239,237,235, 233,231,229DB227,225,223,221,219,217,215,213,211,209,207,205,203,201,199,197,195,193, 191,189,187DB185,183,181,179,177,175,173,171,169,167,165,163,161,159,157,155,153,151, 149,147,145DB143,141,139,137,135,133,131,129,127,125,123,121,119,117,115,113,111,109, 107,105,103DB101,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,47DB 45,43,41,39,37,35,33,31,29,27,25,23,21,19,17,15,13,11,9,7,5,3,1 TABFANGBO:DB 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,0 DB 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,0DB 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,0DB0,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,255DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2 55,255DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2 55,255DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,2 55,255DB255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255END五.课程设计体会这是实验从电路的设计到程序的编写和调试是我自己独立完成的,这本身就是一个极大的锻炼,经过了无数次的失败最终产生了完美的波形。

相关主题