久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機ADC0804模數轉換學習

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年07月10日   【字體:

數模轉換器ADC0804與單片機連接的原理圖:


 

這是TX-1C實驗板上的ADC0804和單片機連接的電路原理圖。

左邊的是ADC0804,右邊的是74HC573鎖存器,鎖存器同時又連接了單片機沒畫出。ADC0804的引腳CSAD是片選引腳,因為是低電平有效所以當

0時,我們就可以選中它工作了。RD也是低電平有效,是讀信號的,WR也是低電平有效,當送0時就可以啟動A/D開始轉換了。INTR是轉換結

束引腳,同樣也是低電平有效,當INTR0時,表示轉換結束了。DB0-DB7是轉換后的數字信號輸出端口。AGNDDGND是接地的。CLK R

CLK IN(即194引腳)是用來給ADC0804產生內部時鐘脈沖的(接了一個RC震蕩電路)67端口是模擬信號的輸入端,比如我們滑動電位器就

能使模擬信號發生改變,這樣經過A/D轉換后,輸出的數字信號也就改變了。20引腳是接參考電平的。



 

下面這個程序是用單片機控制ADC0804進行模數轉換,當擰動實驗板上的電位器(也就是一個滑動變阻器)時,數碼管的前三位以十進制方式動態顯示A/D轉換后的數字量。代碼如下:


#include <reg52.h>         
//52系列單片機頭文件
#include <intrins.h>        //因為下面的程序用到了_nop_()函數,因此包含這個頭文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;           //申明U1鎖存器的鎖存端
sbit wela=P2^7;           //申明U2鎖存器的鎖存端
sbit adwr=P3^6;           //定義AD的WR(寫信號)端口
sbit adrd=P3^7;           //定義AD的RD(讀信號)端口
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);        //延時函數聲明
void display(uchar,uchar,uchar)   //顯示函數聲明

/*--------------------------模數轉換核心程序--------------------------------*/
void main()         
{

    uchar a,A1,A2,A3,adval;
    wela=1;            //打開位選鎖存器,這樣就把單片機的P0口與鎖存器連通了
    P0=0x7f;           //這里因為片選 接的是P0口的第7位,P0=0x7f即把第七位置0,片選選定,也即是選定ADC0804工作
    wela=0;                //關閉位選鎖存器
   
    while(1)           //進入死循環不停地做模數轉換
    {
        adwr=1;        /*-----------------------------------------*/  
        _nop_();
        adwr=0;              / *啟動AD轉換(根據時序圖來的)*/
        _nop_();
        adwr=1;       /*-----------------------------------------*/  
        
        for(a=10;a>0;a--)      
        {                                                                                                                                                      
            display(A1,A2,A3);     //兼具顯示和延時的作用,因為轉換需要經過一定的時間,用這個for循環可以起到延時的作用
        }
        
        P1=0xff;                    //讀取P1口之前先給其寫全1
        
        adrd=1;                    //rd置1(根據時序圖可知)
        _nop_();                    //延時一個機器周期(根據時序圖可知)
        adrd=0;                     //rd置0(根據時序圖可知)
        _nop_();                    //延時一個機器周期
        adval=P1;            //A/D轉換后的數據賦給adval
        adrd=1;             //轉換后的數字信號(二進制的信號應該已經譯成了十進制了)讀出(也是根據時序圖可知)
        
        A1=adval/100;      /*-----------------------------------------*/  
        A2=adval%100/10;    /*分離轉換后的十進制數,用來給數碼管顯示*/
        A3=adval%10;       /*-----------------------------------------*/  

     }
}
/*-------------------------------------------------------------------------------*/

void delayms(uint xms)               
{
    uint i,j;
    for(i=xms;i>0;i--)              //i=xms即延時約xms毫秒
        for(j=110;j>0;j--);
}

void display(uchar bai,uchar shi,uchar ge)  //顯示子函數
{
    dula=1;
    P0=table[bai];   
    dula=0;
    P0=0xff;        
    wela=1;            
    P0=0x7e;        
    wela=0;
    delayms(5);        

    dula=1;
    P0=table[shi];
    dula=0;
    P0=0xff;
    wela=1;
    P0=0x7d;
    wela=0;
    delayms(5);

    dula=1;
    P0=table[ge];
    dula=0;
    P0=0xff;
    wela=1;
    P0=0x7b;
    wela=0;
    delayms(5);
}
程序中所說的時序圖如下:

 

 

 


 

 

 

 

從時序圖可知首先要選定片選,即置CS=0,程序中一直讓cs為0,這樣一直選定其工作。對轉換沒有影響。再看WR的時序圖WR先是高-->低-->高,從低-->高這個過程中至少要延時tw(WR)L(ns),程序中用的的_nop()_函數就是延時一個機器周期,本實驗板得機器周期為1000ns遠大于tw(WR)L(ns)。再看RD

RD的時序是高-->低-->高,RD為低后延時tACC后就有數據了,adval=P1;            //A/D轉換后的數據賦給adval
于是再把wR拉高這樣就把數據讀走了。因為INTR是自動變化的,所以不需要人為設定。。(以上個人理解不知道是否正確^-^)



 

呵呵,不同的轉換器時序圖應該也不一樣,程序代碼也有差別,但本質是一樣的。
 

關閉窗口

相關文章

主站蜘蛛池模板: 精品国产99 | 国产三级 | 久久亚洲欧美日韩精品专区 | 久久久一区二区三区 | 91精品国产综合久久久动漫日韩 | 亚洲国产成人av好男人在线观看 | 亚洲精品国产成人 | 天天干夜夜操 | 国产成人免费视频网站视频社区 | 夜夜骑首页 | 国产蜜臀 | 欧美一区二区在线播放 | 成人免费视频网站在线看 | 欧美激情区 | 狠狠操在线 | 欧洲成人午夜免费大片 | 欧美一级在线观看 | www.激情.com| 欧美午夜一区二区三区免费大片 | 日韩中文字幕2019 | 狠狠操狠狠干 | 中文字幕一区二区三区在线视频 | 久久国产精品99久久久大便 | 成人免费观看男女羞羞视频 | 日韩欧美在线视频一区 | 五月婷亚洲 | 亚洲五码在线 | 一区二区三区亚洲 | 亚洲国产精品成人综合久久久 | 在线免费观看亚洲 | 91传媒在线观看 | 99久久精品国产一区二区三区 | 亚洲一二三区在线观看 | 五月天综合网 | 黄色网址在线播放 | 国产精品久久久久久久午夜片 | 日韩在线资源 | 久草视| www.日本在线播放 | 成人免费区一区二区三区 | 亚洲欧美一区二区三区国产精品 |