单片机原理及其接口技术课程设计总结报告波形发生器.doc

上传人:文库蛋蛋多 文档编号:4147288 上传时间:2023-04-07 格式:DOC 页数:35 大小:1.19MB
返回 下载 相关 举报
单片机原理及其接口技术课程设计总结报告波形发生器.doc_第1页
第1页 / 共35页
单片机原理及其接口技术课程设计总结报告波形发生器.doc_第2页
第2页 / 共35页
单片机原理及其接口技术课程设计总结报告波形发生器.doc_第3页
第3页 / 共35页
单片机原理及其接口技术课程设计总结报告波形发生器.doc_第4页
第4页 / 共35页
单片机原理及其接口技术课程设计总结报告波形发生器.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《单片机原理及其接口技术课程设计总结报告波形发生器.doc》由会员分享,可在线阅读,更多相关《单片机原理及其接口技术课程设计总结报告波形发生器.doc(35页珍藏版)》请在三一办公上搜索。

1、单片机原理及其接口技术课程设计总结报告课题波形发生器指导教师波形发生器一、设计任务:设计制作一个简易的波形发生器,该波形发生器能产生正弦波、锯齿波、三角波,通过按键控制可以改变输出信号的频率和幅度。二、设计指标:基本要求:1、 能产生正弦波、锯齿波、三角波3种周期波形2、 通过按键P3.0实现选波形3、 通过按键P3.1实现调频加,通过按键P3.2实现调频减4、 通过按键P3.3实现调幅加,通过按键P3.4实现调幅减三、系统框图:各种波形输出运放D/A转换AT89C51开关 四、方案设计与论证:利用韦福WAVE6000系列仿真系统实现。主要利用其中8051,D/A0832,按键等模块实现波形发

2、生器的各类要求。1、 波形选择:像C语言一样,在WAVE6000编程中设置一个变量,利用按键的控制使它在00H-02H之间变化,三种变化分别对应三种波形,利用8051实时地对P3.0口进行扫描,一旦检测到此按键为“0”,就对此变量加1,而后跳到对应的波形子程序上去。2、 三种波形的实现: 正弦波:(1) 给R3赋值#03H,代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度。再低的话由各程序初始化带来的误差会更明显。(2) 正弦波低频表容量R1:100,正弦波高频表容量R1:16, R1为正弦波表容量-1,-1是由算法决定的。程序通过查表描点输出

3、近似连贯的正弦波形。(3) 通过对P3.1P3.4的按键控制可以实现调频、调幅。三角波:(1)给R3赋值#03H,代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度。再低的话由各程序初始化带来的误差会更明显。(2)三角波低频表容量R1:100,三角波高频表容量R1:19, R1为三角波表容量-1,-1是由算法决定的。程序通过查表描点输出近似连贯的三角波形。(3)通过对P3.1P3.4的按键控制可以实现调频、调幅。锯齿波:(1)给R3赋值#06H,代表每调用一次,就输出六个周期后返回,这样在最低频时也能保证每秒钟检测六次按键,确保了键盘的灵敏度。再

4、低的话由各程序初始化带来的误差会更明显。(2)锯齿波低频表容量R1:50,正弦波高频表容量R1:10, R1为锯齿波表容量-1,-1是由算法决定的。程序通过查表描点输出近似连贯的锯齿波形。(3)通过对P3.1P3.4的按键控制可以实现调频、调幅。3、 频率调节: 在21H单元中赋值#13H,频率加、减子程序中变化范围:01H14H(十进制为20),通过按键P3.1和P3.2可以实现频率加和频率减,步长为1.4、 幅度调节:在22H单元中赋值#01H,幅度加、减子程序中变化范围:00H0AH(十进制为10),通过按键P3.3和P3.4可以实现幅度加和幅度减,步长为1.五、系统电路板接线图:接线:

