新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 27. ADC0809A/D轉換器基本應用技術

        27. ADC0809A/D轉換器基本應用技術

        作者: 時間:2016-11-18 來源:網絡 收藏
        1.基本知識
        ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接接口。
        (1).ADC0809的內部邏輯結構
        8路模擬量開關
        8路A/D轉換器
        三態輸出鎖存器
        地址鎖存與譯碼器
        IN0
        IN1
        IN2
        IN3
        IN4
        IN5
        IN6
        IN7
        A
        B
        C
        ALE
        VREF(+)
        VREF(-)
        OE
        EOC
        D0
        D1
        D2
        D3
        D4
        D5
        D6
        D7
        CLK
        ST
        由上圖可知,ADC0809由一個8路模擬開關、一個地址鎖存與譯碼器、一個A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉換完的數據。
        (2).引腳結構
        IN0-IN7:8條模擬量輸入通道
        ADC0809對輸入模擬量要求:信號單極性,電壓范圍是0-5V,若信號太小,必須進行放大;輸入的模擬量在轉換過程中應該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。
        地址輸入和控制線:4條
        ALE為地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,地址鎖存與譯碼器將A,B,C三條地址線的地址信號進行鎖存,經譯碼后被選中的通道的模擬量進轉換器進行轉換。A,B和C為地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。通道選擇表如下表所示。
        C
        B
        A
        選擇的通道
        0
        0
        0
        IN0
        0
        0
        1
        IN1
        0
        1
        0
        IN2
        0
        1
        1
        IN3
        1
        0
        0
        IN4
        1
        0
        1
        IN5
        1
        1
        0
        IN6
        1
        1
        1
        IN7
        數字量輸出及控制線:11條
        ST為轉換啟動信號。當ST上跳沿時,所有內部寄存器清零;下跳沿時,開始進行A/D轉換;在轉換期間,ST應保持低電平。EOC為轉換結束信號。當EOC為高電平時,表明轉換結束;否則,表明正在進行A/D轉換。OE為輸出允許信號,用于控制三條輸出鎖存器向單片機輸出轉換得到的數據。OE=1,輸出轉換得到的數據;OE=0,輸出數據線呈高阻狀態。D7-D0為數字量輸出線。
        CLK為時鐘輸入信號線。因ADC0809的內部沒有時鐘電路,所需時鐘信號必須由外界提供,通常使用頻率為500KHZ,
        VREF(+),VREF(-)為參考電壓輸入。
        2.ADC0809應用說明
        (1).ADC0809內部帶有輸出鎖存器,可以與AT89S51單片機直接相連。
        (2).初始化時,使ST和OE信號全為低電平。
        (3).送要轉換的哪一通道的地址到A,B,C端口上。
        (4).在ST端給出一個至少有100ns寬的正脈沖信號
        (5).是否轉換完畢,我們根據EOC信號來判斷。
        (6).當EOC變為高電平時,這時給OE為高電平,轉換的數據就輸出給單片機了。
        3.實驗任務
        如下圖所示,從ADC0809的通道IN3輸入0-5V之間的模擬量,通過ADC0809轉換成數字量在數碼管上以十進制形成顯示出來。ADC0809的VREF接+5V電壓。
        4.電路原理

        圖1.27.1
        5.系統板上硬件連線
        (1).把“單片機系統板”區域中的P1端口的P1.0-P1.7用8芯排線連接到“動態數碼顯示”區域中的ABCDEFGH端口上,作為數碼管的筆段驅動。
        (2).把“單片機系統板”區域中的P2端口的P2.0-P2.7用8芯排線連接到“動態數碼顯示”區域中的S1S2S3S4S5S6S7S8端口上,作為數碼管的位段選擇。
        (3).把“單片機系統板”區域中的P0端口的P0.0-P0.7用8芯排線連接到“模數轉換模塊”區域中的D0D1D2D3D4D5D6D7端口上,A/D轉換完畢的數據輸入到單片機的P0端口
        (4).把“模數轉換模塊”區域中的VREF端子用導線連接到“電源模塊”區域中的VCC端子上;
        (5).把“模數轉換模塊”區域中的A2A1A0端子用導線連接到“單片機系統”區域中的P3.4P3.5P3.6端子上;
        (6).把“模數轉換模塊”區域中的ST端子用導線連接到“單片機系統”區域中的P3.0端子上;
        (7).把“模數轉換模塊”區域中的OE端子用導線連接到“單片機系統”區域中的P3.1端子上;
        (8).把“模數轉換模塊”區域中的EOC端子用導線連接到“單片機系統”區域中的P3.2端子上;
        (9).把“模數轉換模塊”區域中的CLK端子用導線連接到“分頻模塊”區域中的/4端子上;
        (10).把“分頻模塊”區域中的CKIN端子用導線連接到“單片機系統”區域中的ALE端子上;
        (11).把“模數轉換模塊”區域中的IN3端子用導線連接到“三路可調壓模塊”區域中的VR1端子上;
        6.程序設計內容
        (1).進行A/D轉換時,采用查詢EOC的標志信號來檢測A/D轉換是否完畢,若完畢則把數據通過P0端口讀入,經過數據處理之后在數碼管上顯示。
        (2).進行A/D轉換之前,要啟動轉換的方法:
        ABC=110選擇第三通道
        ST=0,ST=1,ST=0產生啟動轉換的正脈沖信號
        7.匯編源程序
        CHEQU30H
        DPCNTEQU31H
        DPBUFEQU33H
        GDATAEQU32H
        STBITP3.0
        OEBITP3.1
        EOCBITP3.2

        ORG00H
        LJMPSTART
        ORG0BH
        LJMPT0X
        ORG30H
        START:MOVCH,#0BCH
        MOVDPCNT,#00H
        MOVR1,#DPCNT
        MOVR7,#5
        MOVA,#10
        MOVR0,#DPBUF
        LOP:MOV@R0,A
        INCR0
        DJNZR7,LOP
        MOV@R0,#00H
        INCR0
        MOV@R0,#00H
        INCR0
        MOV@R0,#00H
        MOVTMOD,#01H
        MOVTH0,#(65536-4000)/256
        MOVTL0,#(65536-4000)MOD256
        SETBTR0
        SETBET0
        SETBEA
        WT:CLRST
        SETBST
        CLRST
        WAIT:JNBEOC,WAIT
        SETBOE
        MOVGDATA,P0
        CLROE
        MOVA,GDATA
        MOVB,#100
        DIVAB
        MOV33H,A
        MOVA,B
        MOVB,#10
        DIVAB
        MOV34H,A
        MOV35H,B
        SJMPWT
        T0X:NOP
        MOVTH0,#(65536-4000)/256
        MOVTL0,#(65536-4000)MOD256
        MOVDPTR,#DPCD
        MOVA,DPCNT
        ADDA,#DPBUF
        MOVR0,A
        MOVA,@R0
        MOVCA,@A+DPTR
        MOVP1,A
        MOVDPTR,#DPBT
        MOVA,DPCNT
        MOVCA,@A+DPTR
        MOVP2,A
        INCDPCNT
        MOVA,DPCNT
        CJNEA,#8,NEXT
        MOVDPCNT,#00H
        NEXT:RETI
        DPCD:DB3FH,06H,5BH,4FH,66H
        DB6DH,7DH,07H,7FH,6FH,00H
        DPBT:DB0FEH,0FDH,0FBH,0F7H
        DB0EFH,0DFH,0BFH,07FH
        END

        8.C語言源程序
        #include
        unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,
        0xef,0xdf,0xbf,0x7f};
        unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
        0x6d,0x7d,0x07,0x7f,0x6f,0x00};
        unsignedchardispbuf[8]={10,10,10,10,10,0,0,0};
        unsignedchardispcount;

        sbitST=P3^0;
        sbitOE=P3^1;
        sbitEOC=P3^2;
        unsignedcharchannel=0xbc;//IN3
        unsignedchargetdata;

        voidmain(void)
        {
        TMOD=0x01;
        TH0=(65536-4000)/256;
        TL0=(65536-4000)%256;
        TR0=1;
        ET0=1;
        EA=1;

        P3=channel;

        while(1)
        {
        ST=0;
        ST=1;
        ST=0;
        while(EOC==0);
        OE=1;
        getdata=P0;
        OE=0;
        dispbuf[2]=getdata/100;
        getdata=getdata%10;
        dispbuf[1]=getdata/10;
        dispbuf[0]=getdata%10;
        }
        }

        voidt0(void)interrupt1using0
        {
        TH0=(65536-4000)/256;
        TL0=(65536-4000)%256;
        P1=dispcode[dispbuf[dispcount]];
        P2=dispbitcode[dispcount];
        dispcount++;
        if(dispcount==8)
        {
        dispcount=0;
        }
        }


        關鍵詞: ADC0809AD轉換

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 勃利县| 安西县| 凤凰县| 古浪县| 台南市| 清镇市| 宜春市| 隆安县| 靖远县| 韶山市| 师宗县| 桑日县| 沁源县| 慈溪市| 宁波市| 陈巴尔虎旗| 阿巴嘎旗| 平和县| 上饶县| 清水河县| 平乡县| 天津市| 建水县| 永丰县| 称多县| 海南省| 霍林郭勒市| 嘉峪关市| 广安市| 农安县| 盐源县| 汽车| 长汀县| 佛山市| 双江| 福州市| 鹿邑县| 桃源县| 通渭县| 太白县| 华坪县|