首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ATMEGA32中使用USART发送小数

在ATMEGA32中使用USART发送小数
EN

Stack Overflow用户
提问于 2015-12-22 14:47:49
回答 2查看 805关注 0票数 0

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

这是我的代码:

代码语言:javascript
复制
    while(!(UCSRA&(1<<UDRE))){}
    UDR=12;

这是标题:

代码语言:javascript
复制
UBRRH=(uint8_t) (UBRR_CALC>>8);
UBRRL=(uint8_t) (UBRR_CALC);
UCSRB=(1<<TXEN)|(1<<RXEN);
UCSRC=(1<<URSEL)|(3<<UCSZ0);

如何发送十进制数据,我想从一个ADC读取,并发送与USART…

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2016-04-08 01:13:12

您无法在不丢失所有数据的情况下将像float这样的十进制数转换为char。但是,您只想公开这些位,以便可以通过USART发送它们,然后取回您的十进制值。您可以通过union完成此操作

代码语言:javascript
复制
union FloatChar {
    float f;
    char c[4]; // or however big a float is on your compiler
};

然后,您可以像这样使用它

代码语言:javascript
复制
union FloatChar fc;
fc.f = adc.getValue();
usart.send(fc.c);

当它到达连接的另一端时,使用相同的并集将其转换回浮点数。

票数 1
EN

Stack Overflow用户

发布于 2016-01-12 20:38:07

如果'decimal‘对你来说意味着数字的字符串表示,你应该看看sprintfitoa

您需要一个字符缓冲区,其中一个函数可以用代表您的数字的字符串填充。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34409959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档