Отправить десятичное число с помощью 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...

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


person Lukis triya    schedule 22.12.2015    source источник


Ответы (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);

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

person pingul    schedule 07.04.2016

Если «десятичное» означает для вас строковое представление чисел, вам следует обратить внимание на sprintf или itoa.

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

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

person vlad_tepesch    schedule 12.01.2016