Отправить десятичную с USART в ATMEGA32

У меня проблема в отправке последовательных данных через 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);

Как отправить десятичные данные, я хочу прочитать с АЦП и отправить с USART...

большое спасибо

2 ответа

Вы не можете преобразовать десятичное число как 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);

и использовать тот же союз, чтобы преобразовать его обратно в плавающие, когда он попадет на другую сторону соединения.

Если "десятичное" означает для вас строковое представление чисел, вы должны посмотреть на sprintf или же itoa,

Вам нужен символьный буфер, который может быть заполнен одной из этих функций строкой, представляющей ваш номер.

Пожалуйста, прочтите C-Tutorial или книгу о различных основных типах данных, особенно о различиях между символами / строками и целочисленными типами данных.

Другие вопросы по тегам