Код: Выделить всё
ISR(USART_TX_vect) // прерывание по завершению отправки
{
PORTD &= ~0b00000100; // Отпускаем ножку направления PD2 по прерыванию завершения отправки данных
UCSR0B &= ~(1 << TXCIE0);
UCSR0B |= (1 << RXCIE0);
}
//Прерывание по опустошению буффера УАПП
ISR(USART_UDRE_vect)
{
PORTD |= 0b00000100; // Поднимаем ножку направления PD2 по прерыванию начала отправки данных
if (bufferIndexOut >= INDEX_MAX) // Вывели весь буффер?
{
bufferIndexOut = 0;
UCSR0B &= ~(1 << UDRIE0); // Запрещаем прерывание по опустошению - передача закончена
}
else
{
UDR0 = inString[bufferIndexOut];
bufferIndexOut++; // Увеличиваем индекс
}
}
ISR(USART_RX_vect) // прерыванию по окончанию приема модуля USART
{
inchar = UDR0;
if (inchar == 0x2A)
bufferIndexIn = 0;
if (bufferIndexIn < 14)
{
inString[bufferIndexIn] = inchar;
bufferIndexIn++;
}
if (bufferIndexIn > 13) // Вывели весь буффер?
{
bufferIndexIn = 0; // Сбрасываем индекс массива
UCSR0B |= (1 << UDRIE0) | (1 << TXCIE0); // Разрешаем прерывание по опустошению - начинаем передачу массива
}
}
Данного языка не знаю, потому мне не видно имеется ли ещё проверка опустошения буфера передачи перед новым его заполнением?