AVR Studio4中ATMEGA128串口程序发什么都显示的00

AVR ATMEL128芯片,用STC ISP烧写于电脑相连,发1也好发a也好,电脑串口助手都显示00,发什么返什么也试了,也是不管发什么返的都是00,急请大神指点:程序如下:
void uart_init(uint baud)
{
SREG&=~BIT(7);
UCSR0B=0x00;
UCSR0A=0x00; //控制寄存器清零
UCSR0C=0X06;//0000 0110(1<<URSEL0)|(0<<UPM00)|(3<<UCSZ00);
//选择UCSRC,异步模式,禁止
// 校验,1位停止位,8位数据位
baud=mclk/16/baud-1; //波特率最大为65K
UBRR0L=baud;
UBRR0H=baud>>8; //设置波特率
UCSR0B=0X98;//(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0); //接收、发送使能,接收中断使能1001 1000
SREG|=BIT(7); //全局中断开放
PORTE = 0xFF; //设置RXD0和TXD0
DDRE |= 0x02; //配置TX为输出(很重要)
}
void uart_sendB(uchar data)
{
while(!(UCSR0A&(BIT(UDRE0)))) ;
UDR0=data;
while(!(UCSR0A&(BIT(TXC0))));
UCSR0A|=BIT(TXC0);
}
void usart0_RX_interrupt(void)
{
UCSR0B&=~BIT(RXCIE0);
rdata=UDR0;
flag=1;
UCSR0B|=BIT(RXCIE0);
}
void main(void)
{
uchar i=4;
uchar j='a';
uart_init(19200);;
while(1)
{
uart_sendB(1);
delay(10);

//uart_sendB(j);
//delay(10);
// if(flag==1)
// {
// uart_sendB(rdata);
// flag=0;
// }
}

}
晶振是11059200 波特率:19200 烧写的熔丝位

void uart_sendB(uchar data)

{
while(!(UCSR0A&(BIT(UDRE0)))) ;
UDR0=data;
while(!(UCSR0A&(BIT(TXC0))));
UCSR0A|=BIT(TXC0);
}
你把这个函数改成:
void uart_sendB(uchar data)

{
while(!(UCSR0A&(BIT(UDRE0)))) ;
UDR0=data;
}
你不要对TXC0进行操作,只要这个TXC0=1,就会立马跳入中断中,进入中断TXC0会自动清零的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-17
关注这个问题

相关了解……

你可能感兴趣的内容

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