|
楼主 |
发表于 2011-3-15 19:58:42
|
显示全部楼层
程序较大,上传AD部分供参考,AD芯片采用 ads8513 ,用CD4052切换了出来4路出来
unsigned int AD_Conver()
{
unsigned char a;
unsigned int ad_value = 0;
datacs=1;datacs=1;
delay();
datacs=0;datacs=0;
busy=0;busy=0;
dataclk=0; dataclk=0;
conv=1; conv=1;
delay();
conv=0; conv=0;
delay();delay();
for(a=0;a<16;a++)
{
dataclk=0;dataclk=0; dataclk=0;dataclk=0;dataclk=0;dataclk=0;dataclk=0;dataclk=0;
dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1;
dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1; dataclk=1;
if (dataout){set_bit(ad_value,15-a); }
dataclk=0;dataclk=0; dataclk=0;dataclk=0;dataclk=0;dataclk=0;dataclk=0;dataclk=0;
}
dataclk=0;dataclk=0;
delay();
datacs=1;
if((ad_value>=0)&&(ad_value<=0x7FFF))ad_value=ad_value+32767;
else ad_value=ad_value-32767;
return ad_value;
}
void main()
{
unsigned int adval1[12],adval2[12],adval3[12],adval4[12]=0;
float ad1,ad2,ad3,ad4;
unsigned int runcount=0;
UartONEInit(2);
Dll_Init();
while(1)
{
CheckRecive();
adsel0=0;
adsel1=0;
delay1(5);
adval1[runcount]=(AD_Conver());
adsel0=1;
adsel1=0;
delay1(5);
adval2[runcount]=(AD_Conver());
adsel0=0;
adsel1=1;
delay1(5);
adval3[runcount]=(AD_Conver());
adsel0=1;
adsel1=1;
delay1(5);
adval4[runcount]=(AD_Conver());
if(runcount>=10)
{
runcount=0;
ad1=0;
ad2=0;
ad3=0;
ad4=0;
for(i=0;i<10;i++)
{
ad1+= (adval1*(float)(10.00/65535.00));
ad2+= (adval2*(float)(10.00/65535.00));
ad3+= (adval3*(float)(10.00/65535.00));
ad4+= (adval4*(float)(10.00/65535.00));
}
tad1=ad1*100;
tad2=ad2*100;
tad3=ad3*100;
tad4=ad4*100;
//for PC TEST
send_UART_one(0XF8);
send_UART_one(tad1);
send_UART_one(tad1>>8);
send_UART_one(tad2);
send_UART_one(tad2>>8);
send_UART_one(tad3);
send_UART_one(tad3>>8);
send_UART_one(tad4);
send_UART_one(tad4>>8);
send_UART_one(0X8F);
}
else runcount++;
} |
|