Помогите решить задачу.
Исходные данные: ATmega32, UART (19200 бод), PC, WinAVR, C
Требуется принимать посылки вида
(начало посылки (буква B))
(переменные, по одному байту - нное количество)
(конец посылки (буква E))
Т.е. если принятый символ является началом посылки, то следующие скажем 8 переменных я принимаю циклом, и если конец посылки является самим собой - то завершаю прием и выполняю одно действие.
Проблема в том, что я не понимаю как это сделать адекватно и быстро, к томуже надо ждать (как мне объяснили) готов ли УАРТ.
Код: Выделить всё
unsigned char usart_rx (void) {
while ( !(UCSRA & (1<<7)) ); //ждём очистки регистра данных USART
return UDR; //читаем данные
}
void Accept (void) { //Принятие посылки
u08 i;
if (usart_rx == 'B' )
{
for (i=1;i<8;i++)
{
Servo[i].Position = usart_rx;
}
if (usart_rx == 'E' )
{
Servo_sort();
Servo_upd();
}
}
}ЗЫ Еще может быть проблемой в решении быстрого приема - на базе таймера Т0 работает ШИМ с периодом 50Гц и 255 градациями, на 8 каналов. Т.е. пректически постоянно МК на что-то прерывается. Как тут быть?


