文号
t2354
阅读
4501
回复
4
收藏
3
浮点数的存储格式和运算一问!
2006/10/21
IP:四川

如题!

现在需要将A/D转换器过来的12位数据跟0.0625这个小数相乘得出一个温度数值

但不知道小数在单片机里面的存储格式和运算方式啊郁闷!(用51单片机)

另外,51单片机的指令只可以处理8位整数,但A/D的数据位12位,也就是要分成两个字节来存储。他被分成了两个字节后我如何运算啊?

[em06][em06][em06]
4
20年3个月前IP:未同步
13781
1楼

定标方法可以使用一下.数据采入后到数据输出前都以放大需要的倍数存储,这样就可以以定点方式使用存储,可以避免浮点运算.

浮点表示就是以底数和指数方式分两部分表示,按照数制的定义,

十进制表示数:a(n)*10^n+...+a(1)*10^1+a(0)*10^0+a(-1)*10^(-1)+...+a(-m)*10^(-m)

二进制表示数:a(n)*2^n+...+a(1)*2^1+a(0)*2^0+a(-1)*2^(-1)+...+a(-m)*2^(-m)

这样就可以知道浮点表示为:

十进制浮点:b*10^n (0<b<10)这个\"10\"是十进制的数

二进制浮点:b*2^n (0<b<10)这个\"10\"是二进制的数

引用
评论
20年3个月前IP:未同步
13782
2楼

分成两个字节后就分两部分计算,不过要注意进位和借位.反正以个位对齐就好了。

引用
评论
20年3个月前IP:未同步
13783
3楼
单片机内一般不提倡用浮点数,2个字节就是1个字。要是汇编你自个处理字的4则运算吧,要是c,就用int类型
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的