Цитата(Laptop @ Dec 19 2005, 13:21)

Именно об этом и говорил... Странно...
Ты данные подсовываешь по "регистр данных пуст", а закрываешь передачу по "передача завершена"?
Нужно работать именно с двумя прерываниями, лучше именно с прерываниями, а не опросом флагов.
Реакция будет быстрее.
Если работаешь только по "передача завершена", то скорее всего попадаешь в логическую ловушку с отправкой...
Особенно если проверка на "передача завершена" стоит прямо после записи очередного байта на отправку.
Всё же хочу докопаться, в чём я не прав.
Я работаю с одним прерыванием, просто пробовал с начало с одним работать потом с другим. Но последовательности действий не менял.
На стороне МК «мастер»:
1. Передаю байт «преамбула», девятый бит 0 (можно и без него).
2. По приходу прерывания, или UDRE или (но не И) TXC передаю адрес «Кому» с установленным в 1 девятым битом.
3. По приходу прерывания,… передаю N (у меня пока один) байт данных, девятый бит 0.
4. По приходу прерывания,… передаю байт 0xCC.
5. По приходу прерывания,… передаю любой байт.
6. По приходу прерывания,… и по обнаружения в передаваемом буфере байта 0xAA перевожу USART на приём, ни чего больше в USART не посылая.
На стороне подчинённого МК:
7. USART подчинённого МК настроен на мультипроцессорный обмен, т.е. стоит бит MPCM регистра UCSRA. Поэтому первый пришедший байт, байт адреса. Я это вижу на индикаторе, процесс передачи с задержкой и два байта преамбулы. Байты преамбулы не принимаются. Проверяю адрес, если правильный снимаю бит MPCM.
8. Принимаю байты данных.
9. По приёме байта 0xCC перевожу USART в исходное состояние, т.е. ставлю бит MPCM.
При удалении п.5 передача даёт сбой. Может, какие флажки по приходу прерывания снимать/ставить нужно? Вроде делаю всё как по учебнику.