我在通过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发送...
非常感谢
答案 0 :(得分:1)
在不丢失所有数据的情况下,您无法将float
之类的十进制数转换为char
。但是,您只想公开这些位,以便通过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);
并使用相同的union将它转换为浮点数,当它到达连接的另一端时。
答案 1 :(得分:0)
如果'decimal'表示数字的字符串表示,则应该查看sprintf
或itoa
。
您需要一个字符缓冲区,可以使用其中一个函数填充字符缓冲区,并使用表示您的编号的字符串。
请阅读有关不同基本数据类型的C-Tutorial或书籍,尤其是字符/字符串与整数数据类型之间的区别。