找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2802|回复: 3
打印 上一主题 下一主题
收起左侧

关于STC15W单片机内浮点数的处理问题,详情请进

[复制链接]
跳转到指定楼层
楼主
ID:421170 发表于 2020-4-26 19:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近在做GPS定位的问题,涉及到将度分制转换为度的问题。
问题详情:将一个有六位小数的浮点数除以60之后得到其各位的数值

单片机源程序如下:
  1.     int a;
  2.     char latitude[] = {'3','0','3','0','.','0','6','7','4','1','1'};
  3.     a = (((latitude[2]-48)*10+(latitude[3]-48)+(latitude[5]-48)*0.1+(latitude[6]-48)*0.01+(latitude[7]-48)*0.001+(latitude[8]-48)*0.0001+(latitude[9]-48)*0.00001+(latitude[10]-48)*0.000001)/60.000000)*1000000;
  4.         latitude[2] = '.';
  5.         latitude[3] = a/100000+0x30;
  6.         latitude[4]        = a%100000/10000+0x30;
  7.         latitude[5]        = a%10000/1000+0x30;
  8.         latitude[6]        = a%1000/100+0x30;
  9.         latitude[7] = a%100/10+0x30;
  10.         latitude[8]        = a%10+0x30;
  11.         latitude[9]        = '\0';
复制代码
代码中latitude[]数组保存的是接收到的纬度数据,其值为30度30.067411分,转换成度就需要把30.067411除以60,得到0.501123(保留6位小数),再加上30就得到了30.501123度,至此转换完成。
小弟上面贴出的代码在VS code里面可以完成上述功能,但是在单片机里面就无法完成,不知道是哪里出了问题,请求大神指点,跪谢!!!
不知道我把问题表达清楚没有,如果没有的话欢迎大家提出,我补充
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2020-4-27 09:50 | 只看该作者
C不会
不要用浮点型数据,GPS传送过来的数据也是二进制的整型数据,最多也是加标志位而已
30.067411=30067411
直接用整型数据参与运算,小数点如果要显示的话,可以在后期加上去
你可以先去看一下KEIL的浮点数的真实有效精度是多少,它会把超过这个精度长度后面的数据去掉,所以,在编译的时候,在单片机上和在软件上运行是不一样的结果

回复

使用道具 举报

板凳
ID:421170 发表于 2020-4-27 12:23 | 只看该作者
Y_G_G 发表于 2020-4-27 09:50
C不会
不要用浮点型数据,GPS传送过来的数据也是二进制的整型数据,最多也是加标志位而已
30.067411=300674 ...

谢谢您的热心回复!!问题顺利解决了。看来我有点难为这个八位机了,以后再也不碰浮点数了。另外三笠是兵长的🤪
回复

使用道具 举报

地板
ID:494707 发表于 2020-4-27 20:31 | 只看该作者
STC15W可以处理浮点计算。我的一个产品是对输入交流信号进行有效值计算。每秒采集1K次采集。在1ms完成A/D采集,高通滤波计算(浮点运算),1次乘加运算(浮点运算),1次低通滤波运算(浮点运算)。1ms采集六通道输入计算出有效值,CPU占用计算时间好像不到500us。这都在中断中实时完成,主循环还开根号运算。这么说吧STC15W在24M频率下,做2次浮点乘法,1次浮点加法。时间大概12us。STC15W不是想象那么弱鸡。还有就是KEIIL软件算法库优化的好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表