2015-12-22 15 views
0

У меня проблема с отправкой последовательных данных через USART, это отправка ASCII не десятичной.Отправить Decimal с помощью USART в ATMEGA32

это мой код:

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 ...

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

ответ

0

Если «десятичный» означает строковое представление чисел вам, ok at sprintf или itoa.

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

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

1

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

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