AVR на C, траблы с UART
Написал Vitaliyli дата Чт., 05/31/2012 - 12:17
Доброго времени суток. Я новичок в программировании, и в МК. Пытаюсь написать прогу, но не совсем то выходит.
Через терминал (например ГиперТерминал) набираю слово, затем жму 'Enter' и он мне должен вернуть это же слово.
С символом все просто, а вот с массивами никак. Он возвращает, но зараза возвращает слово без первого элемента, например, пишу "Privet", а он мне "rivet". Дело в том, что у него в массиве нулевой элемент почему-то r, а не P. Помогите чем можете. Если не в ту тему, то извиняюсь.
Код:
#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define XTAL 3686400L //Задал частоту #define baudrate 9600L //Скорость #define bauddivider (XTAL/(16*baudrate)-1) unsigned char c[255]; //Создаю функцию, в которой данные UDR переписываются в массив c[] (буфер) void read () { unsigned char i; for (i=0;i<255;i++) { if (UDR =='\n') return; else while (!(USR&(1<<RXC))); c[i] = UDR; } } void write (char *t) //создаю функцию, в которой из буфера скидываю в UDR на отправку { unsigned char i; for (i=0;i<255;i++) { if (t[i]==0) return; else while (!(USR&(1<<UDRE))); UDR = t[i]; } } ISR (UART_RX_vect) { read (); write(c); } int main (void) { UCR = 1<<RXEN|1<<TXEN|1<<RXCIE|0<<TXCIE; UBRR = bauddivider; sei(); while (1) { } return 0; }
»
То есть задача отправить
То есть задача отправить слово, напрмиер из 4х символов и получить Эхо?
У тебя ошибка в программе потому, что я так понял МК зажевывает первый символ, так как его получение вызывает срабатывание прерывания, а потом уже выполняется прием остальных букв и их запись в массив.
Сделай сразу в обработчике прерываний запись в массив, не вынося в отельную программу: