Ⅰ ADC0809與51單片機連接,請看下圖
這個電路,是《三匯流排》形式。
P0,又要輸出地址低八位,又要輸入/輸出數據。
P0,忙不過來,需要外接一個 74LS373,鎖存住先輸出的地址低八位。
這就是 74L373 在那裡,所起的作用。
74LS373,輸出的低八位地址,只用到了三位,送到了 ADC0809。
對 0809 寫入,再啟動它,需要的信號,就由單片機和幾個門電路完成。
細節,說起來太麻煩。
看書吧,有時序波形。
Ⅱ 8051單片機連接adc0809,採用多少的晶振啊
ADC0809對單片棚伍機晶振頻率沒有什麼要求,或者塌羨,確定晶振頻率不需考慮0809。
通常晶振頻率選12M,如果用串口收/發數鏈衫或據,就選11.0592M。
Ⅲ 單片機、ADC0809電壓轉換的問題。
uint choosechanl()
{
if(S1==0)
{
delay(5);
if(S1==0)
{
while(!S1);
NUM++;
if(NUM==7)
{
NUM=0;
}
}
}
return(NUM); // 放在昌兆這里返回,要不平時沒有按鍵時,是沒有返回值的,調用處返回伏迅正的不知道是個什麼值。
}
NUM是個全局變數,這個函數都不需要返回,主程序中直接用 NUM替換掉缺悔R,R是個多餘的。(精簡程序可以考慮下)
中斷只是 定時100的話,可以考慮用自動重載模式,8位的定時器,足夠了。
Ⅳ ADC0809與單片機相連是,為什麼MOVX @DPTR,A就啟動A/D轉換
51單片機與0809連接時,實際上有兩類接法。
一是將0809連接為51的一個外擴存儲器。執行MOVX指令時埠時序恰好能夠滿足0809要求。
啟動A/D轉換,以及模擬通道實際上分別佔用了51的外擴存儲器的一個地址。
另一種是利用51埠來模擬0809時序,指令用MOV,SET bit,和CLR bit等。這種接法軟體上復雜,但不佔用存儲地址,如果外擴存儲器的話可以採用。
不管哪種接法,只要時序滿足,都是可以的。
Ⅳ 單片機外設0809的絕對地址如何確定
0809地址 是根據0809地址解碼引腳 (A、B、宴巧C)和輸出 信號允許端(OE)的接法確定的。一般A、B、C接單片機的A0、A1、A2三個腳 ,以選通IN0~IN7中的一個通晌譽鍵道 。OE接P2.0~P2.7的任一腳 ,且低電平有效。假設OE接在虛賣P2.7(即單片機的A15),那麼地址就是0111 1111 1111 1000 = 7FF8H 。再假設,OE接在P2.0,則地址為1110 1111 1111 1000 = EFF8H
Ⅵ 關於單片機與模數轉換器 A/D0809的問題,在線等
地址的問題主要是和硬體電路的地址解碼相關.因此要參照電路設計才能知道地址范圍.實際工作中的地址安排需要根據整個系統肢斗的外接設備的數量性質綜合考慮.
模擬量給0809後就轉換成8位數字量,51讀入的就是轉換後的數字.參考電壓根據系統最大數值留出富裕量,並考慮精度後設置.0.8-3V的輸入量就如果特別的要求按5V基準設計就可以.5V對應數字量是255,3V對應的就是153.
電壓是3V可能是因為脈沖電壓.建議使用示波器檢查.如果電平確實不對就可能是因為7404的負載有問題,或者本身有問題.
補充:
如果沒有特別的要求按5V基準設計就可以.
5V對應數字量是255,3V對應的歷孝磨就是153.
ADC0809是8位A/D晶元,數字量表示最大為16進制#FFH.也就是10進制的255.5V對應的是255數字量.3V就是 255* 3/5. 每個數字量表慎正示的模擬量為5/255V,約0.02V.也就是說精度(最小解析度)為0.02V
如果想提高精度,可以適當降低基準電壓.例如降為3V,精度就可以達到0.0118V.但是超過3V的就沒有辦法表示了.
Ⅶ 哪個可以詳細解釋一下。單片機與ad0809的程序問題
#include<reg52.h>
#include <intrins.h>///包含了_nop_()//////
#define VREF 5.0//基準電壓///
#define GETLIGHT P2///獲取0809數據口為P2口////
//////////////定義0809控制埠
sbit st_ale=P0^0;
sbit oe=P0^1;
sbit eoc=P0^2;
sbit clk=P0^3;
////肢返鬧//////////////////////////
unsigned char get_val;//用於單片機獲取0809轉化數值/////
int t;//中間變數
float light;///中間變數
void adc0809()
{
st_ale=0;///實際上0809的ST腳和ALE腳相連了//////
st_ale=1;///產生轉化脈沖//////
st_ale=0;
while(eoc==0);
oe=1;//output enable as ture
get_val=GETLIGHT;
oe=0;//output enable as false
light=((get_val*1.0*VREF)/256)*1000;
t=light;
sentmsg2[0]=t/1000+0x30;
sentmsg2[1]=t%1000/100+0x30;
sentmsg2[2]=t%1000%100/10;
}
main()
{
SCON=0x50;/*方式一*/
TMOD=0x01;/*定時器0工作於方式一*//
TH0=(65536-2)/256;////初始化T0的計數寄存器,2uss溢出申請中斷////////
TL0=(65536-2)%256;
st_ale=0;////初始化0809控制埠/////
oe=0;
EA=1;//打開總中斷/////
ET0=1;///打開定時器零中斷////////
TR0=1;//暫不啟動T0////歷罩//
while(1)
{
adc0809();////調用函數獲取0809轉化數值
}
}
void t0(void) interrupt 1///定時世裂器0溢出中斷//////
{
TH0=0xff;
TL0=(65536-2)%256;
clk=~clk;
}
Ⅷ 單片機51和adc0809進行模數轉換,還有顯示(0---255)程序,同時用51產生500kHZ的脈沖給0809,怎麼實現
呵呵 為你解答
單片機51和adc0809進行模數轉換,如何產生500kHZ的脈沖給0809的實現方法:
adc0809的時鍾頻率一般都很高,可選用500KHZ,都是靠89s51單片機的ALE地址鎖存信號
做為adc0809的時鍾,ALE地址鎖存信號的頻率為89s51單片機振盪頻率的1/6,如果單片機
的振盪頻率=3MHZ,則ALE地址鎖存信號的頻率=500KHZ.
如果單片機的振盪頻率=6MHZ,則ALE地址鎖存信號的頻率=1MHZ. 要通過一個2分頻器後,將頻率變為500KHZ.再做adc0809的時鍾使用。
呵呵 靠單片機編程來提供500KHZ時鍾信號很難做到。 顯示電路就自己設計吧,其它的含返判就沒世迅什麼難度了。
記著,別忘給俺加分啊。談改
Ⅸ 單片機擴展一片adc0809晶元,ale作ad時鍾,問單片機時鍾有何要求
單片機晶振只能用6M,因為0809時鍾頻率最大為500K,但實際上用1M沒問題。ALE為6 分頻,即為1M。電壓值=4.9/255*(70H)