是这样的,我的串口0和串口1都在用,但是串口0的接受中断总有问题,发数据时进入中断了但是没有接收到数据而且UCSR0A寄存器的值为70,帧错误标志位一直是1,
while(!(UCSR0A & (1<<RXC0)));
RX0_data[1]=UDR0;
TX_data(RX0_data[1]);这段程序返回的数据一直是00,并且在for循环中
for(i=0;i<11;i++)
{},第二次进入循环就在while循环里卡死了,
串口初始化是这样的;
void usart0_init(void)
{ //UCSR0A=0x00;
UBRR0L = ((F_CPU0/ 16) / (BAUDRATE0) - 1) % 256; //设置波特率寄存器低位字节
UBRR0H = ((F_CPU0/ 16) / (BAUDRATE0) - 1) / 256; //设置波特率寄存器高位字节
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); //允许发送接收
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); //8位数据
}和串口1的初始化程序一样,UCSR0A=0x00;
这一句写进去寄存器值也没什么变化所以注释了。
开机UCSR0A=60,UCSR1A=20
然后分别给串口0,1发送数据,UCSR0A=70,UCSR1A=60
串口1发的数据返回正常,串口0返回00;
看了很多资料,用的isp下载器,但是把下载器拔下在重新上电还是这样 |