我正在撰写Atmega162
和PC
之间的沟通。
在我的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
在发送和接收之间切换。