(完整word版)单片机课程设计波形发生器报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第一章概述 (2)
第二章设计任务 (3)
第三章硬件设计 (3)
3.1系统主体构造 (3)
3。
2硬件元件概述 (3)
3.3硬件连接 (9)
3.4硬件参数简介 (10)
第四章软件设计 (10)
4.1锯齿波程序设计 (11)
4.2三角波程序设计 (12)
4.3正弦波程序设计 (13)
第五章系统功能描述和功能 (15)
第六章设计心得 (16)
第七章参考文献 (16)
附录 (16)
程序设计 (20)
第一章概述
课程设计是一项重要的实践性教育环节,是学生在完成本专业所有课程学习后必须接受的一项结合本专业方向的、系统的、综合的工程训练。
在教师指导下,运用工程的方法,通过一个较复杂课题的设计练习,可使学生通过综合的系统设计,熟悉设计过程、设计要求、完成的工作内容和具体的设计方法,掌握必须提交的各项工程文件.
课程设计的基本目的是:培养理论联系实际的设计思想,训练综合运用电路设计和有关先修课程的理论,结合生产实际分析和解决工程实际问题的能力,巩固,加深和扩展有关电子类方面的知识.
课程设计的主要任务是运用所学微控制器技术、微机原理等方面的知识,设计出一台以AT89C51为核心的单片机数据采集、通讯或测控系统,完成信息的采集、处理、输出及人机接口电路等部分的软、硬件设计.
多功能波形发生器设计课题需要充分灵活运用编程语言所提供的各种指令语句,巧妙利用软硬件实现以上所要求的功能,在程序逻辑设计上也要求正确,合理的对项目进行分解分块,合理的逻辑设计可以起到事半功倍的效果,是整个项目当中最富有创新性和挑战性的部分。
第二章设计任务
本次设计要求采用单片机和DAC设计波形发生器,具体要求如下:
(1)利用单片机和DAC0832产生三角波、正弦波等波形。
(2)完成DAC与运放的连接,输出可供示波器显示。
(3)用按键改变波型的种类,同时显示波形的代号,波形的幅值与频率。
第三章硬件设计
3。
1 系统主体构造
芯片方面选用AT89C51与DAC0832为主要芯片,根据要求采用键盘选择产生的波形的类型,所以基本电路有键盘电路,数模转换电路。
整体框架图如下所示:
3.2硬件元件概述
本次设计所采用的硬件资源主要有:
3。
2。
1 AT89C51单片机
其引脚图如图所示。
图3.1 AT89C51引脚图
芯片的引脚描述如下:
1、主电源引脚VCC和VSS
VCC——(40脚)接+5V电压;
VSS——(20脚)接地.
2、外接晶体引脚XTAL1和XTAL2
XTAL1(19脚)接外部晶体的一个引脚。
在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。
XTAL2(18脚)接外晶体的另一端.在单片机内部,接至上述振荡器的反相放大器的输出端。
采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮.
3、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP
①RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片
机复位.推荐在此引脚与VSS引脚之间连接一个约8。
2k的下拉电阻,与VCC引脚之间连接一个约10μF的电容,以保证可靠地复位。
VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失.当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM提供备用电源。
②ALE/PROG(30脚):当访问外部存贮器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。
因此,它可用作对外输出的时钟,或用于定时目的。
然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。
ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。
对于EPROM单片机(如8751),在EPROM编程期间,此引脚用于输入编程脉冲(PROG).
③PSEN(29脚):此脚的输出是外部程序存储器的读选通信号。
在从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效.但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。
PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入.
④EA/VPP(引脚):当EA端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对851/8751/80C51)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。
当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。
对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。
对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V 的编程电源(VPP)。
4、输入/输出(I/O)引脚P0、P1、P2、P3(共32根)
①P0口(39脚至32脚):是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。
②P1口(1脚至8脚):是准双向8位I/O口.由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。
P1口能驱动(吸收或输出电流)4个LS型的TTL负载.对8052、8032,P1。
0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。
对EPROM 编程和程序验证时,它接收低8位地址。
③P2口(21脚至28脚):是准双向8位I/O口。
在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。
在对EPROM编程和程序验证期间,它接收高8位地址。
P2可以驱动(吸收或输出电流)4个LS型的TTL负载。
④P3口(10脚至17脚):是准双向8位I/O口,在MCS—51中,这8个引脚还用于专门功能,是复用双功能口。
P3能驱动(吸收或输出电流)4个LS型的TTL负载.作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。
作为第二功能使用时,各引脚的定义如表所示.
值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能.第二功能描述如下:
P3。
0 10 RXD(串行输入口)
P3.1 11 TXD(串行输出口)
P3.2 12 INT0(外部中断0)
P3.3 13 INT1(外部中断1)
P3。
4 14 T0(定时器0外部输入)
P3。
5 15 T1(定时器1外部输入)
P3.6 16 WR(外部数据存储器写脉冲)
P3.7 17 RD(外部数据存储器读脉冲)
3.2.2 D/A转换0832芯片
DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器.DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
其芯片引脚图如图所示,
DAC0832引脚图
引脚功能如下:
D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效.
CS:片选信号,低电平有效。
WR1:写信号1,低电平有效.
XFER:传送控制信号,低电平有效。
WR2:写信号2,低电平有效。
IOUT1、IOUT2:DAC电流输出端。
RFB:是集成在片内的外接运放的反馈电阻。
VREF:基准电压(—10~10V)。
VCC:是源电压(+5~+15V)。
AGND:模拟地NGND:数字地,可与AGND接在一起使用。
3.3 硬件连接
3。
3。
1数模转换电路
数模转换电路采用的是DAC0832芯片。
它是一种使用较多的8位D/A转换器,其转换时间1us,工作电压为+5V到+15V,基准电压-10V到+10V。
由于其内部有两个8位寄存器和一个8位D/A转换器,故可进行两级缓冲操作,使操作有很大的灵活性,本设计采用单缓冲方式.
DAC0832与AT89C51的连接。
单片机P0口与数模转换器的数据口连接,为保证单片机P0口的驱动能力,在P0口加上上拉电阻。
3.3。
2键盘电路
键盘电路是控制部分.通过K1控制产生方波,K2控制产生三角波,K3控制产生正弦波。
分析DAC0832的输出,U=(Vref/2n)*D,由此公式可知,输出波形的幅度与Vref的大小有关,所以我们通过控制Vref的大小来改变波形的幅度,以简化我们的程序.
3。
3.3复位电路与时钟电路
该电路采用上电复位,利用电容充电来实现的,即上电瞬间RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。
由于频率较大时,三角波、正弦波、方波中每一点延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的功率波形,该电路采用12MHZ晶振.原理图如下:
复位电路与
时钟电路
3。
4硬件参数简介
AT89C51单片机采用12MHz时钟,VCC供电电源采用+5v,DAC0832工作电源采用+5v。
第四章软件设计
程序是本设计中的重点.单片机的功能与它的程序有很大关系,本设计中,为实现输出三种波形,要使单片机定时向数模转换器发送数据,数据的不同将实现不同的波形输出。
输出波形原理图如下:
4.1 三角波程序设计
三角波有上升与下降两条边,所以从00H发送到FFH应有相同的间隔,选择每隔02H发送一次数据,即发送00H、02H、04H…FEH、FEH…04H、02H、00H,程序原理图如下:
TRI:JNB P1.0,N3
JNB P1。
2,N4
LJMP TTRI
N3:MOV R7,#00H
LJMP TC2
N4: MOV R7,#02H
LJMP TC2 ;判断其他键是否按下,从三角波转换到其他波形
TTRI: CJNE R7,#01H,TC2
MOV R0,#00H
K20:MOV P0,R0 ;将P0的数据送入数模转换器
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L20:DEC R3
CJNE R3,#255,L20 ;通过P2口控制延时
INC R0
INC R0 ;R0内容加2
CJNE R0,#254,K20 ;实现将00H不断加2,然后送入数模转换器
K21:MOV P0,R0 ;R0的数据送入数模转换器
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L21:DEC R3
CJNE R3,#255,L21
DEC R0
DEC R0 ;R0内容减2
CJNE R0,#0,K21 ;实现将FEH不断减2,然后送入数模转换器
LJMP TRI
TC2:RET
4。
2 正弦波程序设计
正弦波和三角波类似,都有上升与下降两条边,而且正弦波有正负极之分,所以它的数据表比三角波的复杂,其数据表见程序,程序原理如下:
SIN: JNB P1。
0,N5
JNB P1。
1,N6
LJMP SSIN
N5:MOV R7,#00H
LJMP TC3
N6:MOV R7,#01H
LJMP TC3 ;判断是否有其他键按下,并跳转到其他波形
SSIN:CJNE R7,#02H,TC3
MOV R0,#00H
K30: MOV A,R0
MOV DPTR,#TAB ;将TAB的地址送入DPTR
MOVC A,@A+DPTR ;从TAB中取出数据,放入A中
MOV P0,A ;将A中数据送入数模转换器
INC R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L30: DEC R3
CJNE R3,#255,L30 ;K2口控制延时
CJNE R0,#255,K30
LJMP SIN
TC3:RET
TAB:
DB
80H,82H,84H,86H,88H,8AH,8CH,8EH,90H,92H,94H,96H,98H,9AH,9CH,9EH
DB
0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ABH,0ADH,0AFH,0B1H,0B2H,0B4H,
0B6H,0B7H,0B9H,0BAH
DB
0BCH,0BDH,0BFH,0C0H,0C1H,0C3H,0C4H,0C5H,0C6H,0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH
DB 0CEH,0CFH,0D0H,0D1H,0D1H,0D2H,0D2H,0D3H,0D3H,0D4H,0D4H,0D4H,0D4H,0D5H,0D5H,0D5H
DB 0D5H,0D5H,0D5H,0D5H,0D4H,0D4H,0D4H,0D4H,0D3H,0D3H,0D2H,0D2H,0D1H,0D1H,0D0H,0CFH
DB 0CEH,0CEH,0CDH,0CCH,0CBH,0CAH,0C9H,0C8H,0C6H,0C5H,0C4H,0C3H,0C1H,0C0H,0BFH,0BDH
DB 0BCH,0BAH,0B9H,0B7H,0B6H,0B4H,0B2H,0B1H,0AFH,0ADH,0ABH,0AAH,0A8H,0A6H,0A4H,0A2H
DB
0A0H,9EH,9CH,9AH,98H,96H,94H,92H,90H,8EH,8CH,8AH,88H,86H,84H, 82H
DB
80H,7DH,7BH,79H,77H,75H,73H,71H,6FH,6DH,6BH,69H,67H,65H,63H,61H
DB 5FH,5DH,5BH,59H,57H,55H,54H,52H,50H,4EH,4DH,4BH,49H,48H,46H,45H
DB
43H,42H,40H,3FH,3EH,3CH,3BH,3AH,39H,37H,36H,35H,34H,33H,32H,31H
DB
31H,30H,2FH,2EH,2EH,2DH,2DH,2CH,2CH,2BH,2BH,2BH,2BH,2AH,2AH,2AH DB 2AH,2AH,2AH,2AH,2BH,2BH,2BH,2BH,2CH,2CH,2DH,2DH,2EH,2EH,2FH,30H DB
31H,31H,32H,33H,34H,35H,36H,37H,39H,3AH,3BH,3CH,3EH,3FH,40H,42H
DB
43H,45H,46H,48H,49H,4BH,4DH,4EH,50H,52H,54H,55H,57H,59H,5BH,5DH
DB
5FH,61H,63H,65H,67H,69H,6BH,6DH,6FH,71H,73H,75H,77H,79H,7BH,7DH
END
第五章系统功能描述和说明
DAC波形发生器采用AT89C51单片机于DAC0832连接,DAC0832输出的模拟信号经过运算放大器放大,通过示波器显示波形。
本发生器可以实现对输出波形类型,幅值的人工控制。
●通过AT89C51的P0口引出的三个个按键选择相应的输出波形:锯齿波,三角波,正弦波
●通过转动电位器的旋钮,改变输出波形的幅值。
●通过P1口输出三个波形的序号
启动系统后,程序会等待用户按键选择波形,用户可以通过与P1.0,P1.1,P1.2三引脚相连的按键,依次选择输出方波,三角波和正弦波。
在输出波形的同时,LED上会显示相应的波形代号,通过旋转RV1电位器旋钮,改变波形幅值。
第六章设计心得
这两周,在老师的指导下和同学合作之下最终成功地完成了此次设计,通过本次课程设计,我们有了很多收获,同时也发现了一些问题。
通过本次课程设计,使我对单片机的应用有了深刻的了解,让我对单片机编程和和使用单片机解决实际问题的能力有了很大的提高.另外,本次设计小组成员各有分工又紧密联系,每个人都注重分享、讨论,培养了团队意识。
同时,通过本次课程设计也让我发现了一些问题。
例如,对单片机基础知识掌握的不好,是我在本次设计中多次出现问题;其次是对单片机的仿真缺乏了解。
总之,通过这次课程设计使我对单片机语言的理解和掌握上有了很大的进步,以前所了解的单片机语言仅限于一些片面的知识,课本上的内容如果不拿来实践一下的话很快就会忘记,通过这次编程,将这些零零碎碎的知识汇集起来,编写出了一个完整的系统,并且对单片机语言的应用能力有了极大的提高,对于硬件接口的问题也有了深刻的了解.虽然不是最好的方案,但真实地得到锻炼。
第七章参考文献
《新编单片机原理及应用》汪贵平李登峰龚贤武雷旭编著机械工业出版社
附录
硬件电路连接图
波形发生器硬件设计图DAC0832的接线方式
静态显示模块系统仿真效果图
锯齿波波仿真图三角波仿真图
正弦波仿真
程序设计
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: JNB P1.0,D1 ;判断K1
JNB P1.1,D2 ;判断K2
JNB P1.2,D3 ;判断K3
LJMP MAIN ;子程序跳转
D1: MOV R7,#00H
LCALL STW ;跳转到锯齿波波子程序
LJMP MAIN
D2:MOV R7,#01H
LCALL TRI ;跳转到三角波子程序
LJMP MAIN
D3: MOV R7,#02H
LCALL SIN ;跳转到正弦波子程序
LJMP MAIN
;锯齿波子程序
STW: JNB P1.1,N1
JNB P1.2,N2
LJMP SSTW
N1:MOV R7,#01H
LJMP TC1
N2:MOV R7,#02H
LJMP TC1 ;判断其他键是否按下,从锯齿波波转换到其他波形SSTW:CJNE R7,#00H,TC1
MOV R0,#00H
MOV P1,#1FH
K00: MOV P0,R0 ;将P0的数据送入数模转换器
CPL A
MOV R3,A
L00:DEC R3
CJNE R3,#255,L00
INC R0
INC R0 ;R0内容加2
CJNE R0,#254,K00 ;实现将00H不断加2,然后送入数模转换器
LJMP STW
TC1:RET
;三角波子程序
TRI:JNB P1。
0,N3
JNB P1.2,N4
LJMP TTRI
N3:MOV R7,#00H
LJMP TC2
N4:MOV R7,#02H
LJMP TC2 ;判断其他键是否按下,从三角波转换到其他波形TTRI:CJNE R7,#01H,TC2
MOV R0,#00H
MOV P1,#2FH
K20:MOV P0,R0 ;将P0的数据送入数模转换器
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L20: DEC R3
CJNE R3,#255,L20 ;通过P2口控制延时
INC R0
INC R0 ;R0内容加2
CJNE R0,#254,K20 ;实现将00H不断加2,然后送入数模转换器K21:MOV P0,R0 ;R0的数据送入数模转换器
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L21: DEC R3
CJNE R3,#255,L21
DEC R0
DEC R0 ;R0内容减2
CJNE R0,#0,K21 ;实现将FEH不断减2,然后送入数模转换器
LJMP TRI
TC2: RET
;正弦波产生子程序
SIN: JNB P1.0,N5
JNB P1.1,N6
LJMP SSIN
N5: MOV R7,#00H
LJMP TC3
N6: MOV R7,#01H
LJMP TC3 ;判断是否有其他键按下,以从正弦波跳转到其他波形SSIN: CJNE R7,#02H,TC3
MOV R0,#00H
MOV P1,#3FH
K30: MOV A,R0
MOV DPTR,#TAB ;将TAB的地址送入DPTR
MOVC A,@A+DPTR ;从TAB中取出数据,放入A中
MOV P0,A ;将A中数据送入数模转换器
INC R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L30:DEC R3
CJNE R3,#255,L30 ;K2口控制延时
CJNE R0,#255,K30
LJMP SIN
TC3:RET
TAB: DB 80H,82H,84H,86H,88H,8AH,8CH,8EH,90H,92H,94H,96H,98H,9AH,9CH,9EH DB 0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ABH,0ADH,0AFH,0B1H,0B2H,0B4H,0B6H,0B7H,0B9H,0BAH
DB 0BCH,0BDH,0BFH,0C0H,0C1H,0C3H,0C4H,0C5H,0C6H,0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH
DB 0CEH,0CFH,0D0H,0D1H,0D1H,0D2H,0D2H,0D3H,0D3H,0D4H,0D4H,0D4H,0D4H,0D5H,0D5H,0D5H
DB 0D5H,0D5H,0D5H,0D5H,0D4H,0D4H,0D4H,0D4H,0D3H,0D3H,0D2H,0D2H,0D1H,0D1H,0D0H,0CFH
DB 0CEH,0CEH,0CDH,0CCH,0CBH,0CAH,0C9H,0C8H,0C6H,0C5H,0C4H,0C3H,0C1H,0C0H,0BFH,0BDH
DB 0BCH,0BAH,0B9H,0B7H,0B6H,0B4H,0B2H,0B1H,0AFH,0ADH,0ABH,0AAH,0A8H,0A6H,0A4H,0A2H
DB 0A0H,9EH,9CH,9AH,98H,96H,94H,92H,90H,8EH,8CH,8AH,88H,86H,84H, 82H DB 80H,7DH,7BH,79H,77H,75H,73H,71H,6FH,6DH,6BH,69H,67H,65H,63H,61H
DB 5FH,5DH,5BH,59H,57H,55H,54H,52H,50H,4EH,4DH,4BH,49H,48H,46H,45H
DB 43H,42H,40H,3FH,3EH,3CH,3BH,3AH,39H,37H,36H,35H,34H,33H,32H,31H DB 31H,30H,2FH,2EH,2EH,2DH,2DH,2CH,2CH,2BH,2BH,2BH,2BH,2AH,2AH,2AH
DB 2AH,2AH,2AH,2AH,2BH,2BH,2BH,2BH,2CH,2CH,2DH,2DH,2EH,2EH,2FH,30H
DB 31H,31H,32H,33H,34H,35H,36H,37H,39H,3AH,3BH,3CH,3EH,3FH,40H,42H DB 43H,45H,46H,48H,49H,4BH,4DH,4EH,50H,52H,54H,55H,57H,59H,5BH,5DH DB 5FH,61H,63H,65H,67H,69H,6BH,6DH,6FH,71H,73H,75H,77H,79H,7BH,7DH END。