新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 12位A/D轉換器TLC2543

        12位A/D轉換器TLC2543

        作者: 時間:2016-11-13 來源:網絡 收藏
        一、特性

        (1)12位分辨率A/D轉換器

        本文引用地址:http://www.104case.com/article/201611/316092.htm

        (2)在工作溫度范圍內10μs轉換時間;

        (3)11個模擬輸入通道;

        (4)3路內置自測試方式;

        (5)采樣率為66kbps;

        (6)線性誤差1LSB(max)

        (7)有轉換結束(EOC)輸出;

        (8)具有單、雙極性輸出;

        (9)可編程的MSB或LSB前導;

        (10)可編程的輸出數據長度。

        二、引腳圖

        TLC2543的引腳排列如圖所示。其中:

        AIN0~AIN10:模擬輸入端;

        CS:片選端;

        DIN:串行數據輸入端;

        DOUT:A/D轉換結果的三態串行輸出端;

        EOC:轉換結束端;

        CLK:I/O時鐘;

        REF:正基準電壓端;

        REF-:負基準電壓端;

        VCC:電源

        GND:地。

        三、程序

        本程序使用C51編程,每隔250ms采集一次數據,并通過串口發送出去,程序如下:

        #include

        #include

        #include

        #defineucharunsignedchar

        #defineuintunsignedint

        sbitTCL2543_CLK=P3^2;

        sbitTCL2543_ADIN=P3^3;

        sbitTCL2543_DOUT=P3^4;

        sbitTCL2543_CS=P3^5;

        sbitEOC=P1^6;

        //其中port為通道:通道0:port=0x01通道1:port=0x02通道2:port=0x04...

        uintread2543(unsignedcharport)

        {

        unsignedinti;

        uintad_value=0;

        TCL2543_CLK=0;

        TCL2543_CS=0;

        EOC=1;

        port<<=4;

        for(i=0;i<12;i)

        {

        if(TCL2543_DOUT)ad_value|=0x01;

        TCL2543_ADIN=(bit)(port&0x80);

        TCL2543_CLK=1;

        _nop_();

        _nop_();

        _nop_();

        TCL2543_CLK=0;

        _nop_();

        _nop_();

        _nop_();

        port=port<<1;

        ad_value=ad_value<<1;

        }

        TCL2543_CS=1;

        ad_value=ad_value>>1;

        returnad_value;

        }

        voidmain(void)

        {

        unsignedinti=0,a=0,result=0,j=0;

        unsignedchartm_tm=5;

        floattmp;

        tm_tm=40;

        SCON=0x50;//串口方式1,允許接收

        TMOD=0x20;//定時器1定時方式2

        TCON=0x40;//設定時器1開始計數

        TH1=0xFD;//11.0592MHz9600波特率

        //TH1=0xF8;//30MHz,9600Bps=248=0xF8

        TL1=0xE8;

        TI=1;

        TR1=1;//啟動定時器

        //使用定時器。30MHz晶振,0.4us周期,預置50000=20ms,計數50次=1秒

        //使用定時器0。11.0592MHz晶振,1.0us周期,預置50000=50ms,計數20次=1秒

        TH0=60;//(65536-50000)/256;

        TL0=176;//(65536-50000)%256;

        TMOD=0x200x01;//T1T0,工作方式1

        TR0=1;//STARTT0

        while(1)

        {

        if(TF0==1)

        {

        a;

        if(a==tm_tm)//250ms

        {

        a=0;

        result=read2543(1);

        tmp=(result*60.0/4096.0);

        printf("%d,%4.2fn",result,tmp);

        }

        TF0=0;

        TH0=60;

        TL0=176;

        }

        }

        }


        ///////////////////////////////////////////////////////////////////////////////////////////

        ///////////////////////////////////////////////////////////////////////////////////////////////////////

        ////////////////////////////////////////////////////////////////////////////////////////////////////////

        #include

        #defineuintunsignedint
        #defineucharunsignedchar

        //**************************修改硬件時要修改的部分********************************

        sbitclock=P0^0;//輸入、輸出時鐘端
        sbitinput=P0^1;//數據輸入端
        sbitoutput=P0^2;//數據輸出端
        sbitCS=P0^3;//片選端,負電平有效

        voiddelay(ucharN)
        {
        while(N--);
        }

        uintread2543(ucharCON_WORD)//CON_WORD為選擇的通道,為0--10
        {
        uintad=0;
        uchari;
        CON_WORD<<=4;
        clock=0;
        CS=0;
        for(i=0;i<12;i++)
        {
        if(output==1)//讀取DATAOUT
        ad=ad|0x01;
        if(CON_WORD&0x80)//讀取控制字到INPUT
        input=1;
        else
        input=0;
        clock=1;
        delay(10);
        clock=0;
        delay(10);
        CON_WORD<<=1;
        ad<<=1;
        }
        CS=1;
        ad>>=1;
        return(ad);
        }

        voidinit_serial()//初始化串口
        {
        TMOD=0x20;//定時器T1使用工作方式2
        TH1=250;//設置初值
        TH0=250;
        TR1=1;//開始計時
        PCON=0x80;//SMOD=1;
        SCON=0x50;//工作方式1,波特率9600bit/s,允許接收
        TI=1;
        }

        voidmain()
        {
        uintad=0;
        floatfVoltage1;
        ucharbuf[5],i;
        init_serial();
        IE=0;//屏蔽中斷
        while(1)
        {
        ad=read2543(0);
        fVoltage1=(float)ad/0x0fff*5;
        buf[0]=(uchar)fVoltage1;
        buf[0]=buf[0]+0x30;
        buf[1]=.
        buf[2]=(uchar)(fVoltage1*10)%10;
        buf[2]=buf[2]+0x30;
        buf[3]=(uchar)(fVoltage1*100-buf[0]*100)%10;
        buf[3]=buf[3]+0x30;
        buf[4]=(uchar)((fVoltage1*1000)-buf[0]*1000-buf[1]*100)%10;
        buf[4]=buf[4]+0x30;
        i=0;
        while(i<5)
        {
        if(TI==1)
        {
        SBUF=buf[i];
        TI=0;
        i++;
        }
        }
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 遂溪县| 九江市| 察哈| 松江区| 辉南县| 吉木乃县| 城步| 额济纳旗| 保靖县| 景泰县| 鹤壁市| 墨脱县| 三河市| 清河县| 深州市| 白山市| 赣州市| 青冈县| 高青县| 鞍山市| 高台县| 孝感市| 东阳市| 丰县| 侯马市| 鹤庆县| 绩溪县| 通渭县| 大庆市| 旅游| 富阳市| 务川| 上虞市| 弥渡县| 罗城| 汪清县| 泰来县| 福州市| 太康县| 会理县| 白沙|