我在通过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…
非常感谢
发布于 2016-04-08 01:13:12
您无法在不丢失所有数据的情况下将像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);当它到达连接的另一端时,使用相同的并集将其转换回浮点数。
发布于 2016-01-12 20:38:07
如果'decimal‘对你来说意味着数字的字符串表示,你应该看看sprintf或itoa。
您需要一个字符缓冲区,其中一个函数可以用代表您的数字的字符串填充。
请阅读有关不同基本数据类型的C教程或书籍,尤其是字符/字符串和整型数据类型之间的区别。
https://stackoverflow.com/questions/34409959
复制相似问题