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

📄 uart.c

📁 基于AVRGCC的时钟DS1302的完整应用源代码
💻 C
字号:
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include "uart.h"


// USART0 Transmitter interrupt service routine
SIGNAL(SIG_USART0_TRANS)
{
	if (UART0.counter)
	{
		--UART0.counter;
		UDR0 = UART0.buffer[UART0.rd];
		if (++UART0.rd == TX_BUFFER_SIZE0) UART0.rd = 0;
	}
}

int uart_putchar(char c)
{
	while (UART0.counter == TX_BUFFER_SIZE0);
	cli();
	if (UART0.counter || bit_is_clear(UCSR0A, UDRE0))
	{
		UART0.buffer[UART0.wr] = c;
		if (++UART0.wr == TX_BUFFER_SIZE0) UART0.wr = 0;
		++UART0.counter;
	}
	else
	{
		UDR0 = c;
	}
	sei();
	return 0;
}

void InitIO(void)
{
	UART0.rd = 0;
	UART0.wr = 0;
	UART0.counter = 0;
	
	// USART0 initialization
	// Communication Parameters: 8 Data, 1 Stop, No Parity
	// USART0 Receiver: Off
	// USART0 Transmitter: On
	// USART0 Mode: Asynchronous
	// USART0 Baud rate: 19200
	UCSR0A = 0x00;
	UCSR0B = 0x48;
	UCSR0C = 0x86;
	UBRR0H = 0x00;
	UBRR0L = 0x17;
	
	fdevopen(uart_putchar, 0, 0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -