|
大家好!
最近项目用到了12位AD芯片TLC2543,用的是STC单片机,晶振是22.1184MHz,双倍速后是44.2368MHz。
在调试TLC2543时,发现测试数据不准,而且波动很厉害。例如,测量5V基准电压(REF195高精度参考电压),数据在4.92V到4.98V之间跳动很厉害,不稳定,请教是什么原因?谢谢!
程序如下:
/*******************************************************************/
/*
/* tlc2543驱动程序
/*
/*******************************************************************/
//TLC2543接口定义
//sbit P25 = P2^5; //时钟口线
//sbit P24 = P2^4; //地址输入口线
//sbit P23 = P2^3; //数据输出口线
//sbit CS = P1^3; //片选口线
//sbit EOC = P3^5; //EOC转换完成口线
//由于测量数据为上一次转换的数据,故第一次测量的数据是不准确的
void read2543(uchar port) //port:模拟通道号
{
uchar i;
CS = 0; //设置片选为低. CS下降沿开始转换和传送过程
EA = 0;
ad = 0; //ad:uint全局变量,转换的结果
ah = 0; //ah:uchar全局变量,转换结果的高4位
al = 0; //al:uchar全局变量,转换结果的低8位
delay_10us(1);
P25 = 0; //清I/O时钟
for(i = 0;i < 4;i++)
{
ah <<= 1; //ah装的是12位AD数据的高4位
if(P23) //P23:数据输出口线。在第一个输出数据位之后的每个后续位由后续的CLOCK时钟下降沿输出
ah |= 0x01; //在使用CS时钟的传送,第一个输出数据位发生在CS的下降沿
P24 = (bit)(port & 0x80); //P24:地址输入口线. DATA INPUT在前8个时钟的上升沿被移入器件.在前8个时钟之后,DATA INPUT便无效
P25 = 1; //P25:时钟口线,以产生时钟上升沿
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P25 = 0; //P25:时钟口线
port <<= 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
for(i = 0;i < 8;i++)
{
al <<= 1;
if(P23) //P23:数据输出口线
al |= 0x01;
P24 = 0; //P24:地址输入口线. DATA INPUT在前8个时钟的上升沿被移入器件.在前8个时钟之后,DATA INPUT便无效
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P25 = 1; //P25:时钟口线,以产生时钟上升沿
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P25 = 0; //P25:时钟口线
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
ad = ah;
ad = (ad << 8) | al;
CS = 1;
EA = 1;
}
本贴被 sztfgs 编辑过,最后修改时间:2008-11-25,08:36:55. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|