#include #include #include #include #include "circular_buf.h" #include "uart.h" struct circular_buffer uartRxBuffer; struct circular_buffer uartTxBuffer; void UART_init(void) { UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0) | (1< length) { overflow = 1; } return overflow ? -1 : byteCount; // Возвращает количество успешно принятых байт или -1 в случае переполнения } // прерывание по завершению приема ISR(USART_RX_vect) { uint8_t data = UDR0; // читаем из регистра UDR0 if (!buffer_full(&uartRxBuffer)) { write_buffer(&uartRxBuffer, data);// записываем символ в буфер приема } } ISR(USART_TX_vect) { if (!buffer_empty(&uartTxBuffer)) { UDR0 = read_buffer(&uartTxBuffer); } }