gpt4 book ai didi

c - 通过 PIC16 uart 发送转换后的 DS1820 温度

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:36 35 4
gpt4 key购买 nike

我正在尝试使用 PIC16F877 uart 将转换后的温度读数从我的 DS1820 发送到我的 PC。我使用的是 MPLABX 和 XC8 编译器,它在 usart.h 中有一个构建,尽管它只对 PIC18 系列有用,所以我使用的是第三方为 PIC16 系列编写的 usart_pic16.h。

我成功地从 DS1820 以十六进制形式收集温度并将其转换为人类可读的 float ,但我找不到通过 UART 将浮点值转发到 PC 的方法。

usart_pic16.h 库允许使用以下方法通过 usart 直接发送字符、字符串、行和整数:-

  • void USARTWriteChar(char ch);
  • void USARTWriteString(const char *str);
  • void USARTWriteLine(const char *str);
  • void USARTWriteInt(int16_t val, int8_t field_length);

我一直在寻找一种使用此库通过 uart 发送浮点值的方法,其中包括提取和发送小数点。

我确实尝试发送这样的字符串:-

  • USARTWriteString( "TempC= %7.3f 摄氏度\r\n", temp_c );

其中 temp_c 是 temp 的浮点值,但在编译时出现“太多函数参数”错误。对于那里的那些 C 专家来说可能是显而易见的,不幸的是我不是 :(

也许一种方法是从 float 中提取每个值并将其作为 int 发送,但小数点除外,小数点可能通过对每个值的“if”检查找到,然后当小数点是发现只是将其作为字符发送,例如USARTWriteChar('.');,它确实有效。不幸的是,我不知道如何提取单个浮点值,或者这是否是最好的方法。

我不确定是否需要我的代码来解决这个问题,所以我想除非有人问,否则我会避免发送垃圾邮件。

任何帮助都会很棒。

谢谢。

最佳答案

一般等同于包括 <stdio.h>并执行如下操作:

char s[64];
sprintf(s, "TempC= %7.3f degrees C \r\n", temp_c);
USARTWriteString(s);

尽管对于嵌入式平台,您最好避免使用 printf风格的功能,可以在小型微 Controller 上使用相当多的代码空间。同样在上面的示例中,将浮点转换分解为单独的 sprintf 是有意义的。并单独输出字符串的其余部分,以便缓冲区 s不必这么大。

这应该能让你暂时运行,但从长远来看,你可能希望将温度转换为整数,比如将其乘以 1000,然后在 PC 上解码该值,假设你最终打算编写你的自己的应用程序与微 Controller 通信。

关于c - 通过 PIC16 uart 发送转换后的 DS1820 温度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21575341/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com