|
大家帮我看看这个AD转换程序啊,哪里有问题啊,采集不到温度值啊
uint AD_Convert(void);
uchar temperature_check(flash uint x[],uint n,uint y);
void Delay(ucahr i);
void AD_Dispose(void)
{
uchar i;
uint AD_midValue;
for(i=0;i<4;i++)
{
switch(i)
{
case 0: ADC_T1; //T1通道
AD_midValue=AD_Convert();
T1_Tempt=temperature_check(Temperature_Table,100,AD_midValue);
Delay(100);
break;
case 1: ADC_T3; //T3通道
AD_midValue=AD_Convert();
T3_Tempt=temperature_check(Temperature_Table,100,AD_midValue);
Delay(100);
break;
case 2: ADC_T4; //T4通道
AD_midValue=AD_Convert();
T4_Tempt=temperature_check(Temperature_Table,100,AD_midValue);
Delay(100);
break;
case 3: ADC_T5; //T5通道
AD_midValue=AD_Convert();
T5_Tempt=temperature_check(Temperature_Table,100,AD_midValue);
break;
default: break;
}
//Err_Check();
}
}
uchar temperature_check(flash uint x[],uint n,uint y)
{
uint top=n-1,bot=0,mid=(top+bot)/2;
if(y<155)
{return(99);}
if(y>866)
{return(0);}
do
{
mid=(bot+top)/2;
if(y<=x[mid])
{bot=mid;}
else
{top=mid;}
}
while(!((y<=x[mid])&&(y>x[mid+1])));
return(mid);
}
uint AD_Convert(void)
{
uint AD_value;
ADMUX=0x24; //内部REF关闭,选用外部VREF;左对齐;通道CH4
ADCSRA=0x94; //ADC使能;禁止ADC中断;16分频
ADCSRA|=(1<<ADSC); //ADEN置位,启动ADC
_NOP();
while(!(ADCSRA & (1 << ADIF))); //等待AD转换完成/
AD_value=ADCL;
AD_value|=((uint)ADCH<<8);
ADCSRA &= ~(1 << ADIF); //清标志
ADCSRA &= ~(1 << ADEN); //关闭转换
return(AD_value);
}
头文件定义
flash.h
flash uint Temperature_Table[100]=
{
862,859,852,848,842,835,828,820,814,807,
800,792,784,776,769,761,753,744,734,726,
717,708,699,692,683,675,666,655,647,638,
629,619,609,600,591,582,572,562,554,545,
536,526,516,508,499,490,481,472,463,455,
447,438,429,418,410,402,394,385,378,370,
363,355,347,340,333,326,319,312,305,299,
293,287,280,275,269,263,258,251,246,241,
236,231,225,220,216,211,207,202,197,193,
189,185,180,176,172,169,165,161,156,154
};
大家帮我看看啊 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|