您的位置 首页 知识

12位A/D转换器TLC2543

一、特性(1)12位分辨率A/D转换器;(2)在工作温度范围内10mu;s转换时间;(3)11个模拟输入通道;(4)3路内置自测试方式;(5)采样率…

一、特性

(1)12位分辨率A/D转化器

(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.2f\n”,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++;
}
}
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/272105.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部