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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Barabashka
Родился
Сообщения: 10
Зарегистрирован: Ср мар 10, 2010 14:53:23

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

Сообщение Barabashka »

Недавно начал изучать AVR'ы, особенно интересует UART.
Посимвольно передавать научился, а вот как передавать строку?

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

Но пока что сложновато это написать самому, может есть у кого готовые исходники по передаче строки?
Реклама
Smirnov
Прорезались зубы
Сообщения: 206
Зарегистрирован: Сб фев 27, 2010 11:58:50
Откуда: Горец: Уральские горы

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

Сообщение 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();

 ...... // некий код
};
Реклама
Barabashka
Родился
Сообщения: 10
Зарегистрирован: Ср мар 10, 2010 14:53:23

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

Сообщение Barabashka »

Smirnov писал(а):

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

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

 transmit_buffer();

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


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

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

Если же каждый символ этой строки писать отдельно - не очень выглядит как-то...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

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

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

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

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

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

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

printf("Привет");
Последний раз редактировалось ARV Ср мар 10, 2010 16:08:40, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

В Си строка представляет собой последовательность символов заканчивающихся нулём. Следовательно для педачи строки функции нужно передать указатель на начало строки и передавать байт за байтом пока очередной байт не будет нулём. Такой алгоритм.
There is only 10 kind of people: those who understands binary code and those who dont!!!
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»