我正在尝试使用 PIC16F877 UART 将转换后的温度读数从我的 DS1820 发送到我的 PC。我正在使用 MPLABX 和 XC8 编译器,它在 usart.h 中构建,虽然它只对 PIC18 系列有用,所以我使用的是第三方编写的 usart_pic16.h,它可以与 PIC16 系列一起使用。
我成功地从 DS1820 以十六进制形式收集温度并将其转换为人类可读的浮点数,但我找不到通过 UART 将浮点值转发到 PC 的方法。
usart_pic16.h 库允许使用以下方法通过 usart 直接发送字符、字符串、行和整数:-
- 无效 USARTWriteChar(char ch);
- 无效 USARTWriteString(const char *str);
- 无效 USARTWriteLine(const char *str);
- 无效 USARTWriteInt(int16_t val, int8_t field_length);
我一直在寻找一种使用该库在 uart 上发送浮点值的方法,其中包括提取和发送小数点。
我确实尝试过发送这样的字符串:-
- USARTWriteString("TempC= %7.3f 摄氏度 \r\n", temp_c );
其中 temp_c 是温度的浮点值,但在编译时出现“函数参数过多”错误。对于那些 c 大师来说可能很明显,不幸的是我不是:(
也许一种方法是从浮点数中提取每个值并将其作为整数发送,除了小数点可能通过对每个值的“if”检查找到,然后当找到小数点时发送它是一个字符,例如 USARTWriteChar('.');,它确实有效。不幸的是,我不知道如何提取单个浮点值,或者它是否是最好的方法。
我不确定是否需要我的代码来解决这个问题,所以我想除非有人问,否则我会避免发送垃圾邮件。
任何帮助都会很棒。
谢谢。