Недавно начал изучать AVR'ы, особенно интересует UART.
Посимвольно передавать научился, а вот как передавать строку?
Попой чувствую, что строку нужно преобразовать в массив, и побайтно элементы массива плювать в UDR.
Но пока что сложновато это написать самому, может есть у кого готовые исходники по передаче строки?
Алгоритм передачи по UART
-
Barabashka
- Родился
- Сообщения: 10
- Зарегистрирован: Ср мар 10, 2010 14:53:23
- Реклама
-
Smirnov
- Прорезались зубы
- Сообщения: 206
- Зарегистрирован: Сб фев 27, 2010 11:58:50
- Откуда: Горец: Уральские горы
Re: Алгоритм передачи по UART
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
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
- Откуда: Новочеркасск
- Контактная информация:
вы бы чувствовали душой, а не попой... попа - она для другого предназначена, те, кто ею чувствует, особым уважением как-то не пользуются
вообще говоря, строка в Си - это уже и так массив, не надо ничего преобразовывать! как же это вы упустили?примерно так, для начала
хотя если ресурсы позволяют, можно использовать сразу printf() - она по идее у вас через UART и выводит:
вообще говоря, строка в Си - это уже и так массив, не надо ничего преобразовывать! как же это вы упустили?
Код: Выделить всё
// функция передачи строки
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
- Откуда: Черкассы, Украина
- Контактная информация:
В Си строка представляет собой последовательность символов заканчивающихся нулём. Следовательно для педачи строки функции нужно передать указатель на начало строки и передавать байт за байтом пока очередной байт не будет нулём. Такой алгоритм.
There is only 10 kind of people: those who understands binary code and those who dont!!!
- Реклама

