Цитата(SysRq @ Mar 26 2011, 23:47)

Возможно, ошибка из-за того, что вы путаете & и &&.
Такая вот конструкция делает совсем не то что задумано:
Код
while (!(UCSR1A && (1 << UDRE1)));
Да, действительно. Ошибка именно в этом. Только-что проверил.
Но как эта конструкция появилась у меня ума не приложу. Я прекрасно понимаю как работают обе конструкции.
И применял я их не раз. Да и тут я ставил из datasheet:
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
Откуда взялось "&&" -
Этот оператор был настолько очевиден, что я даже не присматривался к нему, а искал ошибку в другом месте.
Как сказал К.Прутков:
"Если увидишь на клетке слона надпись буйвол - не верь глазам свои!"
Видимо, по ночам надо меньше работать.
Еще раз
Большое спасибо SysRq
Ткнули носом в элементарную ошибку.
Буду работать дальше, но, видимою уже не сегодня.
Цитата(M_Andrey @ Mar 26 2011, 21:05)

Опять вы все смотрите через терминал, одних граблей вам мало, загадочные "*" и "Shift" говорят о том что у вас как минимум 2 промежуточных звена возможных ошибок. У вас есть (судя по схеме) кнопки, дисплей, для проверки больше и мечтать не о чем - заведите команды на кнопки и смотрите ответы на дисплее (если конечно они работают :-) ).
Опять повторюсь. (cм. пост выше) Все прекрасно работает и выводится на терминал, но при использовании прерывания UART. И так я буду работать с AT45. На этом я бы мог закончить и идти дальше. Но не хочется оставлять темных пятен (привычка). Конечно, это отнимает время. Но не наступая на "грабли" не приобретаешь опыт.

P.S.
Да, у меня есть и клавиатура и дисплей. И я их использую для наладки на определенных этапах. Но куда удобнее использовать UART. Ведь выводить 528 байт из буфера или страницы на LCD не очень удобно. Тем более, что работу AVR с UARTом я проверил на макетке.
Сообщение отредактировал IF_P - Mar 26 2011, 22:59