
学习手记
1. 基于proteus的51单片机开发实例37-DAC0832
1.1. 实验目的
之前我们学习了数模转换芯片DAC0808,今天我们继续学习另一种D/A转换芯片DAC0832。
1.2. 设计思路

图1 DAC0832电路
本例中使用51单片机控制D/A转换芯片DAC0832,通过单片机输出一系列的数字信号到DAC0832,DAC0832把这些数字信号转换成模拟信号,以电流的形式输出。
1.3. 基础知识
1.3.1. DAC0832的引脚说明
下图是DAC0832的引脚图,

图2 DAC0832引脚图
DI0~DI7:8位数据输入端。
ILE:数据锁存允许信号输入端,高电平有效。
CS:片选端,低电平有效。
WR1:输入锁存器写选通信号输入端。
WR2:DAC寄存器写选通信号输入端。
XFER:数据传送控制信号输入端,低电平有效。
IOUT2:模拟电流输出端2.
IOUT1:模拟电流输出端1.
RFB:反馈信号输入端。
VCC:电源端。
VREF:基准电压输入端。
AGND:模拟地。
DGND:数字地。
1.3.2. DAC0832与51单片机的接口
VCC、ILE同时接到+5V,WR1和WR2同时接到单片机的同一个端口P3.6;CS和XFER也同时接到单片机的一个端口P2.7。这种接法使DAC0832相当于一个单片机的外部扩展存储器,其地址为0x7fff。只要采用对片外存储器寻址的方法将数据写入该地址,DAC0832就会自动开始数模转换。
1、选中DAC0832,单片机通过P2.7引脚送出一个低电平到DAC0832的CE和XFER,P3.6引脚送低电平到WR1和WR2。DAC0832就被选中。
2、向DAC0832写入数据,单片机通过P0口送入数据。
3、DAC0832对送来的数字量进行数模转换,并从IOUT1引脚输出信号电流。
DAC0832输出的信号是电流型的,当实际应用中需要的是电压信号。所以电路中需要采用运算放大器来实现电流-电压转换。

1.4. 电路设计
本实例的电路图如图1所示。51单片机的P0口的8位直接连到DAC0832的8位数据输入端口DI0~DI7。DAC0832的输出端I0UT1和IOUT2分别连接运算放大器的2、3引脚。
1.5. 程序设计
本实例程序代码如下。
#include //包含单片机寄存器的头文件#include //包含对片外存储器地址进行操作的头文件sbit CS=P2^7; //将CS位定义为P2.7引脚sbit WR12=P3^6; //将WR12位定义为P3.6引脚void main(void){unsigned char i; CS=0; //输出低电平以选中DAC0832 WR12=0; //输出低电平以选中DAC0832 while(1) { for(i=0;i<255;i++) XBYTE[0x7fff]=i; //将数据i送入片外地址07FFFH ,实际上就是通过P0口将数据送入DAC0832 }}
1.6. 实例仿真
按照前面实例中所介绍的在proteus环境下的仿真方法,对本实例进行仿真,观察仿真结果,验证电路和程序的正确性。
1.7. 总结
从实例36开始,我们已经学习了四种模数和数模转换芯片的电路设计及程序控制。这四种芯片都是模数、数模转换的基础芯片,用意使大家熟悉A/D和D/A的基础知识和电路、程序方法。后续我们将会继续学习相关知识
