DAC0832内部有两个寄存器,而这两个寄存器的控制信号有五个,输入寄存器由ILE、CS、WR1控制,DAC寄存器由WR2、Xref控制,用软件指令控制这五个控制端可实现三种工作方式:直通方式、单缓冲方式、双缓冲方式。
直通方式是将两个寄存器的五个控制端预先置为有效,两个寄存器都开通只要有数字信号输入就立即进入D/A转换。
单缓冲方式使DAC0832的两个输入寄存器中有一个处于直通方式,另一个处于受控方式,可以将WR2和Xfer相连在接到地上,并把WR1接到89C51的WR上,ILE接高电平,CS接高位地址或地址译码的输出端上。
双缓冲方式把DAC0832的输入寄存器和DAC寄存器都接成受控方式,这种方式可用于多路模拟量要求同时输出的情况下。
三种工作方式区别是:直通方式不需要选通,直接D/A转换;单缓冲方式一次选通;双缓冲方式二次选通。
由于DAC0832是电流输出,为了取得电压输出,需要接上运算放大器LM324。
正确连接硬件电路后编写程序,使用查表方法使单片机控制DAC0832产生一个电压值在0~-5v之间的锯齿波形和正弦波。
CS_0832U13HD0-71234567876541615141317110lsbDI0DI1DI2DI3DI4DI5DI6msbDI7XferCSGNDDAC0832VccILERfbIout1Iout2AGNDWR2WR1Vref20199111231828VCCVOUTU14H1234510121Out1IN-1IN+VDD2IN+3IN+4IN+LM3244Out3Out2OutVEE4IN-3IN-2IN-148R22H7R21H111396R23H10KC8H0.1uFR24H10K3333COUT+12VWR-Vref23RW1H1K1R20H510T1HTL431-12V图3.10 DAC0832转换原理图
四.实验要求
使用试验仪上的DAC0832 D/A转换芯片,产生一个锯齿弦波和正弦波;了解单片机系统中扩展D/A转换的基本方法。
五、实验步骤
1.使用导线把A2区J58接口的/WR引脚与B6区的J37接口的WR1、WR2相连。 2.使用导线把A2区J63接口的A15引脚与B6区的J1接口的/CS、XFER相连。 3.使用导线把B6区J10接口的ILE 、VREF与VCC相连。
4.使用导线把B6区J11接口的IOUT1与C9区的J71接口的B-相连。
5.使用导线把B6区J11接口的IOUT2与C9区的J71接口的B+相连,同时与GND相连。
6.使用导线把B6区J10接口的RFB与C9区的J71接口的BOUT相连。 7.使用导线把C9区J71接口的V+与C9区的J19接口的+12V相连。 8.使用导线把C9区J72接口的V-与C9区的J19接口的-12V相连。
9.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着建立源程序,进行编译,直到编译无误。
10.编译无误后,全速运行程序,用示波器测量LM324的BOUT口的波形。
六、参考程序
锯齿波程序:
DAC0832 EQU 6000H ORG 8000H LJMP START ORG 8100H START:
MOV DPTR,#DAC0832 MOV A,#0H LOOP:
MOVX @DPTR,A ACALL DELAY INC A SJMP LOOP DELAY:
MOV R6,#25 AA:MOV R7,#200 DJNZ R7,$ DJNZ R6,AA RET END 正弦波程序:
;************************************************************************************ ; File: adc0832.asm
;功能:使用DAC输出控制实现正弦波发生器,DAC数据采用查表方法得到。 ;
;***********************************************************************************
DAC0832
ORG
8100H
;定义指向正弦波DAC数据的指针,因为有361个数据,所以用了R0
START:
MOV SP,#60H ORG AJMP
8000H START
EQU
6000H
MOV R0,#0
MOV R1,#0 ;和R1两个寄存器。
LOOP: MOV A,R0
MOV DPTR,# SINE_DATA
CJNE INC
R1,#1,LOW_TAB DPH
;判断指针的高位字节R1是否为1,若是,则DPH加1
LOW_TAB:
MOVC A,@A+DPTR ;取出正弦波DAC数据
MOV DPTR,#DAC0832 MOVX
INC CJNE CJNE
@DPTR,A R0
;启动DA转换 ;指针低8位加1处理
R1,#1,INC_LOW R0,#105,INC_OK
;若已经取完数据并输出,则重新设置指针
MOV R0,#0 MOV R1,#0 SJMP
INC_OK
INC_LOW:
CJNE R0,#0,INC_OK
MOV R1,#1
ACALL
;********************************************** ;通过设置延时时间的长短来改变锯齿波的周期 ;*********************************************
DELAY: MOV R7,#10
;*********************************** ;正弦波数据表,8位DAC的数据 ;***********************************
SINE_DATA: DB 128, 130, 132, 135, 137, 139, 141, 144, 146, 148 DB 150, 152, 155, 157, 159, 161, 163, 165, 168, 170 DB 172, 174, 176, 178, 180, 182, 184, 186, 188, 190
DB 192, 194, 196, 198, 200, 201, 203, 205, 207, 209 DB 210, 212, 214, 215, 217, 219, 220, 222, 223, 225 DB 226, 227, 229, 230, 232, 233, 234, 235, 237, 238 DB 239, 240, 241, 242, 243, 244, 245, 246, 247, 247 DB 248, 249, 250, 250, 251, 252, 252, 253, 253, 254 DB 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 254 DB 254, 254, 253, 253, 252, 252, 251, 250, 250, 249
DJNZ RET
R7,$
AJMP
;延时子程序中不能修改R0、DPTR
INC_OK:
DELAY LOOP
;判断是否要进位
END
DB 248, 247, 247, 246, 245, 244, 243, 242, 241, 240 DB 239, 238, 237, 235, 234, 233, 232, 230, 229, 227 DB 226, 225, 223, 222, 220, 219, 217, 215, 214, 212 DB 210, 209, 207, 205, 203, 201, 200, 198, 196, 194 DB 192, 190, 188, 186, 184, 182, 180, 178, 176, 174 DB 172, 170, 168, 165, 163, 161, 159, 157, 155, 152 DB 150, 148, 146, 144, 141, 139, 137, 135, 132, 130 DB 128, 126, 124, 121, 119, 117, 115, 112, 110, 108 DB 106, 104, 101, 99, 97, 95, 93, 91, 88, 86 DB 84, 82, 80, 78, 76, 74, 72, 70, 68, 66 DB 64, 62, 60, 58, 56, 55, 53, 51, 49, 47 DB 46, 44, 42, 41, 39, 37, 36, 34, 33, 31 DB 30, 29, 27, 26, 24, 23, 22, 21, 19, 18 DB 17, 16, 15, 14, 13, 12, 11, 10, 9, 9 DB 8, 7, 6, 6, 5, 4, 4, 3, 3, 2 DB 2, 2, 1, 1, 1, 0, 0, 0, 0, 0 DB 0, 0, 0, 0, 0, 0, 1, 1, 1, 2 DB 2, 2, 3, 3, 4, 4, 5, 6, 6, 7 DB 8, 9, 9, 10, 11, 12, 13, 14, 15, 16 DB 17, 18, 19, 21, 22, 23, 24, 26, 27, 29 DB 30, 31, 33, 34, 36, 37, 39, 41, 42, 44 DB 46, 47, 49, 51, 53, 55, 56, 58, 60, 62 DB 64, 66, 68, 70, 72, 74, 76, 78, 80, 82 DB 84, 86, 88, 91, 93, 95, 97, 99, 101, 104 DB 106, 108, 110, 112, 115, 117, 119, 121, 124, 126 DB 128
七、思考题
1.分析程序画出输出波形
2.硬件电路不改动的情况下,请编程实现输出波形为三角波。
实验十一 ADC0809并行A/D转换实验
一、实验目的
1.掌握ADC0809模/数转换芯片与单片机的连接方法及ADC0809的典型应用 2.掌握用查询方式、中断方式完成模/数转换程序的编写方法
1714158181920216229252423D0D1D2D3D4D5D6D7STARTALEOEADD-AADD-BADD-CVCCref(+)CLOCKIN0IN1IN2IN3IN4IN5IN6IN7EOCref(-)GND1112102627281234571613二、实验说明及原理
本实验使用ADC0809模数转换器,ADC0809是8通道8位CMOS逐次逼近式A/D转换芯片,片内有模拟量通道选择开关及相应的通道锁存、译码
电路,A/D转换后的数据由三态锁存器输出,由于片内没有时钟需外接时钟信号。下图为该芯片的引脚图。
各引脚功能如下:
IN0~IN7:八路模拟信号输入端。
ADD-A、ADD-B、ADD-C:三位地址码输入端。八路模拟信号转换选择由这三个端口控制。 CLOCK:外部时钟输入端(小于1MHz)。
VCCWRJD10H12345678874LS1474LS14569ENABLEEOCADD-AADD-BADD-CADC0809ref(-)GND171415818192021U10Hlsb2-82-72-62-52-42-32-2msb2-1VCCref(+)1112AIN-0+VrefVCCD0-7CLOCKIN-0IN-1IN-2IN-3IN-4IN-5IN-6IN-7102627281234571613IN0IN1IN2IN3IN4IN5IN6IN73CLKJP12H123456784EOC4.7K46574LS329622STARTALECS_08091274LS323RDJD11H12345678A0-2ADD_AADD_BADD_CADD_A25ADD_B24ADD_C2374LS14AIN0-7 图3.11 ADC0809连接图 D0~D7:数字量输出端。
OE:A/D转换结果输出允许控制端。当OE为高电平时,允许A/D转换结果从D0~D7端输出。 ALE:地址锁存允许信号输入端。八路模拟通道地址由A、B、C输入,在ALE信号有效时将该八路地址锁存。
START:启动A/D转换信号输入端。当START端输入一个正脉冲时,将进行A/D转换。 EOC:A/D转换结束信号输出端。当 A/D转换结束后,EOC输出高电平。 Vref(+)、Vref(-):正负基准电压输入端。基准正电压的典型值为+5V。
三、实验步骤
1.使用导线把A2区J66接口与B4区的J1接口从A0-A3到ADDA-ADDC分别对应相连。 2.使用导线把A2区J63接口的A15引脚与B4区的J1接口的/CS相连。 3.使用导线把A2区J58接口的INTO与B4接口J1接口的/EOC相连。 4.使用导线把A2区J58接口的T1与D4区的J8接口的BUZZ。 5.使用导线把B4区J1接口的+Vref、-Vref分别与VCC、GND相连。 6.使用导线把B4区J44接口的IN0与D2区的J18中间接口相连。
7.B2区J112的1/32分频与B4区J1的CLK连接,短接B2区JP20跳线,X2接晶振。 8.使用短路片把W2电位器与VCC、 GND相连。
9.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着建立源程序,进行编译,直到编译无误。
10.使用仿真器调试。