求助atmega128 单片机串口初始化问题

用atmega128 做串口通信实验,发现串口初始化有问题,注释掉的五行其中的任意一个都会使程序死在里面,求助。
我用的gccavr编译器
// UCSR0C|=(_BV(UCSZ01))|(_BV(UCSZ00)); //异步 无校验 8数据位 1停止位
// UBRR0H=0;
// UBRR0L=103; //从手册中查表得 16M 9600
// UCSR0B|=_BV(TXEN0)|_BV(RXEN0)|_BV(RXCIE0); //发送使能 接收使能 接收完毕中断使能
// sei(); //开总中断

void usart_io_init()
{
PORTE = 0xFF; //设置RXD0和TXD0
DDRE = 0x02; //PE1 TXD为输出状态
}

void usart_init()
{
uint temp;

usart_io_init();
UCSR0A=0X00; //串口控制器A清零
UCSR0B=0X00; //串口控制器B清零
// UCSR0C|=(_BV(UCSZ01))|(_BV(UCSZ00)); //异步 无校验 8数据位 1停止位
// UBRR0H=0;
// UBRR0L=103; //从手册中查表得 16M 9600
// UCSR0B|=_BV(TXEN0)|_BV(RXEN0)|_BV(RXCIE0); //发送使能 接收使能 接收完毕中断使能
// sei(); //开总中断
}
已经解决了。

不用usart_init()函数

直接把函数内容写在主程序里面就好了,请问这是什么原因啊,求指教。。。

void main()
{

DDRC|=_BV(ZHISHIDENG); //指示灯亮

PORTC|=(_BV(ZHISHIDENG));
// usart_init();

usart_io_init();
UCSR0C|=(_BV(UCSZ01))|(_BV(UCSZ00)); //异步 无校验 8数据位 1停止位
UBRR0H=0;
UBRR0L=103; //从手册中查表得 16M 9600
UCSR0B|=_BV(TXEN0)|_BV(RXEN0)|_BV(RXCIE0); //发送使能 接收使能 接收完毕中断使能
sei();

第1个回答  2014-12-09

需要帮你写程序吗

第2个回答  2014-12-10
usart_init();里的内容跟main函数里的内容都不一样。你在usart_init();里屏蔽掉的行,在main里都打开了。。。。。本回答被网友采纳

相关了解……

你可能感兴趣的内容

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