5、(1)由P2.7控制DAC0832的CS端(所以其DPTR的地址最高位应该是0);(2)P3.0、P3.1、P3.2、P3.3、P3.4分别接至开关K1、K2、K3、K4、K5;(3)运放输出端接示波器输入端,示波器另一端接地。六、各个模块程序流程图及程序:1.主程序流程图:开始初始化(设置各变量)主程序调用按键检测子程序YN调用延时子程序主程序:判断选波调用相应波子程序调用频率子程序RET1.主程序:ORG 0000HLJMP MAIN;*0.初始化*电阻选用10k,电容120nf,电容最好不要超过200nfMAIN: MOV 20H,#01H ;a.波形标号,0-2分别为正弦波,三角波,锯

6、齿波 MOV 21H,#13H ;b.频率参数,变化范围1-20 MOV 22H,#01H ;c.幅值参数,变化范围1-10 本程序幅值的变化是通过查表实现的;*主程序*本段的作用是处理各种参数,并判断该执行哪种波形子程序 START: LCALL READKEY ;调用检测按键程序 MOV A,20H ;判断波形 CJNE A,#00H,NEXT0 ;载入波形标号,根据不同的变量值调用不同的子程序 LCALL SIFUNC ;然后再跳回主程序,根据READKEY刷新后的各种参数重新计算数据 LJMP START ;循环 NEXT0: MOV A,20H CJNE A,#01H,NEXT1 L

7、CALL TRFUNC LJMP START NEXT1: LCALL SAFUNC LJMP START 2.按键检测子程序流程图:主程序调用P3.0=0?波形变换控制变量P3.1=0?P3.2=0?P3.3=0?P3.4=0?NYYNNNNYYY频率变化步长加1频率变化步长减1幅度变化步长加1幅度变化步长减1延时子程序延时子程序延时子程序延时子程序延时子程序2.按键检测子程序:READKEY: MOV A,P3 ;判断按键状态 JNB ACC.0,RP10 JNB ACC.1,RP11 JNB ACC.2,RP12 JNB ACC.3,RP13 JNB ACC.4,RP14 DONE:RE

8、T RP10:LJMP PROM0 RP11:LJMP PROM1 RP12:LJMP PROM2 RP13:LJMP PROM3 RP14:LJMP PROM4 PROM0: ;/改变各种参数,调用延时DELAY INC 20H MOV A,20H CJNE A,#03H,DELAY MOV A,#00H MOV 20H,A LJMP DELAY PROM1: INC 21H MOV A,21H CJNE A,#14H,DELAY MOV A,#01H MOV 21H,A LJMP DELAY PROM2: DEC 21H MOV A,21H CJNE A,#00H,DELAY MOV A,

9、#13H MOV 21H,A LJMP DELAYPROM3: INC 22H MOV A,22H CJNE A,#0BH,DELAY MOV 22H,#01H LJMP DELAY PROM4: DEC 22H MOV A,22H CJNE A,#00H,DELAY MOV 22H,#0AH LJMP DELAY3.延时子程序流程图:主程序调用延时1s按键检测子程序延时时间计算步骤:T=8*250*250*2us=1s8:6个NOP指令+DJNZ2字节指令2个250:双层DJNZ循环嵌套,每一层都是十进制250个2us:8051机械周期3.延时子程序:DELAY: ;延时防抖,防止重复输入,

10、执行500000个机器周期,1秒 MOV 30H,#0FAH MOV 31H,#0FAH DLLP: NOP NOP NOP NOP NOP NOP DJNZ 30H,DLLP MOV 30H,#0FAH DJNZ 31H,DLLP LJMP READKEY4.正弦波子程序流程图:主程序调用低频段?Y调用按键程序N高频段程序查相应段表描点输出正弦波形P3.1P3.4=0?Y低频段程序NP3.0=0?NY相应波形子程序4.正弦波子程序:SIFUNC: ;*正弦波MOV A,21HCJNE A,#10,LOOPLOOP:JNC SIFUNC1LJMP SIFUNC2SIFUNC1: MOV R3,

11、#03H ;R3代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度.再低的话由各程序初始化带来的误差会更明显 MOV R1,#100 ;R1为正弦表容量-1,-1是由算法决定的 MOV R2,#00H ;载入表容量 SLP: ;*输出下降段波形,这里SLP中的P只代表查得的值是上升段,输出的波形自然就是下降段 MOV DPTR,#SINE MOV A,R2 ;载入表内指针 MOVC A,A+DPTR ;查表 MOV B,#10 DIV AB MOV 24H,B MOV B,22H MUL AB MOV 25H,A MOV A,22H MOV B,

