uart.c

来自「GSM FOR DATA TRANSFER」· C语言 代码 · 共 65 行

C
65
字号
#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 + =
减小字号Ctrl + -
显示快捷键?