乘法问题

[复制链接]
2072|5
 楼主| victor3l 发表于 2012-6-27 15:29 | 显示全部楼层 |阅读模式
本帖最后由 victor3l 于 2012-6-27 16:01 编辑

void FirChVotage()
{
        xdata char FirVoltage[5] = {0};
        xdata ulong tempCode = 0;//存储内码值
        xdata ulong tempFilterCode = 0;//对内码值滤波
        xdata uint voltage = 0;//存储电压值

        tempCode = ReadFromCS1180Channel1();//读通道1的内码值
        tempFilterCode = FilterDatChannel1(tempCode);//对通道1的内码值进行滤波
//        while(!(CheckWeightStable(tempFilterCode,0)));//对滤波后的值判稳后放到realCode[0]中
        voltage = (uint)(tempFilterCode*PRECISION);
        ComplexDisp(FirVoltage,voltage,0);
        LoadMutiDat(0x76,FirVoltage,5);
        DispOn();
        
}

voltage = (uint)(tempFilterCode*PRECISION);
这里的乘法到底有什么问题,得到的结果完全不理解。这里PRECISION = 0.149,tempFilterCode 是1342左右,但是这里以乘后就是60429。这是怎么回事?
当我在voltage = (uint)(tempFilterCode*PRECISION);之前把tempFilterCode强行赋值1342,在让他们相乘得到的结果是对的,单独显示滤波后的内码值tempFilterCode也是对的,为什么他们自己相乘结果就错了?
amwrdfe 发表于 2012-6-27 16:06 | 显示全部楼层
0.149是啥,浮点数。
tempFilterCode*PRECISION的结果是啥,浮点数。
uint取低16位。
看看浮点数是如何表示的,应该就明白了。
highgear 发表于 2012-6-28 00:53 | 显示全部楼层
把你的 PRECISION 定义贴出来。
ayb_ice 发表于 2012-6-28 10:24 | 显示全部楼层
本帖最后由 ayb_ice 于 2012-6-28 10:31 编辑

试了一下,没有问题,RT你这应该是其它地方有问题

建议关掉中断测试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
wukunshan 发表于 2012-6-28 10:35 | 显示全部楼层
那就问题就出在这里呀:tempFilterCode = FilterDatChannel1(tempCode);//对通道1的内码值进行滤波
//        while(!(CheckWeightStable(tempFilterCode,0)));//对滤波后的值判稳后放到realCode[0]中
去这两个函数里去查找原因吧。
 楼主| victor3l 发表于 2012-6-29 14:57 | 显示全部楼层
4# ayb_ice
谢谢大侠帮我,我直接用数字乘和您的结果是一样的,但是当我调用读内码,用这个结果来乘就错了。还有我直接显示读内码的函数的返回值也没有问题。这就变得特别奇怪了????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

308

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部