⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 利用avr c编程的综合程序
💻 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 + -