部落客福利:100G+電子設計學習資源包!
http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect --------------------------------------------------------------------------------------------------------------------------
D/A轉換器
- CS=0、ILE=1時,WR1信号有效時将資料總線上的信号寫入8位輸入鎖存器
- XFER=0時,WR2信号有效時将輸入寄存器的資料轉移到8位DAC寄存器中,輸出量随之改變
工作方式:
- 直通工作方式(如下實驗)
- 當某一根地線或位址譯碼器的輸出線使CS有效(低電平),ILE高電平,同時WR1/XFER/WR2為低電平時,單片機資料線上的資料位元組直通D/A轉換器,被轉換并輸出
- CS、WR1接引腳,通過軟體置低電平
- VCC、VREF、ILE接POWER
- WR2、XFER、RFB、GND*2接GND
- 單緩沖方式
- 僅适用于隻有一路模拟量輸出或幾路模拟量輸出但并不要求同步的系統
- ILE、VCC接POWER
- CS、XFER接單片機引腳,輸入寄存器和DAC寄存器位址都是7FFFH
- WR1、WR2接單片機WR引腳,單片機寫信号
- 當單片機對DAC0832執行一次寫操作,則把一個位元組資料直接寫入DAC寄存器中,輸出的模拟量随之變化
- 雙緩沖方式
- 當多路D/A轉換接口要求同步進行D/A轉換輸出時必須采用雙緩沖方式。DAC0832數字量的輸入鎖存和D/A轉換輸出時分兩步完成的。即CPU的資料總線分時輸出數字量并鎖存在各D/A轉換器的輸入寄存器中;然後CPU對所有D/A轉換器發出控制信号,各輸入寄存器→DAC寄存器,實作同步轉換輸出。
- 每一路模拟輸出量需要一片DAC0832
-
DAC0832(1)的輸出鎖存器位址0DFFFH
DAC0832(2)的輸出鎖存器位址0BFFFH
兩個DAC0832的DAC寄存器位址同為7FFFH
————————————————————————————————————————————
基于DAC0832的三角波發生器實驗
實驗說明:
- 用DAC0832晶片制作一個信号發生器,輸出一個三角波信号
- 采用直通工作方式
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
接線說明:
DAC0832 | DI0-DI7 | 89C51 | P0.0-P0.7 | 8位資料輸入輸出 |
CS | P3.7/RD | 輸入寄存器選擇信号 | ||
WR1 | P3.6/WR | 輸入寄存器寫選通信号 | ||
WR2/XFER/GND*2/ | 其他 | GND | WR2和XFER始終低電平 | |
VREF/VCC/ILE | POWER | ILE始終允許鎖存 |
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit cs = P3 ^ 7;
sbit wr = P3 ^ 6;
void Delay(uchar m)
{
while(m--);
}
void main()
{
uchar k = 0; //設定k的初始值為0
cs = 0; //當CS與WR1端置低電平時做好寫資料的準備,隻要P0口有資料輸出,DAC0832将會轉換成模拟信号
wr = 0;
while(1) //通過輸出值在 0-255和255-0之間變化,通過示波器可以看到模拟信号的情況
{
while(1) //輸出值在0-255之間變化
{
P0 = k++; //輸出k且k+1
Delay(1);
if (k == 0xff) //到達255時結束循環
break;
}
while(1) //輸出值在255-0之間變化
{
P0 = k--; //輸出k且k-1
Delay(1);
if (k == 0x00) //到達0時結束循環
break;
}
}
}