|
发表于 2003-9-2 10:56:38
|
显示全部楼层
A\D子程序
自己改改吧
////////////////////////A/D转换(TLC2543)///////////////////////////////////////
uint getdata(uchar CHN)
{
uchar i,j,k,temp;
uint thedata,dataadd,datasum; ////采集16次,分别存放采集的数据和累加和
EX1=0; ////不要有按键的影响
CHN=CHN<<4; ////12位格式,MSB先导,单极性
AD_IOCLK=0;
AD_CS=1; AD_CS=1;
AD_CS=0; AD_CS=0; ////下降沿并保持低电平,目的:延时以便CS稳定
temp=CHN; ////输入要转换的通道
for(i=0;i<12;i++) ////输入第一次的设置,但不要当前数据
{
if((temp&0x80)!=0){AD_DATIN=1;}
else{AD_DATIN=0;}
AD_IOCLK=1; ////上升沿
AD_IOCLK=0; ////下降沿
temp=temp<<1;
}
////以下程序段应该读取上一次转换结果,同时输入本次设置(未变)
datasum=0;
for(k=0;k<16;k++) ////每个通道采集256次
{ dataadd=0;
for(j=0;j<16;j++)
{
thedata=0; AD_EOC=0;
while(!AD_EOC){} ////等待转换完成此处最好改改
AD_CS=1;
AD_CS=0; AD_CS=0; //下降沿
temp=CHN; //重新输入要转换的通道
for(i=0;i<12;i++)
{
if((temp&0x80)!=0){AD_DATIN=1;}////送数据
else{AD_DATIN=0;}
if(AD_DATOUT){thedata=thedata+1;}
AD_IOCLK=1; ////上升沿
AD_IOCLK=0; ////下降沿
temp=temp<<1;
thedata=thedata<<1;
} //end i
AD_CS=0;AD_CS=1; //上升沿
AD_EOC=0;
thedata=thedata>>1;
dataadd+=thedata;
} //end j
thedata=dataadd>>4;
thedata=thedata&0x0fff; //屏蔽高四位,因为是12位转换结果
datasum+=thedata;
}//end k
thedata=datasum>>4;
thedata=thedata&0x0fff; //256次取平均
EX1=1; AD_CS=1;
return thedata;
}
|
|