TLC2543采集程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//从TLC2543读取采样值,形参port是采样

unsigned int read2543(unsigned char td_num) //对应某通道的A/D转换函数,td_num为通道号{ // 范围为:0~10,对应于0#~10#//

unsigned char addr; // addr为对应某通道号的可编程输入数据//

unsigned char in_8; // in_8为高位或低位的8位A/D转换值//

unsigned char loop; // loop为输出的位数//

unsigned int zz; // zz为A/D转换的中间值和最终值//

bit cc; //89C51的进位位//

cs=1; //令cs=1,即TLC2543处于A/D转换周期//

ad_lp:if(!eoc)goto ad_lp; //在cs=1期间,进行某通道的A/D转换,EOC=1转换结束// addr=td_num*0x10+AD0_D; // td_num为通道号输入参数,addr为对应某通道号的可编程输入数据//

cs=0; //选通TLC2543。开始I/O周期//

loop=8; //MSB的位数共8位//

in_8=0; //初始化清存贮A/D值的存贮单元//

do{

clk=0; //输出一个CLK的低电平到TLC2543//

cc=out; //把TLC2543的DATA OUT输出至89C51的进位位//

if(cc)in_8=(in_8*2)+0x01; //对A/D值的处理,若本次DA TA OUT的电平为1,则in_8值左移一位后再加1//

else in_8=in_8*2; //若本次DATA OUT的电平为0,则in_8值左移一位//

//以下做可编程数据从89C51向TLC2543的输入寄存器同步输出//

if(addr&0x80)in=1; //若addr的最高位为1,则向TLC2543输出值AD_ADDR=1// else in=0; //若addr的最高位为0,则向TLC2543输出值AD_ADDR=0//

addr<<=1; // addr为可编程数据,左移一位,准备下一位的输出//

clk=1; //输出一个CLK电平1给TLC2543//

}while(--loop); //共做位//

zz= in_8*0x10; // in_8左移4位,in_8为A/D数据的高8位//

//以下做低8位数据从TLC2543向89C51输出//

loop=8;

in_8=0;

do{

clk=0;

cc=out;

if(cc)in_8=(in_8*2)+0x01;

else in_8=in_8*2;

if(addr&0x80)in=1;

else in=0;

addr<<=1;

clk=1;

}while(--loop);

//以下是对高8位和低8位数据合并处理为16位数据//

zz+=in_8/0x10;

clk=0;

cs=1; //重新禁止TLC2543,I/O口线处于高阻状态// return(zz);

}

相关文档
最新文档