導航:首頁 > 操作系統 > 51單片機adc0809

51單片機adc0809

發布時間:2022-12-07 01:03:20

1. adc0809轉換的一些問題(與51單片機配合)

1 、地址是人為定義的,在51單片機中P0口是低位地址8位與數據口8位分時復用,所有連接在地址匯流排上的器件,都必須有一個地址區間(地址塊),例如,RAM 62256需要32Kbyte,0000H--7FFFH,就是一個片選信號。
ad轉換器需要一個,經過地址解碼器,解碼後的「區間」,即儲存器的片選信號,解碼器可以分成1,2,4,8塊----,1就是單一地址,必須解碼器;看自己需要選定,選定一塊,如果需要,這一塊還可以用解碼器再次解碼,原則上可以到單個地址,ADC0809需要8個地址,用低位地址線A0,A1,A2三根,和上面所述的片選信號線,完成對該器件8路ad轉換器的選擇,低位地址線可以共用,片選線不能與其它器件共用。
2、外部數據輸入到P0口是需要有相應的器件被選擇,需要讀寫信號線控制的,這里用 /RD 讀信號,它不是單一發出,它與地址線共同完成對器件的讀寫操作。
這個例子中,需要選擇這個ADC器件(片選),還需要選擇由哪一路轉換器輸出(A0,A1,A2)。

data=P0這條指令和data=P1一樣,沒有地址輸出,沒有/RD輸出,就是沒有選擇到需要的器件。

2. ADC0809與51單片機編程怎麼實現

我自己做的最小系統板 自己寫的代碼 所以有得地方不會和其他電路板兼容但是ad0809是兼容的,你看一下#include <reg52.h>
#include <intrins.h>#define uchar unsigned char
#define uint unsigned intuchar table[16] = {0x81,0xB7,0xC2,0x92,0xB4,0x98,0x88,0xB3,0x80,0x90,0xA0,0x8C,0xCE,0x86,0xC8,0xE8};sbit CLK = P3^2; // 時鍾輸入端,最大為500KHz
sbit OE = P3^3; // 輸出允許端 等於1時有效
sbit EOC = P3^4; // 轉化完成標志 高電平表示轉化結束.
sbit ST = P3^5; // 地址鎖存信號.// 控制每位數碼管顯示
sbit L0 = P0^0;
sbit L1 = P0^1;
sbit L2 = P0^2;
sbit L3 = P0^3;
sbit L4 = P0^4;
sbit L5 = P0^5;
sbit K1 = P0^6;uchar a;
bit flag; // 輸出方式的標志位void Delay(uint m)
{
uint i,j;

for (i=0; i<m; i++)
for (j=0; j<150; j++);
}//初始化串口,設置成工作方式0
void InitPort(void)
{
//; 不用設置,初始即為工作方式0
}// 發送一個數據
void SendByte(uchar dat)
{
SBUF = dat;
while (!TI);
TI = 0;
}void InitLed(void)
{
L0 = 0;
L1 = 0;
L2 = 0;
L3 = 0;
L4 = 0;
L5 = 0;
}void DisplayLed(void)
{
uint value; //unsigned long value;
//value = (a*500)/256; if (a < 132)
value = (a*500)/256;
else
{
value = (a*500)/256;
value = value + 256;
} if (!flag)
{
L0 = 0; L1 = 0; L2 = 1;
SendByte(table[value/100]&0x7F);
Delay(5);

L0 = 0; L1 = 1; L2 = 0;
SendByte(table[(value/10)%10]);
Delay(5);

L0 = 1; L1 = 0; L2 = 0;
SendByte(table[value%10]);
Delay(5);
}
else
{
L0 = 0; L1 = 0; L2 = 1;
SendByte(table[a/100]);
Delay(5);

L0 = 0; L1 = 1; L2 = 0;
SendByte(table[(a/10)%10]);
Delay(5);

L0 = 1; L1 = 0; L2 = 0;
SendByte(table[a%10]);
Delay(5);
}
}void ScanKey(void)
{
if (K1 == 0)
{
flag = !flag;
while (!K1);
K1 = 1;
}
}// 初始化AD0809
void InitAD0809(void)
{
ST = 0;
OE = 0;
}// 讀AD0809中的數據
uchar ReadAD0809(void)
{
//EOC = 0;
OE = 0;
ST = 0;
//_nop_();
ST = 1; // 上升沿AD0809內部的寄存器清零
//_nop_();
ST = 0; // 產生一個至少100ns的脈沖,在轉換期間ST為低 while (!EOC)
{
DisplayLed();
ScanKey();
}
OE = 1;
return P1;
}main()
{
//uint i;
TMOD = 0x01;
EA = 1;
TR0 = 1;
ET0 = 1;
flag = 0;
K1 = 1; InitLed();
InitPort();
InitAD0809(); /*for (i=0; i<16; i++)
{
SendByte(table[i]);
Delay(100);
}*/
while (1)
{
a = ReadAD0809();
}
}
void timer0(void) interrupt 1 using 1
{
TH0 = 0xFF;
TL0 = 0x80; CLK = !CLK;
}

