打印
[AVR单片机]

gcc中如何使用串口输出float型数据

[复制链接]
3319|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
高个书呆子|  楼主 | 2012-7-26 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用protues虚拟终端仿真,使用printf函数能够打印出整形数,但是不能打印出float型数,打出来是问号“?”,请高手帮忙解决!!!!!!!!

以下是我包含的uart.h文件
#include <stdio.h>
#include <stdint.h>
#include <avr/io.h>
#include "uart.h"
static int uart_putchar(char c, FILE *stream) ;
static unsigned char uart_getchar(void);
static FILE mystd = FDEV_SETUP_STREAM(uart_putchar, uart_getchar,_FDEV_SETUP_RW);
static int uart_putchar(char c, FILE *stream)   
{      
if (c == '\n')        uart_putchar('\r', stream);
loop_until_bit_is_set(UCSRA, UDRE);      
UDR = c;      
return 0;   
}
static unsigned char uart_getchar(void)
{
volatile unsigned char ret;
    //loop_until_bit_is_set(UCSRA,RXC);
    while ((UCSRA&0X80)==0);
    //UCSRA=UCSRA&(~0X80);
    ret=UDR;
    return ret;
}
//-----------------------------------------------------------------------------
//  串口初始化
//-----------------------------------------------------------------------------
void uart_ini(void)
{
    unsigned char baud = 47; /*4800  U2X=0&Fosc=1MHz*/
    UBRRH = (unsigned char) (baud>>8);
    UBRRL = (unsigned char) baud;
    UCSRB = (1<<RXEN)|(1<<TXEN);
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);/*8data 2stop !!!!实际测试为8data 1stop  jy 2009.12.2*/

stdout = &mystd;
stdin  = &mystd;
}

相关帖子

沙发
taiyangshendi1| | 2012-7-26 20:50 | 只看该作者
我是把数据放大了  然后通过BCD码的形式串口输出的

使用特权

评论回复
板凳
高个书呆子|  楼主 | 2012-7-27 10:33 | 只看该作者
我在有些地方看到说是avr studio配置的问题,求大神解决

使用特权

评论回复
地板
dqyubsh| | 2012-7-27 10:40 | 只看该作者
意义不大。可以把float变成四个字节,分别打印即可。关键是串口另一边能不能正确还原这四个字节,如果不能,那就白干了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

0

粉丝