微机原理与接口技术
课程设计报告书
题 目:DAC0832 波形发生器 学院名称:湖南科技大学潇湘学院 班 级:电子信息工程001班 指导老师:欧青立 陈君 宋芳 学 号: 0954030110 姓 名: 赵 翔
目 录
一、 引 言…………………………………………… …………...…......1 二、 设计目的……………………………………………………………….2 三、 原理说明………………………………………………………………..2 四、 硬件设计.........................................................................................4 五、 设计原理………………………………………………………………...6 六、 程序编译.........................................................................................7
1、输出方波子程序…………………………………………………….7 2、输出三角波子程序………………………………………………….8 3、输出锯齿波子程序………………………………………………….8 4、输出正弦波子程序………………………………………………….9 5、输出梯形波的子程序………………………………………………10 6、主程序……………………………………………………………….11 七、 调试方法与结果………………………………………………………...15 八、 心得体会………………………………………………………………...16
一.引言
波形发生器是一种常用的信号源,广泛的应用于电子电路、自动控制系统和教学实验等领域,是现代测试领域内应用最为广泛的通用仪器之一。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源。由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察。测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最为广泛的一类电子仪器。它可以产生多种波形信号,如锯齿波、三角波、梯形波等,因而广泛应用于通信、雷达、导航、宇航等领域。
本次课程设计使用的AT89C51单片机构成的发生器可产生三角波,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。此设计给出了源代码,通过仿真测试,其性能指标达到了设计要求。
二、设计目的
1、掌握DAC0832与PC机的接口方法。 2、掌握D/A转换应用程序设计方法。
三、原理说明
知识简介:
DAC0832当今世界在以电子信是8位分辨率的D/A转换集成芯片,与微处理器完全兼容,这个系列的芯片 以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到了广泛的应用。这类D/A转换器由8位输入锁存器,8位DAC寄存器,8位DA转换电路及转换控制电路构成。
原理框图:
硬件设计
1、DAC0832的引脚及功能:
DAC0832是8分辨率的D/A转换集成芯片。与微处理器兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
应用特性:
·DAC0832是微处理器兼容型D/A转换器,可以充分利用微处理器的控制能力实现对D/A转换的控制。这种芯片有许多控制引脚,可以和微处理器控制线相连,接受微处理器的控制,如ILE、/CS、/WR1、/WR2、/XFER端。
·有两级锁存控制功能,能够实现多通道D/A的同步转换输出。 ·DAC0832内部无参考电压源;须外接参考电压源。
·DAC0832为电流输入型D/A转换器,要获得模拟电压输出时,需要外加转换电路。 DAC0832的引脚图及逻辑结构如下图:
DAC0832结构框图及引脚排列
各引脚功能说明:
D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:数据锁存允许控制信号输入线,高电平有效; CS:片选信号输入线(选通数据锁存器),低电平有效;
WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效; WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化; IOUT2:电流输出端2,其值与IOUT1值之和为一常数;
Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度; Vcc:电源输入端,Vcc的范围为+5V~+15V;
VREF:基准电压输入线,VREF的范围为-10V~+10V;
AGND:模拟信号地 DGND:数字信号地
DAC0832
三种数据输入方式:
(1)双缓冲方式:即数据经过双重缓冲后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。这种方式可在D/A转换的同时,进行下一个数据的输入,可提高转换速率。更为重要的是,这种方式特别适用于要求同时输出多个模拟量的场合。此时,要用多片DAC0832组成模拟输出系统,每片对应一个模拟量。
(2)单缓冲方式:不需要多个模拟量同时输出时,可采用此种方式。此时两个寄存器
之一处于直通状态,输入数据只经过一级缓冲送入D/A转换电路。这种方式只需执行一次写操作,即可完成D/A转换。
(3)直通方式:此时两个寄存器均处于直通状态,因此要将
、
、
和
端
都接数字地,ILE接高电平,使LE1、LE2均为高电平,致使两个锁存寄存器同时处于放行直通状态,数据直接送入D/A转换电路进行D/A转换。这种方式可用于一些不采用微机的控制系统中或其他不须0832缓冲数据的情况。
四、硬件设计
1.8086(8088)CPU
引脚图(如图1):
图1
2.DAC0832(D/A转换器)
D/A0832是8位并行输出电流型D/A转换器,其主要参数:转换时间1us,满量程误差土1LSB,参考电压—10V~+10V,供电电压+5V~+15V,输入逻辑电平与TTL兼容。
引脚图(如图2):
图2
(可编程并行接口)
8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。其内部还有一个控制寄存器,即控制口。通常A口、B口作为输入输出的数据端口。C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。 8255可编程并行接口芯片工作方式说明:
方式0:基本输入/输出方式。适用于三个端口中的任何一个。每一个端口都可以用作输入或输出。输出可被锁存,输入不能锁存。 方式1:选通输入/输出方式。这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。方式2:双向总线方式。只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。
引脚图(如图3):
五、设计原理
D/A转换器产生各种波形的原理:利用D/A转换器输出的模拟量与输入数字量成正
比关系这一特点,将D/A转换器作为微机输出接口,CPU通过程序向D/A转换器输出随时间呈现不同变化规律的数字量,则D/A转换器就可输出各种各样的模拟量,如方波、三角波、锯齿波、正弦波等。
8255A实现波形切换的原理:从8255A的B口读入外接开关的信号,CPU读入不同信号值,从而执行不同的代码,向D/A转换器传送不同的数据,控制D/A转换器输出锯齿波、三角波、方波、正弦波和梯形波。
六、程序编译
(一)编程思路
1、输出方波的子程序
d.取反,延时
c.写初值,延时
(二)编译子程序:.model small
.stack 200h .code start:
MOV DX,213H ;8255A控制口地址 MOV AL,82H OUT DX,AL
MOV DX,200H ;DAC0832的地址
AGAIN: MOV AL,00H
OUT DX,AL ;输出方波为“0” CALL DELAY ;f方波宽度 MOV AL,0FFH
OUT DX,AL ;输出方波为“1”
CALL DELAY ;方波宽度 JMP AGAIN
DELAY:MOV CX,0ffffH;
LOOP $ RET
END start
2、输出三角波子程序
c.写初值,延时 d.初值加1,返回 e.取反,延时
f.取反值减1,返回 g.循环
(二)编译子程序:.model small
.stack 200h .code start:
MOV DX,213H ;8255A MOV AL,82H OUT DX, AL
L: MOV DX,200H ; DAC0832 MOV AL,00H ; M: OUT DX,AL CALL delay INC AL JNZ M
MOV AL,0FFH ; N: OUT DX,AL CALL delay DEC AL JNZ N JMP L
delay:
mov cx,0fffh
day1:
loop day1 ret int 21h END start
3、输出锯齿波子程序
控制口地址 的地址 正向初值 负向初值
d.初值加1,延时
(二)编译子程序:.model small
.stack 200h .code start:
MOV DX,213H ;设置8255A控制口地址 MOV AL,82H
OUT DX,AL ;设置8255A口A为方式0输出 MOV DX,200H ;DAC0832的地址 MOV AL,00H ;输出数据初值 J: OUT DX,AL ;锯齿波输出 INC AL CALL delay JMP J
delay:
mov cx,0fffh
day1:
loop day1 ret
int 21h;
END start
4、输出正弦波子程序 (一)编程思路:
c.地址加1,取值加1
d.启动DAC0832转换器,输出值
8255A,返回
(二)编译子程序:.model small
.stack 200h .code start:
ZXBB: LEA BX,TAB
MOV CX,0001H
ZX2: MOV AL,[BX] ; 将TAB 中的数字一次赋给AL再输出正弦
波
INC BX INC CX
MOV DX,200H OUT DX,AL CALL DELAY
PUSH AX
BG2: MOV DX,211H ;再次读入开关信号,进行比较
IN AL,DX CMP AL,04H JNZ BG2 POP AX CMP CX,256 JNE ZX2 JMP ZXBB
delay:
mov cx,0fffh
day1:
loop day1 ret int 21h end start 5、输出梯形波子程序 (一)编程思路
b.写低电平段,延时,返回 c.写上升段,延时,返回 d.写高电平段,延时,返回 e.写下降段,延时,返回 8255A,返回
(二)编译子程序:.model small
.stack 200h .code start:
TXBB: MOV CX,0100H ;梯形波
MOV AL,00H
LL0: MOV DX,200H ;低电平段 OUT DX,AL CALL DELAY DEC CX JNZ LL0
LL1: INC AL ;上升段 MOV DX, 200H OUT DX,AL CALL DELAY CMP AL,6FH JNE LL1
MOV CX,0100H
LL2: MOV DX, 200H
OUT DX,AL ;高电平段 CALL DELAY DEC CX
JNZ LL2
LL3: DEC AL ;下降段
MOV DX, 200H OUT DX,AL CALL DELAY CMP AL,00H JNZ LL3
MOV DX,211H ;再次读入开关信号,进行
比较
IN AL,DX CMP AL,06H JNZ BG3 JMP TXBB
delay:
mov cx,0fffh
day1:
loop day1 ret int 21h end start 6,输出总程序
程序编译:CODE SEGMENT
ASSUME CS:CODE,DS:CODE,SS:CODE,ES:CODE CT8255 EQU 2138255 的控制寄存器地址 B8255 EQU 211H ;8255 的B口地址 DA0832 EQU 200H
ORG 1200H START:
MOV AL,82H ;初始化8255,B 口输入,工作在方式0 MOV DX,CT8255 OUT DX,AL
BG: MOV DX,B8255
IN AL,DX AND AL,07H
CMP AL,01H ;显示锯齿波
JZ JCBB
CMP AL,02H ;显示三角波
JZ SJBB
CMP AL,03H ;显示方波
JZ FBB
CMP AL,04H ;显示正弦波
JZ ZXBB
CMP AL,05H ;显示梯形波
JZ TXB
JMP BG
TXB:JMP TXBB
JCBB: MOV AL,00H ;锯齿波
AGAIN1: INC AL
MOV DX,DA0832 OUT DX,AL CALL DELAY PUSH AX
MOV DX,B8255
IN AL,DX ;再次读入开关信号,进行比较 CMP AL,01H JNZ BG POP AX JMP AGAIN1
SJBB: MOV AL,00H ;三角波
UP: MOV DX,DA0832 ;启动D/A 转换上升
OUT DX,AL CALL DELAY INC AL
CMP AL,0FFH JNZ UP DEC AL
DOWN: MOV DX,DA0832 ;启动D/A 转换下降
OUT DX,AL CALL DELAY DEC AL CMP AL,00H
JNZ DOWN
MOV DX,B8255 ;再次读入开关信号,进行比较 IN AL,DX CMP AL,02H JNZ BG JMP SJBB
FBB: MOV AL,00H ;方波
FB1: MOV DX,DA0832 ;写00H,输出低电平 OUT DX,AL PUSH CX
MOV CX,00FFH ;低电平延迟 L: CALL DELAY LOOP L POP CX PUSH CX
MOV CX,00FFH MOV AL,0FFH MOV DX,DA0832 OUT DX,AL
L1: CALL DELAY ;高电平延迟
LOOP L1 POP CX
MOV DX,B8255 ;再次读入开关信号,进行比较 IN AL,DX CMP AL,03H JNZ BG1 JMP FBB BG1: JMP BG
ZXBB: LEA BX,TAB MOV CX,0001H
ZX2: MOV AL,[BX] ;将TAB 中的数字一次赋给AL,再输出正弦波 INC BX INC CX
MOV DX,DA0832 OUT DX,AL CALL DELAY1 PUSH AX
MOV DX,B8255 ;再次读入开关信号,进行比较 IN AL,DX CMP AL,04H JNZ BG2 POP AX
CMP CX,256 JNE ZX2 JMP ZXBB BG2: JMP BG
TXBB: MOV CX,0100H ;梯形波 MOV AL,00H
LL0: MOV DX,DA0832 ;低电平段 OUT DX,AL CALL DELAY1 DEC CX JNZ LL0
LL1: INC AL ;上升段 MOV DX,DA0832 OUT DX,AL CALL DELAY1 CMP AL,0FFH JNE LL1
MOV CX,0100H LL2: MOV DX,DA0832
OUT DX,AL ;高电平段 CALL DELAY1 DEC CX JNZ LL2
LL3: DEC AL ;下降段
MOV DX,DA0832 OUT DX,AL CALL DELAY1 CMP AL,00H JNZ LL3
MOV DX,B8255 ;再次读入开关信号,进行比较 IN AL,DX CMP AL,05H JNZ BG3 JMP TXBB BG3: JMP BG
DELAY:CMP AL,0D0H JNB W_END CMP AL,7AH JB W_END MOV CX,180 LOOP $ W_END: RET DELAY1:PUSH CX MOV CX,0090H DEL1: PUSH AX POP AX LOOP DEL1 POP CX RET INT 21h ORG 5000H
TAB DB 80H,83H,86H,89H,8DH,90H,93H,96H DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H
DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H DB 256 DUP(?) CODE ENDS END START
七、调试方法与结果
实验箱接法:
转换器的CS0832接译码器的200h—233h端口,转换器的VOUT端口接信号灯,8255A的8255端口接230h-233h端口,8255A的PB1,PB2,PB3接信号灯
实验结果:1.方 波:信号灯一明一暗
2.三角波:信号灯慢慢亮再慢慢暗再慢慢亮 3.锯齿波:信号灯慢慢亮再暗再慢慢亮 4.正弦波:信号灯慢慢亮再慢慢暗再慢慢亮 5.梯形波:信号灯先暗再慢慢亮,持续,在慢慢暗
八、心得体会
开始的时候由于没有经验,不知如何下手,所以就上网搜了很多关于函数发生器的资料,并翻阅了一些相关书籍。我们小组经过此课程设计我们积累了一点设计经验,最后成功运行出结果的时候也有些小小的成就感。
因篇幅问题不能全部显示,请点此查看更多更全内容