12、24H MUL AB MOV B,#10 DIV AB ADD A,25H MOV DPTR,#0000H MOVX DPTR,A LCALL FREQ2 ;调用频率函数(在此函数中描点) INC R2 ;调整指针 DJNZ R1,SLP ;判断表是否查完 MOV R1,#80 ;重新初始化,准备反向查表 MOV R2,#00H DJNZ R3,SLP RET SINE: ;低频段表DB 080H,08aH,094H,09dH,0a7H,0b0H,0baH,0c2HDB 0cbH,0d3H,0daH,0e1H,0e7H,0edH,0f2H,0f6HDB 0f9H,0fcH,0feH,0ffH,

13、0ffH,0ffH,0feH,0fcHDB 0f9H,0f6H,0f2H,0edH,0e7H,0e1H,0daH,0d3HDB 0cbH,0c3H,0baH,0b1H,0a7H,09eH,094H,08aHDB 080H,076H,06cH,062H,058H,04fH,046H,03dHDB 034H,02dH,025H,01eH,018H,013H,0eH,09HDB 06H,03H,01H,00H,00H,00H,01H,03HDB 06H,09H,0dH,012H,018H,01eH,025H,02cHDB 034H,03cH,045H,04eH,058H,061H,06bH,075H

14、,07CH SIFUNC2: MOV R3,#03H ;R3代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度.再低的话由各程序初始化带来的误差会更明显 MOV R1,#10H ;R1为正弦表容量-1,-1是由算法决定的 MOV R2,#00H SLP1: MOV DPTR,#SINE1 MOV A,R2 ;载入表内指针 MOVC A,A+DPTR ;查表 MOV B,#10 DIV AB MOV 24H,B MOV B,22H MUL AB MOV 25H,A MOV A,22H MOV B,24H MUL AB MOV B,#10 DIV A

15、B ADD A,25H MOV DPTR,#0000H MOVX DPTR,A LCALL FREQ1 ;调用频率函数(在此函数中描点) INC R2 ;调整指针 DJNZ R1,SLP1 ;判断表是否查完 MOV R1,#10H ;重新初始化,准备反向查表 MOV R2,#00H DJNZ R3,SLP1 RET SINE1: ;高频段表DB 080H,0b0H,0daH,0f6H,0ffH,0f6H,0daH,0b1HDB 080H,04fH,025H,09H,00H,09H,025H,04eH,05FH5.三角波子程序流程图:主程序调用低频段?Y调用按键程序N高频段程序查相应段表描点输出

16、三角波形P3.1P3.4=0?Y低频段程序NP3.0=0?NY相应波形子程序5.三角波子程序:TRFUNC: ;*三角波MOV A,21HCJNE A,#10,LOOP1LOOP1:JNC TRFUNC1LJMP TRFUNC2TRFUNC1: MOV R3,#03H ;R3代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度.再低的话由各程序初始化带来的误差会更明显 MOV R1,#100 ;R1为正弦表容量-1,-1是由算法决定的 MOV R2,#00H TLP: MOV DPTR,#TRAN MOV A,R2 MOVC A,A+DPTR ;

17、MOV B,#10 DIV AB MOV 24H,B MOV B,22H MUL AB MOV 25H,A MOV A,22H MOV B,24H MUL AB MOV B,#10 DIV AB ADD A,25H MOV DPTR,#0000H MOVX DPTR,A ; LCALL FREQ2 ; INC R2 DJNZ R1,TLP MOV R2,#00H MOV R1,#100 DJNZ R3,TLP RET TRAN: ;低频段表 DB 0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,

18、120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,245,240,235,230,225 DB 220,215,210,205,200,195,190,185,180,175,170,165,160,155,150,145,140,135,130,125,120,115,110,105,100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,0TRFUNC2: MOV