3. ADC0809的工作過程

首先輸入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信號即有效,把轉換數據送上數據匯流排,供單片機接受。
常見用途
ADC0809與MCS-51單片機的連接主要涉及兩個問題。一是8路模擬信號通道的選擇,二是A/D轉換完成後轉換數據的傳送。轉換數據的傳送有定時傳送方式、查詢方式、中斷方式這三種方式。A、B、C的值與被選擇的通道之間的關系

4. 51單片機中P0口沒接上拉電阻 能用作ADC0809轉換的數據輸入口不

你好!
51單片機中P0口沒接上拉電阻,可以作ADC0809轉換的數據輸入口,但建議有的話,還是接上上拉電阻為好,驅動能力強,減少誤差,數據更准確。
打字不易,採納哦!

5. ADC0809與51單片機連接,請看下圖

這個電路,是《三匯流排》形式。

P0,又要輸出地址低八位,又要輸入/輸出數據。
P0,忙不過來,需要外接一個 74LS373,鎖存住先輸出的地址低八位。
這就是 74L373 在那裡,所起的作用。

74LS373,輸出的低八位地址,只用到了三位,送到了 ADC0809。
對 0809 寫入,再啟動它,需要的信號,就由單片機和幾個門電路完成。

細節,說起來太麻煩。
看書吧,有時序波形。

6. 在與MCS-51單片機介面時,ADC0809的ALE引腳和START引腳該怎麼接

單片機的ale引腳,通過d觸發器4分頻後接到ad0809的時鍾端作為時鍾信號,單片機的wr和某一個片選地址線經過或非門後接到ad0809的start引腳

7. 關於ADC0809晶元與51單片機的程序

我很崇拜做而論道,感謝他的回答
看得出樓主是採用11.0592M的晶振,9600的波特率,SMOD沒有翻倍(由於12M晶振在9600的波特率也是FDH,為了准確建議用11.0592M的晶振),主要的錯誤在於
1)對於定時器T1、T2都使用的時候,建議寫為或方式,你的串口通訊定義覆蓋了T0的定義
TMOD|=0x20;
//下面就是傳給計算機
2)通訊標志位沒有開啟,應該加上
ES
=
1;
//開串口中斷
建議書寫為
void
main()
{
chushi();
TMOD|=0x20;
//下面就是傳給計算機
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
ES
=
1;
//開串口中斷
while(1)
{
A_D();
SBUF=AD[0];
while(!TI);
TI=0;
SBUF=AD[1];
while(!TI);
TI=0;
delay1ms(1000);
}
}
另外補充點小技巧:串口初始化可以寫在MAIN()的開始,因為只要執行一次就可以了;另外空循環可以不要大括弧,寫為for(j=0;j<125;j++);方便閱讀

8. ADC0809與單片機接線,為什麼ADC0809的地址是7FF8H

ADC0809的地址即通道0的地址。

9. 51單片機和ADC0809

1、將P0口作為ADC0809的輸出口的連介面,傳統51需要加上拉電阻(STC的不用)。

2、P0的數據處理功能和地址功無關,有外部存儲器才復用。
多機通訊的時候不用P0口。

這里傳不了文件了,你到下面這個地址下載個資料,對你有幫助。

http://wenku..com/view/2bed0b186bd97f192279e9ed.html

閱讀全文

與51單片機adc0809相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163