Цитата(anaconda @ Jan 18 2010, 22:13)

В чем может быть ошибка?
1)Озаглавливайте тему осмысленно. Темы с неинформативными названиями в большинстве случаев попросту игнорируются многими участниками ("идут в сад сразу").
2) переменные, которые изменяются в прерываниях
и используются в программе обязательно должны объявляться с квалификатором volatile. Поищите по форуму - это наиболее часто встречаемая ошибка начинающих не обошла и вас.
3) Не используйте "магические числа" в инициализации периферии. То, что у вас рядом написан комментарий не исключает ошибки в процессе перевода битов в число, т.е. комментарий может элементарно не соответствовать коду. У вас в руках мощный инструмент препроцессора и компилятора, используйте его:
Код
#define F_OSC 7372800UL
#define RS485_BAUDRATE 115200
UBRR0H = ((unsigned)(F_CPU/(8.0 * RS485_BAUDRATE)-0.5)>>8)&0x0F;
UBRR0L = ((unsigned)(F_CPU/(8.0 * RS485_BAUDRATE)-0.5))&0xFF;
UCSR0A = (1<<U2X0);
UCSR0B = (0<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(1<<RXEN0)|(1<<TXEN0)|(0<<UCSZ02);
UCSR0C = (1<<UMSEL01)|(0<<UMSEL00)|(0<<UPM01)|(0<<UPM00)|(1<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00);
Такой код элементарно читается даже без комментариев. Ну в крайнем случае заглянуть в даташит на предмет "что же означает эта комбинация битов UCSZ", но не тратить время на перевод обратно из 16-ричного числа в комбинацию битов. По этой причине не проверял правильность ваших магических чисел.
4) ваш код будет работать неэффективно - между байтами будет пауза. Используйте прерывание UDR.
Вот совсем свежая дискуссия на тему прерываний UDR и TXC.