#include<reg52.h> //头文件
sbit TCL2543_EOC = P1^0; //转换结束标志IO口
sbit TCL2543_CLK = P1^1; //I/O时钟输入
sbit TCL2543_ADIN = P1^2; //串行数据输入端
sbit TCL2543_DOUT = P1^3; //串行数据输出端
sbit TCL2543_CS = P1^4; //片选脚IO
//===================单片机发送数据==================/
void UartSende(unsigned char dat)
{
SBUF=dat; //SBUF是两个串行数据缓冲寄存器,一个是接收一个是发送 8位的
while(!TI);//TI发送标志位,硬件置1,软件清零
TI=0;
}
void UartSendbyte(char *s) //发送字符串
{
while(*s)
{
UartSende(*s++) ;
}
}
void loguint32t(unsigned long log)
{
if(log>999999999) UartSende('0'+log/1000000000%10) ;
if(log>99999999) UartSende('0'+log/100000000%10) ;
if(log>9999999) UartSende('0'+log/10000000%10) ;
if(log>999999) UartSende('0'+log/1000000%10) ;
if(log>99999) UartSende('0'+log/100000%10) ;
if(log>9999) UartSende('0'+log/10000%10) ;
if(log>999) UartSende('0'+log/1000%10) ;
if(log>99) UartSende('0'+log/100%10) ;
if(log>9) UartSende('0'+log/10%10) ;
UartSende('0'+log/1%10) ;
}
//============T2串口初始化9600=========================/
void Timer2_Uart() //串口初始化
{
T2CON = 0x34;
RCAP2H = 0xFF;
RCAP2L = 0xDC;
TH2 = 0xFF;
TL2 = 0xDC;
TR2 = 1;
SCON = 0x50;
// ES = 1;
EA=1;
PS=1;
}
// 其中 port 为通道: 通道0:port = 0x01 通道1:port = 0x02 通道2:port = 0x04 ...
// 片子操作文本地址 http://wenku.baidu.com/link?url=WTp8rj93fYDbqM6kYbynkqTrI5MGQFQGtgk6aDrMMdfcB0K2Q9HIrVOs-SSSCLUMOKLOS31ENJAadBSdrVMHg_YxXPYcXWC7T0rb-rINptW
uint read2543(unsigned char port) //读取TCL2543对应模拟输入口的AD数据,并返回数据
{
unsigned int i; //上电时,EOC=“1”,CS=“1”
uint ad_value=0;
TCL2543_CLK=0;
TCL2543_CS=0; //使能TCL2543片选
TCL2543_EOC=1;
port<<=4;
for(i=0; i<12; i++) //读取12位的模拟量的数字数据
{
if(TCL2543_DOUT) ad_value|=0x01; //前次转换结果的MSB即A11位数据输出到Dout供读数
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; //返回读取的AD值
}
void main()
{
Timer2_Uart();
while(1)
{
zhi= read2543(0); //读出模拟转化后的量
UartSendbyte("zhiInt ") ;
loguint32t(zhiInt) ;
UartSendbyte("\r\n") ;
}
}
TLC2543测得的值是由输入电压和基准电压共同决定的所以对于基准电压同样十分敏感,基准电压稍微变化就会影响到测得的值,
本设计中驱动了数码管显示就导致了电压浮动间接导致了测得的值不稳定,最后只得增加了TL431进行稳压 。