ADC08098通道8位a/d轉換器,ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接接口。ADC0809由一個8路模擬開關、一個地址鎖存與譯碼器、一個A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉換完的數據。
主要特性
1)8路輸入通道,8位A/D轉換器,即分辨率為8位。
2)具有轉換起停控制端。
3)轉換時間為100μs(時鐘為640KHz時),130μs(時鐘為500KHz時)。
5)模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準。
6)工作溫度范圍為-40~+85攝氏度。
7)低功耗,約15mW。
ADC0809芯片為28引腳為雙列直插式封裝,其引腳排列見圖9.8。
ADC0809引腳功能:
·ALE——地址鎖存允許信號。對應ALE上跳沿,A、B、C地址狀態送入地址鎖存器中。
·START——轉換啟動信號。START上升沿時,復位ADC0809;START下降沿時啟動芯片,開始進行A/D轉換;在A/D轉換期間,START應保持低電平。本信號有時簡寫為ST.
·A、B、C——地址線。通道端口選擇線,A為低地址,C為高地址,引腳圖中為ADDA,ADDB和ADDC。其地址狀態與通道對應關系見表9-1。
·CLK——時鐘信號。ADC0809的內部沒有時鐘電路,所需時鐘信號由外界提供,因此有時鐘信號引腳。通常使用頻率為500KHz的時鐘信號
·EOC——轉換結束信號。EOC=0,正在進行轉換;EOC=1,轉換結束。使用中該狀態信號即可作為查詢的狀態標志,又可作為中斷請求信號使用。
·D7~D0——數據輸出線。為三態緩沖輸出形式,可以和單片機的數據線直接相連。D0為最低位,D7為最高
·OE——輸出允許信號。用于控制三態輸出鎖存器向單片機輸出轉換得到的數據。OE=0,輸出數據線呈高阻;OE=1,輸出轉換得到的數據。
·Vcc——5V電源。
GND:地。
ADC0809的地址鎖存與譯碼電路完成對A、B、C3個地址位進行鎖存和譯碼,其譯碼輸出用于通道選擇,其轉換結果通過三態輸出鎖存器存放、輸出,因此可以直接與系統數據總線相連,表9-1為通道選擇表。
表9-1通道選擇表
·Vref——參考電源參考電壓用來與輸入的模擬信號進行比較,作為逐次逼近的基準。其典型值為5V(Vref()=5V,Vref(-)=-5V)
·IN7~IN0——模擬量輸入通道
工作過程
首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復位。下降沿啟動A/D轉換,之后EOC輸出信號變低,指示轉換正在進行。直到A/D轉換完成,EOC變為高電平,指示A/D轉換結束,結果數據已存入鎖存器,這個信號可用作中斷申請。當OE輸入高電平時,輸出三態門打開,轉換結果的數字量輸出到數據總線上。
轉換數據的傳送A/D轉換后得到的數據應及時傳送給單片機進行處理。數據傳送的關鍵問題是如何確認A/D轉換的完成,因為只有確認完成后,才能進行傳送。為此可采用下述三種方式。
(1)定時傳送方式
對于一種A/D轉換器來說,轉換時間作為一項技術指標是已知的和固定的。例如ADC0809轉換時間為128μs,相當于6MHz的MCS-51單片機共64個機器周期。可據此設計一個延時子程序,A/D轉換啟動后即調用此子程序,延遲時間一到,轉換肯定已經完成了,接著就可進行數據傳送。
(2)查詢方式
A/D轉換芯片有表明轉換完成的狀態信號,例如ADC0809的EOC端。因此可以用查詢方式,測試EOC的狀態,即可確認轉換是否完成,并接著進行數據傳送。
(3)中斷方式
把表明轉換完成的狀態信號(EOC)作為中斷請求信號,以中斷方式進行數據傳送。
不管使用上述哪種方式,只要一旦確定轉換完成,即可通過指令進行數據傳送。首先送出口地址并以信號有效時,OE信號即有效,把轉換數據送上數據總線,供單片機接受。
單片機C語言程序設計:ADC0809數模轉換與顯示

/*名稱:ADC0809數模轉換與顯示
說明:ADC0809采樣通道3輸入的
模擬量,轉換后的結果顯示在數碼管上。
*/
#include《reg51.h》
#defineucharunsignedchar
#defineuintunsignedint
//各數字的數碼管段碼(共陰)
ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbitCLK=P1^3;//時鐘信號
sbitST=P1^2;//啟動信號
sbitEOC=P1^1;//轉換結束信號
sbitOE=P1^0;//輸出使能
//延時
voidDelayMS(uintms)
{
uchari;
while(ms--)for(i=0;i《120;i++);
}
//顯示轉換結果
voidDisplay_Result(uchard)
{
P2=0xf7;第4個數碼管顯示個位數
P0=DSY_CODE[d%10];
DelayMS(5);
P2=0xfb;第3個數碼管顯示十位數
P0=DSY_CODE[d%100/10];
DelayMS(5);
P2=0xfd;第2個數碼管顯示百位數
P0=DSY_CODE[d/100];
DelayMS(5);
}
//主程序
voidmain()
{
TMOD=0x02;//T1工作模式2
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
P1=0x3f;//選擇ADC0809的通道3(0111)(P1.4~P1.6)
while(1)
{
ST=0;ST=1;ST=0;//啟動A/D轉換
while(EOC==0);//等待轉換完成
OE=1;
Display_Result(P3);
OE=0;
}
}
//T0定時器中斷給ADC0808提供時鐘信號
voidTimer0_INT()interrupt1
{
CLK=~CLK;
}
評論