第一次写这个东西,这个问题困扰我好久,一直不知道如何解决,今天终于无意中成功了,但是就是不知道问题在那,把问题叙述如下:
#define F_CPU 4000000UL //晶振
#include <avr/io.h>
#include <avr/interrupt.h>
#define INT8U unsigned char
#define INT16U unsigned int
//清空缓冲标志
INT8U flag = 0;
INT8U rdata;
//------------------------------------------------------------------
// USART初始化
//------------------------------------------------------------------
void Init_USART()
{
UCSRB = _BV(RXEN) | _BV(TXEN) | _BV(RXCIE);
UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0);
UBRRH = (F_CPU/9600/16-1) / 256;
UBRRL = (F_CPU/9600/16-1) % 256;
}
//------------------------------------------------------------------
// 发送一个字符
//------------------------------------------------------------------
void PutChar(INT8U c)
{
UDR = c;
while(!(UCSRA & _BV(UDRE)));
}
void show_redata()
{
if(flag==1)
{
PutChar(rdata);
flag=0;
}
}
ISR (USART_RXC_vect)
{
rdata = UDR;
flag = 1;
}
int main(void)
{
DDRD = 0x02;PORTD = 0xff;
Init_USART();
sei();
while(1)
{
show_redata();
//如果直接使用
//if(flag==1)
// {
// PutChar(rdata);
// flag=0;
// }
// 程序不能使用,不知道怎么回事
}
}