一、特性
(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采集一次数据,并通过串口发送出去,程序如下:
#i nclude
#i nclude
#i nclude
#define uchar unsigned char
#define uint unsigned int
sbit TCL2543_CLK =P3^2;
sbit TCL2543_ADIN =P3^3;
sbit TCL2543_DOUT=P3^4;
sbit TCL2543_CS=P3^5;
sbit EOC=P1^6;
// 其中 port 为通道:通道0:port = 0x01通道1:port = 0x02通道2:port = 0x04 ...
uint read2543(unsigned char port)
{
unsigned int i;
uint ad_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;
return ad_value;
}
void main(void)
{
unsigned int i = 0, a=0, result=0, j=0;
unsigned char tm_tm = 5;
float tmp;
tm_tm = 40;
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1 定时方式2
TCON = 0x40; //设定时器1 开始计数
TH1 = 0xFD; //11.0592MHz 9600 波特率
// 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 = 0x20 + 0x01;// T1+T0, 工作方式1
TR0 = 1;// START T0
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;
}
}
}