Цитата(NikitoS-86 @ Dec 9 2008, 18:27)

- если оциллографом смотреть на ногах самой Атмеги, то приходит всегда то, что нужно, а в ответ уходит какая-то ересь... (в моём случае это 0x80)
Странно. Уходить не должно вообще. Прерывания приема не разрешены, значит до записи в UDR дело не доходит. Зачем вы используете прерывания, если внутри обработчика все равно ждете в цикле?
Код
UCSR0B |= (1<<RXCIE0);
UCSR0B |= (1<<TXCIE0);
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
Каков глубокий смысл этих манипуляций? Почему не написать сразу UCSR0B = (1<<RXCIE0)| (1<<TXCIE0)| (1<<RXEN0)|(1<<TXEN0); и не забыть | (1<<RXСIE0)
Цитата(NikitoS-86 @ Dec 9 2008, 18:27)

Может быть кварц слишком быстрый? Но по даташиту ограничения нету на его частоту никаких...
Ограничения есть в зависимости от напряжения питания. Красивые графики №131 и 132.
Цитата(Палыч @ Dec 9 2008, 18:36)

Я - не уверен. Посчитайте на калькуляторе и запишите результат:
Абсолютно глупый совет. А если завтра кварц другой поставят? Снова калькулятор в зубы? А если скорость другая потребуется? А как не забыть все места, в которых надо подправить такие "магические" числа? Или вы думаете, что калькулятор в компиляторе может ошибаться? Тогда надежнее всего писать прямо в кодах - мало ли, ассемблер ошибется и не тот код команды подставит. Чтобы компилятор посчитал правильно, надо ему правильно написать: #define FOSC 20000000ULL Все, дальше вычисления идут в длинных целых. Порядок действий компилятор изменить может лишь в том случае, если это не повлияет на результат.