📄 uart.c
字号:
#include "uart.h"
volatile unsigned char rx_buffer[RX_BUFFER_SIZE];
volatile unsigned char rx_wr_index, rx_rd_index, rx_counter;
volatile unsigned char rx_buffer_overflow = 0;
ISR (USART_RXC_vect)
{
unsigned char status,data;
status = UCSRA;
data = UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index] = data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index = 0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter = 0;
rx_buffer_overflow = 1;
}
}
}
unsigned char uartGetc(void)
{
unsigned char data;
while(rx_counter == 0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
cli();
if(rx_counter)
--rx_counter;
sei();
return data;
}
void uartOpen(void)
{
UCSRB = 0x98;
}
void uartClose(void)
{
UCSRB &= 0x00;
}
void uartPutc(unsigned char c)
{
while ( !( UCSRA & DATA_REGISTER_EMPTY) )
;
UDR = c;
}
void uartInit(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, Odd Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 38400
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0xB6;
UBRRH=0x00;
UBRRL=0x19;
sei();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -