atmega128在运行USART程序时总是卡在初始化串口的时候(运行USART_Init()时),请大神帮忙看些问题出在哪

#include<avr/io.h>
#include<util/delay.h>
#define uchar unsigned char
const uchar code[]={'1','2','3','4','5','6','7'};
const uchar led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void USART_Init(void) //初始化串口
{
UBRR1H=0x00;
UBRR1L=0x0B;
UCSR1A=0x00;
UCSR1B|=0x08;
UCSR1C=0x06;
}

void USART_Transmit(uchar data) //传输数据
{
while(!(UCSR1A&(1<<UDRE1)));
UDR1=data;
}

int main(void)
{
uchar i;
DDRC=0xff;
PORTC=0xff; //单片机运行到这里时portC连接的led灯亮
USART_Init(); //这里卡住了
PORTC=0x00;//这里灯并没有熄灭,并且下面的程序都没有运行

while(1){
for(i=0;i<8;i++)
{
PORTC=led[i];
_delay_ms(100);
USART_Transmit(code[i]);
}
}
}

不用init函数,直接

UCSR1A=0x00;
UCSR1B|=0x08;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x0B;试一试,感觉问题也不是这里,
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-15
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C = 0x06;
UBRR1L = 0x0B; //set baud rate lo
UBRR1H = 0x00; //set baud rate hi
UCSR1B = 0x18;
这样是可以的,别忘了给分啊
第2个回答  2014-12-09
小弟如今也遇到了相同问题,请问楼主当初是如何解决的,不胜感激。。。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网