打印
[51单片机]

求救,计算出的数和用计算器算的不一样。

[复制链接]
675|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
看不懂注释的火星文,结果错误,大部分是数据类型错误或者溢出导致的。


使用特权

评论回复
5
any_014|  楼主 | 2015-5-23 14:48 | 只看该作者
        adc_temp4 = 0;
        adc_temp4 = adc_value3;
        adc_temp4 = adc_temp3 << 8;
        adc_temp4 |= adc_value4;


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


自己好蠢啊。

使用特权

评论回复
评论
NE5532 2015-5-23 22:10 回复TA
发现问题就好,大虾一样有发瓜的时候。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

132

帖子

3

粉丝