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