#include<avr/io.h>
#include<avr/interrupt.h>
unsigned char uart_data = 0;//用于保存输入的数据
unsigned char uart_flag = 0;//用于作为串口输入的标志
unsigned char view[] = "welcome to aust";
//函数功能:串口数据,再发送到上位机
void uart0_init(void)
{
UCSR0B = 0X00;//关所有中断和使能
UCSR0A = 0X00;
UBRR0H = 0;
UBRR0L = 103;//16MHZ晶振,波特率9600
UCSR0A = 0X00;//不使用倍速发送
UCSR0C = 0X06;//异步操作,无奇偶校验,1位停止位,字符长度8位
UCSR0B = 0X98;//接收结束中断使能,接收使能,发送使能
sei();
}
//字节发送函数
void put_char(unsigned char send)
{
while(!(UCSR0A&(1<<UDRE0)));
UDR0 = send;
}
//字符串发送函数
void put_string(unsigned char *pBuff)
{
while(*pBuff)
put_char(*pBuff);
put_char(0x0d);
put_char(0x0a);//结尾发送回车换行
}
//接收中断函数
ISR(UART0_RX_vect)
{
cli();
uart_data = UDR0;
uart_flag = 1;
sei();
}
int main(void)
{
PORTE = 0X00;
DDRE |= 0X02;
uart0_init();
while(1)
{
if(uart_flag == 1)
{
put_string(view[0]);
put_char(uart_data);
uart_flag = 0;
}
}
}
|