标题: 请教一个关于单片机C程序if(ADC_3>5.0)判断的问题 [打印本页]

作者: yy005566    时间: 2018-5-14 17:40
标题: 请教一个关于单片机C程序if(ADC_3>5.0)判断的问题
unsigned int table[];             //全局变量
float ADC_3,ADC_4,ADC_5;   //局部变量

for(value=3;value<6;value++)
     {
         switch(value)
         {        
             case 3:ADC_Channal(3); ADC_3=ADC_Convert(); if(ADC_3>5.0)break;table[3]=ADC_3*196.8/30.3;break;
             case 4:ADC_Channal(4); ADC_4=ADC_Convert(); if(ADC_3>5.0)break;table[4]=ADC_4*196.8/30.3;break;   
             case 5:ADC_Channal(5); ADC_5=ADC_Convert(); if(ADC_3>5.0)break;table[5]=ADC_5*196.8;break;      
         }
}

程序目的
通常情况:ADC_Convert()函数(即ADC检测电压)正常,即ADC_3,ADC_4,ADC_5的值会小于5.0
特殊情况:ADC_Convert()函数(即ADC检测电压)不正常,ADC_3,ADC_4,ADC_5的值会大于5.0,
                用一个if(ADC_3>5.0)来判断,当大于5.0时就跳出,即table[3]保存应该是上次的值,
                但发现,符合if()判断时,table[]的值会变为0。
这不得其解,求教各位???

作者: wulin    时间: 2018-5-15 09:27
当一个无符号字符型数据a=0;a--;那么a的值就是0xff。所以用一个if(ADC_3>5.0)来判断,当大于5.0时就可以理解为if((ADC_3>5.0)||(ADC_3<0)),都是表示超出测量范围,测量结果丢弃。
作者: zhanghyg    时间: 2018-5-15 10:46
你这个tab[]默认是空的,你在程序里没有写保存上一次的数据语句,所以不会保存的。
作者: yy005566    时间: 2018-5-15 11:45
zhanghyg 发表于 2018-5-15 10:46
你这个tab[]默认是空的,你在程序里没有写保存上一次的数据语句,所以不会保存的。

如果想实现不满足要求,就保存上次的值,改如何写?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1