Microchip
直播中

向可嘉

8年用户 208经验值
私信 关注
[问答]

PIC16F1829中的浮点数如何处理?

你好,我用的是PIC16F1829,在处理浮点值时有问题。它与MCP3421 ADC芯片一起用来测量电压或电流,这个项目的目的是建立一个DMM。在18位模式下,MCP3421给出三个字节的读数,对应于131071的amax计数,pLUS符号位。要将其转换为电压需要一些浮点运算。为了显示结果,我打算使用ftoa(float to ascii)函数。以下是我为测试部分过程而编写的一小段代码。它提取值的小数部分,乘以10^6,将结果强制转换为s整数,并使用整数到字符串函数将其转换为ascii。我已经测试过,整数到字符串函数在值为2147483647(即2^31-1,32位,1位用于符号)时正确工作。但是,当我尝试提取分数部分时,结果并不正确。例如,浮点值123.870012将所提取的分数部分显示为869184。对于较大的整数部分,误差变得更大,例如对于123456.870012,所提取的分数部分为0。尺寸适中,如6.3450,一切正常,抽取的分数为3450。我怀疑这是PIC16F1829芯片固有的局限性,但是我无法在数据表中找到任何关于它如何处理浮点数的信息。有什么办法可以达到更好的准确度?当我使用CC386 IDE在另一个C编译器(不编程芯片)上运行上述代码时,即使对于大值和小数部分到8或更多的小数位,也能得到正确的结果。非常感谢您的帮助。肯。

回帖(8)

杨玲

2019-9-24 12:54:49
启用32位浮点吗?你看到的可能是24位浮点引起的。
举报

tijing忽忽

2019-9-24 13:07:22
您可能遇到这样一个事实,即浮点数具有有限的分辨率(24位或32位),随着整体(或整数)部分的增大,这会导致小数部分的粒度变小。建议:不要使用浮点数,它们非常慢,而且使用大量的ROM,而是使用缩放整数或分数。
举报

李俊

2019-9-24 13:19:52
代码标签是这样的,没有空间[代码]无符号char i;(/代码)
举报

何羽衣

2019-9-24 13:31:41
我强烈建议您阅读这个http://float-point-gui.de/basic/这是一个网站,专门针对所有具有浮点数字的论文,这些论文根本不像人们最初认为的那样工作。这是一个辉煌的资源。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分