[51单片机] 求救,计算出的数和用计算器算的不一样。

[复制链接]
911|5
 楼主| any_014 发表于 2015-5-23 11:56 | 显示全部楼层 |阅读模式
        unsigned long adc_temp1, adc_temp2, adc_temp3, adc_temp4;

        adc_temp1 = 0;                                                                                                                                //±»²âµç×è¸ß¶Ë¼ÆÊýÖµ
        adc_temp1 = adc_value1;
        adc_temp1 = adc_temp1 << 8;
        adc_temp1 |= adc_value2;

        adc_temp4 = 0;                                                                                                                                   //±»²âµç×èµÍ¶Ë¼ÆÊýÖµ(½Ï´ó)
        adc_temp4 = adc_value3;
        adc_temp4 = adc_temp3 << 8;
        adc_temp4 |= adc_value4;
        if(adc_temp4 > 0x4BC0)
                adc_temp4 = 0x4BC0;

        adc_temp2 = (2*adc_temp4 - adc_temp1)*1250/511 - 47437;                                                //¸Ä
        SendData(0x23);                                                                                                                                //adc_temp3±»²âµç×èÖµ£¬ÒÑ·Å´ó100±¶
        SendData(adc_temp2 >> 8);
        SendData(adc_temp2);
----------------------------------------------------------------------------------------
01 2B 2B 4B 6A 23 4F B3 45  6A BE 67 00 B2
串口发送上来的数,adc_temp1 = 0x2b, adc_temp2 = 0x2b, adc_temp3 = 0x4b, adc_temp4 = 0x6a, adc_temp2 = 0x4fb3;
可我按以上参数算出来adc_temp2 = (((0x4b6a * 2) - 0x2b2b) * 1250 / 511) - 47437 =  0x4e0e;
相差很大啊。
编译环境用的uv5.

gx_huang 发表于 2015-5-23 12:59 | 显示全部楼层
看不懂注释的火星文,结果错误,大部分是数据类型错误或者溢出导致的。

评分

参与人数 1威望 +3 收起 理由
any_014 + 3 淡定

查看全部评分

 楼主| any_014 发表于 2015-5-23 14:04 | 显示全部楼层
本帖最后由 any_014 于 2015-5-23 14:10 编辑

        adc_temp4 = 0;                                                                                                                           
        adc_temp4 = (unsigned int)adc_value3;
        adc_temp4 = adc_temp3 << 8;
        adc_temp4 |= adc_value4;
        if(adc_temp4 > 0x4BC0)
                adc_temp4 = 0x4BC0;

        SendData(0x23);                                                                                                                                
        SendData(adc_temp4 >> 8);
        SendData(adc_temp4);
先把第一步2*adc_temp4作为结果发上来吧,不对;
那么吧adc_temp4发上来吧,发现只有低八位...--------------------------------------------------------
把adc_temp1发上来就是正确的...
发adc_temp4就是只有低八位,明明都是生命的unsigned long.
 楼主| any_014 发表于 2015-5-23 14:15 | 显示全部楼层
gx_huang 发表于 2015-5-23 12:59
看不懂注释的火星文,结果错误,大部分是数据类型错误或者溢出导致的。


本帖子中包含更多资源

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

×
 楼主| any_014 发表于 2015-5-23 14:48 | 显示全部楼层
        adc_temp4 = 0;
        adc_temp4 = adc_value3;
        adc_temp4 = adc_temp3 << 8;
        adc_temp4 |= adc_value4;


----------------------------------------------


自己好蠢啊。

评论

发现问题就好,大虾一样有发瓜的时候。  发表于 2015-5-23 22:10
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

132

帖子

3

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