电子常识
TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。
(1)12位分辩率A/D转换器;
(2)在工作温度范围内10μs转换时间;
(3)11个模拟输入通道;
(4)3路内置自测试方式;
(5)采样率为66kbps;
(6)线性误差±1LSBmax;
(7)有转换结束输出EOC;
(8)具有单、双极性输出;
(9)可编程的MSB或LSB前导;
(10)可编程输出数据长度。
接下来大家一起了解一下关于TLC2543的驱动程序。
#include
#define uint unsigned int
#define uchar unsigned char
sbit clock = P0^0; //输入、输出时钟端
sbit input = P0^1; //数据输入端
sbit output = P0^2; //数据输出端
sbit CS = P0^3; //片选端,负电平有效
void delay(uchar N)
{
while(N--);
}
uint read2543(uchar CON_WORD) //CON_WORD为选择的通道,为0--10
{
uint ad=0;
uchar i;
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);
}
void init_serial() //初始化串口
{
TMOD=0x20; //定时器T1使用工作方式2
TH1=250; //设置初值
TH0=250;
TR1=1; //开始计时
PCON=0x80; //SMOD=1;
SCON=0x50; //工作方式1,波特率9600bit/s,允许接收 TI=1;
}
void main()
{
uint ad=0;
float fVoltage1;
uchar buf[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++;
}
}
}
}
全部0条评论
快来发表一下你的评论吧 !