Цитата(defunct @ May 12 2007, 00:27)

Надобность все равно непонятна, если следовать вашему алгоритму, то после отправки кадра вы ждете чтобы переключить UART на прием, раз все равно ждете окончания передачи, зачем проверять UDRE?
Ну да ладно, несомневаюсь, в конечной программе у Вас будет все работать в прерываниях без ожиданий.
Вы можете сделать Double Check?
т.к. если это действительно так и нет короткого между RX0 и TX0, то вероятно что-то с 9-ти битным режимом. Еще сразу вопрос - что примнимается в UDR0 и RXB8 после передачи?
С вопросом уже опоздал...
Двойная проверка помогает
Код
while(!(UCSR0A & (1<<RXC0)));
tmp = UDR0;
while(!(UCSR0A & (1<<RXC0)));
Цитата(eXeC001er @ May 12 2007, 00:27)

а с нормальной (8-ми битной) посылкой все нормал?!
и код если можно.
в восьми битном режиме тоже самое
Собственно код
Код
while(!(UCSR0A & (1<<UDRE)));
PORTE|=RS485_IO;
UCSR0B|=(1<<TXB8);
UDR0 = (address<<4)|RS485_CMD_SEND;
while(!(UCSR0A & (1<<TXC0) ));
PORTE&=~RS485_IO;
while(!(UCSR0A & (1<<RXC0)));
Инициализация порта
Код
DDRE|=RS485_IO;
UCSR0C|=(1<<UCSZ01)|(1<<UCSZ00);
UBRR0L = 0x0B;
UBRR0H = 0x00;
UCSR0B|=(1<<RXEN0)|(1<<TXEN0)|(1<<UCSZ02);