0

我在通过 USART 发送串行数据时遇到问题,它发送的是 ASCII 而不是十进制。

这是我的代码:

    while(!(UCSRA&(1<<UDRE))){}
    UDR=12;

这是标题:

UBRRH=(uint8_t) (UBRR_CALC>>8);
UBRRL=(uint8_t) (UBRR_CALC);
UCSRB=(1<<TXEN)|(1<<RXEN);
UCSRC=(1<<URSEL)|(3<<UCSZ0);

如何发送十进制数据,我想从 ADC 读取并使用 USART 发送...

非常感谢

4

2 回答 2

1

您无法在不丢失所有数据的情况下转换十进制floatchar。但是,您只想公开这些位,以便可以通过 USART 发送它们,然后取回您的十进制值。您可以通过以下方式执行此操作union

union FloatChar {
    float f;
    char c[4]; // or however big a float is on your compiler
};

然后你可以像这样使用它

union FloatChar fc;
fc.f = adc.getValue();
usart.send(fc.c);

并在到达连接的另一端时使用相同的联合将其转换回浮点数。

于 2016-04-07T17:13:11.657 回答
0

如果“十进制”对您来说意味着数字的字符串表示,您应该查看sprintfor itoa

您需要一个字符缓冲区,可以由这些函数之一用代表您的号码的字符串填充。

请阅读有关不同基本数据类型的 C-Tutorial 或书籍,尤其是字符/字符串和整数数据类型之间的区别。

于 2016-01-12T12:38:06.890 回答