/* TCL1542,TCL1543 使用子程序
TCL1542,1543 是10位开关电容逐次逼近型AD控制器
11个输入通道
3种内嵌自测模式
总的误差 +-1 LSB MAX
有内部系统时钟
转换成功后有提示。
兼容TCL542
完全CMOS 技术
描述:
有3个输入(片选/CS,时钟I/O CLOCK,地址输入ADDRESS)和一个三态 输出。 一共有4个接口与mcu串行相连,
可高速传输。 采样保持是自动的,当AD转换成功后,转换成功输出(EOC)马上变高,指示转换完成。高阻的输入
有利于AD转换时隔离模拟电路和电源的噪声。
Terminal Functions
ADDRESS -----串行地址输入。
/CS---- 片选。
DATA OUT----
EOC---- 转换完成信号。在第十个i/o CLOCK后由高变低,一直到转换完成并数据准备好要输出。
I/O CLOCK ----输入/输出 时钟。
REF+ ---
REF- ---
A0~A10 ---
多路选择器是先断开后连接类型,以减少输入噪声注入通道内。在第四个I/O 时钟的下降沿模拟量开始取样。
在6个时钟内继续取样。保持到第十个I/O CLOCk 的下降沿。*/
#define AD_CS P15
#define ADDRESS P17
#define DATA_OUT P34
#define EOC P33
#define IO_CLOCK P16
#define led1 XBYTE[0x0100]
/**************Tcl1542 initalization *****/
void ad_ini(void)
{AD_CS=1;
IO_CLOCK=0;
ADDRESS="1";
}
/****************************************
input : The next channel address
output: analog conversion value
***************************************/
uint ad_convertion(uchar i)
{uchar count;
uint j;
AD_CS=False;
j="0";
i=_cror_(i,4); // 循环右移4位
count="10";
do {
ADDRESS=(bit)(i&0x80); // shift in new multiplexer address
i="i"<<1;
IO_CLOCK=True;
if (DATA_OUT) // shift out previous conversion value.
{j=j<<1;
j++;
}
else
{j=j<<1;
}
IO_CLOCK=False;
count--;
}while(count!=0); // ten plus
AD_CS=True;
while(EOC==1); // wait next channel conversion value.
return(j);
}
/************************ main program ************************/
main()
{ uchar ad_reg; // 下一次要转换的通道。
uint data_reg; // 上一次转换的AD值。
ad_ini();
do {
data_reg=ad_convertion(0);
data_reg=ad_convertion(1);
data_reg=ad_convertion(2);
data_reg=ad_convertion(3);
data_reg=ad_convertion(4);
data_reg=ad_convertion(5);
data_reg=ad_convertion(6);
data_reg=ad_convertion(7);
data_reg=ad_convertion(8);
data_reg=ad_convertion(9);
data_reg=ad_convertion(0x0a);
data_reg=ad_convertion(0x0b); // Test mode select address (Vref+ - Vref-)/2
data_reg=ad_convertion(0x0c); // Vref-
data_reg=ad_convertion(0x0d); // Vref+
// collect.volitage=data_reg * 260)/1024
// collect.current=data_reg*300/1024
}while(1);
}
文章评论(0条评论)
登录后参与讨论