#include<avr/io.h>
#include<avr/interrupt.h>
void usart_init(void)
{
//设置波特率
UBRRL=51; //9600bps,8M
UCSRB= _BV(RXEN) | _BV(TXEN) | _BV(RXCIE); //发送使能
UCSRC= _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0);//8位数据
sei();//开中断
}
main()
{
unsigned char i;
unsigned int j;
usart_init();
while(1)
{
//UDR=i;
//while(!(UCSRA & _BV(TXC)));//等待发送完
//UCSRA |= _BV(TXC);
for(j=0;j<10000;j++);
i++;
}
}
SIGNAL(SIG_USART_RECV) //串口接收中断
{
unsigned char tmp=0x34;
unsigned char i;
unsigned char tbl[10];
//while(UCSRA & _BV(RXC));
//UCSRA |= _BV(RXC);
tbl[0]=UDR;
for(i=1;i<10;i++)
{
while(!(UCSRA & _BV(RXC)));//接收完毕
tbl[i]=UDR;
}
for(i=0;i<10;i++)
{
UDR=tbl[i];
while(!(UCSRA & _BV(TXC)));//等待发送完
UCSRA |= _BV(TXC);
}
}
评论0