AD转换程序没有问题 Display是P1 仿真后P1连接的二极管显示AD转换的结果是对的 但是用这个值计算 结果是0 比如:ad输入4V P1显示为204 正确 ,用P1的值乘100再除51 应该得400 但是结果为0;这是为什么 一下是代码
/*************************************************
数据比较
*************************************************/
void data_compare()
{ uchar dd;
Display=ReadADCH0();
dd=Display;
height_real=(dd*100)/51;
P0=height_real;
if(height_real<height_min)
{
BELL=1;
MOTOR1=1;
}
/* if(height_real>=height_max)
{
BELL=1;
MOTOR2=1;
}
if(height_real==height_set)
{
BELL=0;
MOTOR1=0;
MOTOR2=0;
}*/
}
/*************************************************
主函数
*************************************************/
void main()
{
init();
while(1)
{
data_compare();
}
}
height_real是int型的 我写P0=height_real;是想看看P0有没有值 这句没有用 主要是height_real比较的那句 一直不对 height_real值一直是0
int dd;
Display=ReadADCH0();
dd=Display;
height_real=(dd*100)/51;
if(height_real<height_min)
{
BELL=1;
MOTOR1=1;
}
改过后还是不行 那个height_real总是0
昨天用浮点数还是不行 同学说51运算浮点数有点问题 就改成整形 结果还不对
这样吧,直接给dd赋值10,然后执行height_real=(dd*100)/51,再看height_real的值是多少
追问这样算的是没问题的 应该是我ad0832程序的问题? 但是Display显示的是没问题的啊 、还有您看那个截图 P1口引脚有灰色的不确定电平是不是有问题
追答这样没问题,那就应该是ReadADCH0();函数的问题了。我很少用这个仿真软件,灰色应该是因为没有加限流电阻的关系,把二极管加个限流电阻试试
追问显示的是没问题 我输入是4v P1显示值204 8位精度ad 值是没问题的 关键就是height_real算出来是0
追答unsigned int dd;
Display=ReadADCH0();
dd=Display;
height_real=(dd*100)/51;当dd = 204的时候,这样计算出来也是0吗?
如果height_real也是 unsigned int类型的
P0=height_real;P0应该是height_real的低8位,也就是0x90啊
对啊 就是0 很是郁闷 就算是204 算出来400 P0也是有值的啊 不可能为0啊 我把输入改成2V 算出来应该是200 不会超 也是0 大神 加一下QQ吧 细谈好吧
本回答被提问者采纳