Цитата(gest @ Dec 7 2007, 11:15)

Пока остаётся думать, что проблема в несовпадении логических уровней\частоты. Но, как мне кажется, это маловероятно :\
Может еще линии приема/передачи попутаны или в терминалке включено управление потоком (flow control). Еще попробуйте перед DDRE = 0x02 поставить PORTE = 0x02; (иначе получаете короткий импульс на линии передачи, который может сбивать терминал) или вообще уберите запись в DDRE - порт настраивается на вывод автоматически при разрешении передачи UART. Очень не помешает подтяжка к питанияю на TXD.
Цитата(Axxel @ Dec 7 2007, 08:40)

и зачем в функции передачи используется сдвиг
А вот это как раз очень грамотно. Это эквивалентно вашему while(!(USR&0x20)), только если вас разбудить в 5 утра - вы не скажете, какой бит проверяется в вашем коде, а
gestа даже будить не нужно - в его коде бит явно прописан. Самодокументирующийся код. И ошибочно указать не тот бит гораздо больше шансов у вас.
gestу - не по теме вопроса, но все же:
Код
#define F_CPU 7372800UL
#define UART_BAUD_RATE 9600
#define baudrate (F_CPU / UART_BAUD_RATE * 16 - 1)