51單片機(jī)ADC0804模數(shù)轉(zhuǎn)換學(xué)習(xí)
數(shù)模轉(zhuǎn)換器ADC0804與單片機(jī)連接的原理圖:
這TX-1C實(shí)驗(yàn)板上的ADC0804和單片機(jī)連接的電路原理圖。
左邊的是ADC0804,右邊的是74HC573鎖存器,鎖存器同時(shí)又連接了單片機(jī)沒畫出。ADC0804的引腳CSAD是片選引腳,因?yàn)槭堑碗娖接行援?dāng)
送0時(shí),我們就可以選中它工作了。RD也是低電平有效,是讀信號(hào)的,WR也是低電平有效,當(dāng)送0時(shí)就可以啟動(dòng)A/D開始轉(zhuǎn)換了。INTR是轉(zhuǎn)換結(jié)
束引腳,同樣也是低電平有效,當(dāng)INTR為0時(shí),表示轉(zhuǎn)換結(jié)束了。DB0-DB7是轉(zhuǎn)換后的數(shù)字信號(hào)輸出端口。AGND和DGND是接地的。CLK R和
CLK IN(即19和4引腳)是用來給ADC0804產(chǎn)生內(nèi)部時(shí)鐘脈沖的(接了一個(gè)RC震蕩電路)6和7端口是模擬信號(hào)的輸入端,比如我們滑動(dòng)電位器就
能使模擬信號(hào)發(fā)生改變,這樣經(jīng)過A/D轉(zhuǎn)換后,輸出的數(shù)字信號(hào)也就改變了。20引腳是接參考電平的。
下面這個(gè)程序是用單片機(jī)控制ADC0804進(jìn)行模數(shù)轉(zhuǎn)換,當(dāng)擰動(dòng)實(shí)驗(yàn)板上的電位器(也就是一個(gè)滑動(dòng)變阻器)時(shí),數(shù)碼管的前三位以十進(jìn)制方式動(dòng)態(tài)顯示A/D轉(zhuǎn)換后的數(shù)字量。代碼如下:
#include reg52.h> //52系列單片機(jī)頭文件
#include intrins.h> //因?yàn)橄旅娴某绦蛴玫搅薩nop_()函數(shù),因此包含這個(gè)頭文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //申明U1鎖存器的鎖存端
sbit wela=P2^7; //申明U2鎖存器的鎖存端
sbit adwr=P3^6; //定義AD的WR(寫信號(hào))端口
sbit adrd=P3^7; //定義AD的RD(讀信號(hào))端口
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint); //延時(shí)函數(shù)聲明
void display(uchar,uchar,uchar) //顯示函數(shù)聲明
/*--------------------------模數(shù)轉(zhuǎn)換核心程序--------------------------------*/
void main()
{
uchar a,A1,A2,A3,adval;
wela=1; //打開位選鎖存器,這樣就把單片機(jī)的P0口與鎖存器連通了
P0=0x7f; //這里因?yàn)槠x 接的是P0口的第7位,P0=0x7f即把第七位置0,片選選定,也即是選定ADC0804工作
wela=0; //關(guān)閉位選鎖存器
評(píng)論