atmel studio遇到的USART问题,解决了,但是不知道问题所在

来源:互联网 发布:下载会声会影软件制作 编辑:程序博客网 时间:2024/05/22 05:40

第一次写这个东西,这个问题困扰我好久,一直不知道如何解决,今天终于无意中成功了,但是就是不知道问题在那,把问题叙述如下:

#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;

//       }

//       程序不能使用,不知道怎么回事
    }

}

0 0
原创粉丝点击