打印

乘法问题

[复制链接]
1358|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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你这应该是其它地方有问题

建议关掉中断测试

未命名.JPG (45.12 KB )

未命名.JPG

使用特权

评论回复
5
wukunshan| | 2012-6-28 10:35 | 只看该作者
那就问题就出在这里呀:tempFilterCode = FilterDatChannel1(tempCode);//对通道1的内码值进行滤波
//        while(!(CheckWeightStable(tempFilterCode,0)));//对滤波后的值判稳后放到realCode[0]中
去这两个函数里去查找原因吧。

使用特权

评论回复
6
victor3l|  楼主 | 2012-6-29 14:57 | 只看该作者
4# ayb_ice
谢谢大侠帮我,我直接用数字乘和您的结果是一样的,但是当我调用读内码,用这个结果来乘就错了。还有我直接显示读内码的函数的返回值也没有问题。这就变得特别奇怪了????

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

308

帖子

5

粉丝