USART错误的数据传入

时间:2015-01-31 10:23:39

标签: c serial-port avr atmega usart

我正在撰写Atmega162PC之间的沟通。

在我的PCB我有界面RS485(由RS422转换为MAX485),它通过ADAM-4520收发器进入COM port

我一直在终端测试我的程序,我觉得很奇怪,从MCU发送字符的工作正常,但从PC收到的字符会被更改(我无法弄清楚)这种转换的计划)。

例如,这些ASCII字符以这种方式解释:

0   => 0
1   => 64
2   => 32
3   => 32
4   => 16
5   => 65
6   => 16
7   => 16
8   => 8
'1' => 204
'2' => 102
'3' => 70
'4' => 51
'5' => 141
'6' => 35
'7' => 51
'8' => 6
'9' => 142

我一直在测试它的几个传输参数,但它似乎没有帮助。源代码在这里:

void USART_init()
{   
    UCSR0B |= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0);    
    UCSR0C |= (1<<UCSZ10)|(1<<UCSZ00)|(1<<USBS0)|(1<<UPM10);        
    UBRR0H = 0;
    UBRR0L = 12;

    DDRD |= 1<<PD1;

    _delay_ms(1);
}

void USART_Transmit( unsigned char data )
{   
    PORTD |= 1<<PD4;
    while ( !( UCSR0A & (1<<UDRE0)) );  
    UDR0 = data;    
    while (!(UCSR0A & (1 << TXC0)))
    PORTD &= ~(1<<PD4);
}

ISR(USART0_RXC_vect)
{   
    unsigned char a;
    while ( !(UCSR0A & (1<<RXC0)) );

    a = UDR0; 

    speed_1 = a;
}

PD4在发送和接收之间切换。

0 个答案:

没有答案