基于51单片机TLC2543芯片实现AD转换

#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进行稳压 。

在这里插入图片描述

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值