19、 R3,#03H ;R3代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度.再低的话由各程序初始化带来的误差会更明显 MOV R1,#19 ;R1为正弦表容量-1,-1是由算法决定的 MOV R2,#00H TLP1: MOV DPTR,#TRAN1 MOV A,R2 MOVC A,A+DPTR ; MOV B,#10 DIV AB MOV 24H,B MOV B,22H MUL AB MOV 25H,A MOV A,22H MOV B,24H MUL AB MOV B,#10 DIV AB ADD A,25H MOV DPTR,#0000H M

20、OVX DPTR,A ; LCALL FREQ1 ; INC R2 DJNZ R1,TLP1 MOV R2,#00H MOV R1,#19 DJNZ R3,TLP1 RET TRAN1: ;高频段表 DB 0,24,48,72,96,120,144,168,192,216,240,216,192,168,144,120,96,72,48,24 6.锯齿波子程序流程图:主程序调用低频段?Y调用按键程序N高频段程序查相应段表描点输出锯齿波形P3.1P3.4=0?Y低频段程序NP3.0=0?NY相应波形子程序6.锯齿波子程序:SAFUNC: ;*锯齿波MOV A,21HCJNE A,#10,LOOP

21、2LOOP2:JNC SAFUNC1LJMP SAFUNC2SAFUNC1: MOV R3,#06H ;R3代表每调用一次,就输出六个周期后返回,这样在最低频时也能保证每秒钟检测六次按键,确保了键盘的灵敏度.再低的话由各程序初始化带来的误差会更明显 MOV R1,#50 ;R1为正弦表容量-1,-1是由算法决定的 MOV A,#00H MOV R2,A ;R2为表内指针,此程序幅值的调整是通过查不同的表实现的 MOV 29H,A ;锯齿波会将R2的表内指针起始地址额外存入29H,这样输出一个周期后就不需要重复计算R2的值了 ALP: ;锯齿波只使用一个循环,输出结束后从29H再载入当初R2的值

22、,其他的波形会逐次将R2改回原来的值,所以只有锯齿波需要额外的29H地址 MOV DPTR,#TRAN ;锯齿波用的是三角波的表 MOV A,R2 MOVC A,A+DPTR MOV B,#10 DIV AB MOV 24H,B MOV B,22H MUL AB MOV 25H,A MOV A,22H MOV B,24H MUL AB MOV B,#10 DIV AB ADD A,25H MOV DPTR,#0000H MOVX DPTR,A LCALL FREQ2 INC R2 DJNZ R1,ALP MOV R1,#50 MOV R2,29H DJNZ R3,ALP RET SAFUNC2

23、: MOV R3,#06H ;R3代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度.再低的话由各程序初始化带来的误差会更明显,仿真证明每次调用波形子程序都会产生一个小毛刺 MOV R1,#10 ;R1为正弦表容量-1,-1是由算法决定的 MOV A,#00H ;|载入表容量=19 MOV R2,A ;|*R2为表内指针,此程序幅值的调整是通过查不同的表实现的,所以改变幅值意味着表指针跳跃19个 MOV 29H,A ;锯齿波会将R2的表内指针起始地址额外存入29H,这样输出一个周期后就不需要重复计算R2的值了 ALP1: ;锯齿波只使用一个循环,

24、输出结束后从29H再载入当初R2的值,其他的波形会逐次将R2改回原来的值,所以只有锯齿波需要额外的29H地址 MOV DPTR,#TRAN1 ;锯齿波用的是三角波的表 MOV A,R2 MOVC A,A+DPTR MOV B,#10 DIV AB MOV 24H,B MOV B,22H MUL AB MOV 25H,A MOV A,22H MOV B,24H MUL AB MOV B,#10 DIV AB ADD A,25H MOV DPTR,#0000H MOVX DPTR,A LCALL FREQ1 INC R2 DJNZ R1,ALP1 MOV R1,#10 MOV R2,29H DJN

25、Z R3,ALP1 RET7.频率子程序流程图:主程序调用高频?Y程序1程序2延时回相应波子程序N7.频率子程序:;*频率函数*FREQ1: MOV R5,21H DELAY1:DJNZ R5,DELAY1RETFREQ2: MOV A,21H SUBB A,#9 MOV B,#10H MUL AB MOV R5,A DELAY2:DJNZ R5,DELAY2RET END七、总实验程序:ORG 0000HLJMP MAIN;*0.初始化*电阻选用10k,电容120nf,电容最好不要超过200nfMAIN: MOV 20H,#01H ;a.波形标号,0-2分别为正弦波,三角波,锯齿波 MOV

