Страница 1 из 1

Алгоритм передачи по UART

Добавлено: Ср мар 10, 2010 15:04:53
Barabashka
Недавно начал изучать AVR'ы, особенно интересует UART.
Посимвольно передавать научился, а вот как передавать строку?

Попой чувствую, что строку нужно преобразовать в массив, и побайтно элементы массива плювать в UDR.

Но пока что сложновато это написать самому, может есть у кого готовые исходники по передаче строки?

Re: Алгоритм передачи по UART

Добавлено: Ср мар 10, 2010 15:17:24
Smirnov
Barabashka писал(а):Недавно начал изучать AVR'ы, особенно интересует UART.
Посимвольно передавать научился, а вот как передавать строку?

Попой чувствую, что строку нужно преобразовать в массив, и побайтно элементы массива плювать в UDR.

Но пока что сложновато это написать самому, может есть у кого готовые исходники по передаче строки?

Код: Выделить всё

#define buffer_size 30 //размер буфера
char buffer[buffer_size]; //сам буфер
char buffer_count; //количество байт в буфере

void add_to_buffer(char c) //ф-ия добавление байта в буфер
{
 buffer[buffer_count]=c; //добавляем
 if (buffer_count<buffer_size) //проверям не вылезло ли за размер
  buffer_count++; //если нет то увеличиваем
};

char transmit_buffer() //отсылаем буфер
{
 char k;
 k=0;
 while ((buffer_count--)!=0) //цикл отсылки
  putchar(buffer[k++]); //непосредственно отправка в ком порт ну или замени на свой UDR + задержка или проверка готовности
};

void main()
{
 ...... // некий код

 add_to_buffer('П');
 add_to_buffer('р');
 add_to_buffer('и');
 add_to_buffer('в');
 add_to_buffer('е');
 add_to_buffer('т');

 transmit_buffer();

 ...... // некий код
};

Re: Алгоритм передачи по UART

Добавлено: Ср мар 10, 2010 15:35:59
Barabashka
Smirnov писал(а):

Код: Выделить всё

 add_to_buffer('П');
 add_to_buffer('р');
 add_to_buffer('и');
 add_to_buffer('в');
 add_to_buffer('е');
 add_to_buffer('т');

 transmit_buffer();

 ...... // некий код
};
Да, это как бы посимвольно идет... Была такая идея, но некрасиво что ли как-то...

Хочется чтобы строка была строкой, т.е.: "Вот эту строку передаем по UART"

Если же каждый символ этой строки писать отдельно - не очень выглядит как-то...

Добавлено: Ср мар 10, 2010 16:06:04
ARV
вы бы чувствовали душой, а не попой... попа - она для другого предназначена, те, кто ею чувствует, особым уважением как-то не пользуются :)))

вообще говоря, строка в Си - это уже и так массив, не надо ничего преобразовывать! как же это вы упустили?

Код: Выделить всё

// функция передачи строки
void send_str(char *s){
   while(*s){
      UDR = *s++;
      // и ждем, пока не будет передано
   }
}

// выводим нашу строку
send_str("Привет");
примерно так, для начала

хотя если ресурсы позволяют, можно использовать сразу printf() - она по идее у вас через UART и выводит:

Код: Выделить всё

printf("Привет");

Добавлено: Ср мар 10, 2010 16:07:34
Negor
В Си строка представляет собой последовательность символов заканчивающихся нулём. Следовательно для педачи строки функции нужно передать указатель на начало строки и передавать байт за байтом пока очередной байт не будет нулём. Такой алгоритм.