用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();
需要帮你写程序吗