2016-11-08 7 views
1

Я пытаюсь отправить шестнадцатеричные данные по UART на свой AVR. Проблема в том, что я не могу отправить более двух пар шестнадцатеричных. Мне нужно отправить больше двух, например, 9-10.Отправка шестнадцатеричного кода через UART

Например:

я мог послать только 0x2f и 0x3f. Если я отправлю больше, это всегда минус.

Мне нужно отправить 0xff234f3a3f.

Мой код:

sendString("wish me luck\n"); 

while(1) 
{    
    char str[35]; 
    int i; 

    printf("enter the code :\n"); 
    scanf("%x", &i); 
    printf("%#x (%d)\n",i,i); 
} 

Что я сделал не так?

+0

извини, я отправлял неправильно one.but даже с этим кодом, он по-прежнему только в состоянии послать две пару гекса. ничего больше, что делать? – user6318361

+0

Любопытный. Первый код использовал массив 'char' из 30, теперь код использует' int'. Зачем использовать тип 'int' с' "% x" '? Что говорит ваша документация о том, какой тип следует использовать с «% x»? – chux

+0

nah .. его просто осталось от предыдущего кода, но основное внимание здесь уделяется отправке более двух пар hexdata. и% x - единственный тип данных, который я нашел в Интернете, который мог бы делать то, что я хочу – user6318361

ответ

0

AVR UART имеет ограничение по размеру, так как он находится во встроенной среде, поэтому буфер UART составляет всего 8/16 бит. Вы можете отправить 2 байта данных, чтобы отправить больше вам нужно сделать цикл для отправки оставшихся байтов данных.

+0

как я мог это сделать? пример lil сделает это для меня. thx заранее. – user6318361

+0

Посмотрите ниже ссылку http://electronics.stackexchange.com/questions/168709/how-to-send-string-in-serial-communication-in-avr-c может помочь. –

1

Вы можете добиться этого, сохранив данные, которые вы хотите отправить в программном буфере, и как только avr отправит 1-й байт данных uart, заполните регистр uart байтом из программного буфера. Вы можете сделать что-то вроде этого: -

char ar[] = "hello"; 
for (i = 0; i < strlen(ar); i++) { 
    while ((UCSR0A & (1<<UDRE0)) == 0); 
    UDR0 = ar[i]; 
} 

Надеется, что это помогает

+0

thankx sir, плохо попробуйте сначала. – user6318361

+0

int i; объявления содержат только 16 бит (2 байта) памяти. – Tristanto

+1

16 бит достаточно хорош, он позволяет хранить 65536 элементов в массиве char – rabatra

 Смежные вопросы

  • Нет связанных вопросов^_^