Отправить десятичную с 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 или книгу о различных основных типах данных, особенно о различиях между символами / строками и целочисленными типами данных.