26、21H,#13H ;b.频率参数,变化范围1-20 MOV 22H,#01H ;c.幅值参数,变化范围1-10 本程序幅值的变化是通过查表实现的;*主程序*本段的作用是处理各种参数,并判断该执行哪种波形子程序 START: LCALL READKEY ;调用检测按键程序 MOV A,20H ;判断波形 CJNE A,#00H,NEXT0 ;载入波形标号,根据不同的变量值调用不同的子程序 LCALL SIFUNC ;然后再跳回主程序,根据READKEY刷新后的各种参数重新计算数据 LJMP START ;循环 NEXT0: MOV A,20H CJNE A,#01H,NEXT1 LCALL TR

27、FUNC LJMP START NEXT1: LCALL SAFUNC LJMP START ;*按键判断* 本段的作用是检测各键位的状态,并改变相应参数,同时自带延时防抖功能READKEY: MOV A,P3 ;判断按键状态 JNB ACC.0,RP10 JNB ACC.1,RP11 JNB ACC.2,RP12 JNB ACC.3,RP13 JNB ACC.4,RP14 DONE:RET RP10:LJMP PROM0 RP11:LJMP PROM1 RP12:LJMP PROM2 RP13:LJMP PROM3 RP14:LJMP PROM4 PROM0: ;/改变各种参数,调用延时DE

28、LAY INC 20H MOV A,20H CJNE A,#03H,DELAY MOV A,#00H MOV 20H,A LJMP DELAY PROM1: INC 21H MOV A,21H CJNE A,#14H,DELAY MOV A,#01H MOV 21H,A LJMP DELAY PROM2: DEC 21H MOV A,21H CJNE A,#00H,DELAY MOV A,#13H MOV 21H,A LJMP DELAYPROM3: INC 22H MOV A,22H CJNE A,#0BH,DELAY MOV 22H,#01H LJMP DELAY PROM4: DEC 2

29、2H MOV A,22H CJNE A,#00H,DELAY MOV 22H,#0AH LJMP DELAY DELAY: ;延时防抖,防止重复输入,执行500000个机器周期,1秒 MOV 30H,#0FAH MOV 31H,#0FAH DLLP: NOP NOP NOP NOP NOP NOP DJNZ 30H,DLLP MOV 30H,#0FAH DJNZ 31H,DLLP LJMP READKEY;*波形子程序*SIFUNC: ;*正弦波MOV A,21HCJNE A,#10,LOOPLOOP:JNC SIFUNC1LJMP SIFUNC2SIFUNC1: MOV R3,#03H ;R

30、3代表每调用一次,就输出三个周期后返回,这样在最低频时也能保证每秒钟检测三次按键,确保了键盘的灵敏度.再低的话由各程序初始化带来的误差会更明显 MOV R1,#100 ;R1为正弦表容量-1,-1是由算法决定的 MOV R2,#00H ;载入表容量 SLP: ;*输出下降段波形,这里SLP中的P只代表查得的值是上升段,输出的波形自然就是下降段 MOV DPTR,#SINE MOV A,R2 ;载入表内指针 MOVC A,A+DPTR ;查表 MOV B,#10 DIV AB MOV 24H,B MOV B,22H MUL AB MOV 25H,A MOV A,22H MOV B,24H MUL AB MOV B,#10 DIV AB ADD A,25H MOV DPTR,#0000H MOVX DPTR,A LCALL FREQ2 ;调用频率函数(在此函数中描点) INC R2 ;调整指针 DJNZ R1,SLP ;判断表是否查完 MOV R1,#80 ;重新初始化,准备反向查表 MOV R2,#00H DJNZ R3,SLP RET SINE: ;低频段表DB 080H,08aH,094H,09dH,0a7H,0b0H,0baH,0c2HDB 0cbH,0d3H,0daH

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号