我正在尝试使用PIC16F877 uart将DS1820的转换温度读数发送到我的PC。我使用的是MPLABX和XC8编译器,它有一个usart.h版本,虽然它只对PIC18系列有用,所以我使用的是usart_pic16.h,它是由第三方编写的,用于PIC16系列。
我正在从DS1820成功收集其十六进制形式的温度并将其转换为人类可读的浮点数,但我找不到通过UART将浮点值转发到PC的方法。
usart_pic16.h库允许使用以下方法直接在usart上发送字符,字符串,行和整数: -
我一直在寻找一种方法来使用这个库在uart上发送浮点值,包括提取和发送小数点。
我尝试发送这样的字符串: -
其中temp_c是temp的浮点值,但在编译时错误地使用“太多函数参数”。那些c大师可能很明显,我很遗憾没有:(
也许有一种方法是从float中提取每个值并将其作为int发送,但小数点除外,这可能通过对每个值进行'if'检查找到,然后当小数点为发现只是发送它作为一个char例如USARTWriteChar('。');,确实有效。不幸的是,我不知道如何提取单个浮点数值,或者它是否是最好的方法。
我不确定我的代码是否需要解决这个问题所以我认为除非有人问,否则我会避免发送垃圾邮件。
任何帮助都会很棒。
感谢。
答案 0 :(得分:2)
一般的等价物包括<stdio.h>
并执行以下操作:
char s[64];
sprintf(s, "TempC= %7.3f degrees C \r\n", temp_c);
USARTWriteString(s);
虽然对于嵌入式平台,您最好避免使用printf
样式函数,这些函数可以在小型微控制器上使用相当多的代码空间。同样在上面的例子中,将浮点转换分解为单独的sprintf
并分别输出字符串的其余部分以使缓冲区s
不必如此大。 / p>
这应该让你暂时运行,但从长远来看,你可能想看看将温度转换为整数,然后将其乘以1000然后解码PC上的值,这假设最终你打算编写你的自己的应用程序与微控制器通信。