找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1684|回复: 3
收起左侧

请教一个关于单片机C程序if(ADC_3>5.0)判断的问题

[复制链接]
ID:275095 发表于 2018-5-14 17:40 | 显示全部楼层 |阅读模式
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。
这不得其解,求教各位???

评分

参与人数 2黑币 +15 收起 理由
yzw1224 + 5 很给力!
cciejs12345 + 10 赞一个!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 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)),都是表示超出测量范围,测量结果丢弃。
回复

使用道具 举报

ID:330198 发表于 2018-5-15 10:46 | 显示全部楼层
你这个tab[]默认是空的,你在程序里没有写保存上一次的数据语句,所以不会保存的。
回复

使用道具 举报

ID:275095 发表于 2018-5-15 11:45 来自手机 | 显示全部楼层
zhanghyg 发表于 2018-5-15 10:46
你这个tab[]默认是空的,你在程序里没有写保存上一次的数据语句,所以不会保存的。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表