shejizhe08 发表于 2014-2-17 15:07:06

AVR128串口通讯总是发送不正确的数据

用的avr128的板子,通过串口1向电脑发送数据。
之前用别的板子测试了电脑串口,没有问题。
但是使用avr128的板子发送数据出了个问题,比如发送0X00,电脑会接收到0X80

//===============================================
//函数名称:uart1_init
//函数功能:串口 1 初始化
//函数参数:无
//返回数据:无
//===============================================
void uart1_init(void)
{
    SFIOR &= ~(1<<PUD);        //打开上拉电阻
    DDRD|=(1<<PD3);        //PD0为接收端口置为输入;PD1为发送端口置为输出
    PORTD = 0X08;              //USART的发送接收端口分别为PD0和PD1
    UCSR1A=0x00;
    UCSR1B = 0x00; //disable while setting baud rate
    UCSR1C=0x00;
    UCSR1C = (1 << UCSZ11)|(1 << UCSZ10);//8 DATA ,1 STOP, NO PARITY
    UBRR1H=((FOSC>>4)/BAUD-1)>>8;//(FOSC/16/BAUD-1)/256
    UBRR1L=((FOSC>>4)/BAUD-1)&255;//(FOSC/16/BAUD-1)%256
    // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1
    UCSR1B = (1<<RXEN1)|(1<<TXEN1);
}
//===============================================
//===============================================
//函数名称:uart1_send
//函数功能:向串口 1 发送一个字节数据
//函数参数:char i 待发送的数据
//返回数据:无
//===============================================
void uart1_send( char i)
{
    while(!(UCSR1A&(1<<UDRE1)));//只有数据寄存器为空时才能发送数据
    UDR1=0x00;
}
//===============================================


主函数中
while(1)
    {
      
      if(GetKeyVal()==1)
      {
          Disp1Char(5,0,'A'+keyVal);
          uart1_send('A'+keyVal-0x80);
      }
         

    }

每次电脑串口接收都会受到0x80

shejizhe08 发表于 2014-2-17 15:08:59

UDR1=0x00;

这句话应该是一定是发送的0x00,可是每次都收到的0x80

usingavr 发表于 2014-2-17 15:42:14

波特率是否正确?

shejizhe08 发表于 2014-2-17 16:25:21

usingavr 发表于 2014-2-17 15:42
波特率是否正确?

波特率应该没问题,都是9600,现在怀疑可能是串口硬件的问题
把另一个板子上可以正常使用的程序放到这个板子上出现同样的现象。。。发送的数据和写入发送寄存器的数据不一样

wcm_e 发表于 2014-2-17 17:02:18

检查CKDIV8,CKDIV8=1, 不进行8分频
页: [1]
查看完整版本: AVR128串口通讯总是发送不正确的数据