📄 uart.c
字号:
#include <avr/interrupt.h>
#include "uart.h"
//#define UART_BAUD_RATE 9600L
//#define UART_BAUD_CALC(UART_BAUD_RATE,F_CPU) ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
#define RBUFFLEN 150
volatile unsigned char rbuff[RBUFFLEN];
volatile uint8_t rbuffpos,
rbuffcnt,
udr_data;
SIGNAL (SIG_UART_RECV)
{
udr_data= UDR;
if(rbuffcnt < RBUFFLEN)
rbuff[(rbuffpos+rbuffcnt++) % RBUFFLEN] = udr_data;
}
unsigned char ser_getc (void)
{
unsigned char c;
while(!rbuffcnt);
cli();
rbuffcnt--;
c = rbuff [rbuffpos++];
if (rbuffpos >= RBUFFLEN) rbuffpos = 0;
sei();
return (c);
}
void uart_putc(unsigned char c)
{
while(!(UCSRA & (1 << UDRE)));
UDR = c;
}
void uart_puts (char *s)
{
while (*s)
{
uart_putc(*s);
s++;
}
}
void uart_ini ()
{
sei();
UCSRB |= (1 << TXEN);
UCSRB |= (1 << RXEN );
UCSRB |= (1 << RXCIE);
UCSRC |= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
// UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8); // Choose Baudrate
// UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -