Цитата(James D. @ Nov 23 2005, 12:04)

Стоит задача связать линией приема-передачи две м32 и одну м16. TWI с этой задачей почему-то не справился.
Если можно, подскажите, где можно найти примеры программ приема-передачи по USART на асме.
Извините меня, но эта переписка напоминает известную историю:
"все хорошо, только Жучка померла...
Мяса объелась...
Конюшня сгорела...
полковое знамя..."
Давайте с самого начала определим то, что Вы хотите.
Вы хотите сеть! 3 абонента. Это уже понятно.
Топология сети бывает
1. Точка - точка. Для этого у одного из абонентов должно быть два!!! порта.
2. кольцо - здесь все понятно. Требует повышенного ресурса на трансляцию "чужих пакетов"
3. шина - требует физич согласования с портами или спец управления.
Физически как расположено - тут Вы сказали. Уже хорошо.
Далее.
1. данные идут потоком. что получили то, например запомнили или переслали. здесь все просто.
2. данные идут кадрами. Например команды. Сразу вопрос: как формируется признак начала кадра. В системе MCS51 для этого использовали бит четности в посылке по UARTу. В LIN - паузу специальной длительности. В I2C можно использовать один из адресов. У SPI есть только аппаратный выбор слэйва. Признак начала кадра надо формировать отдельно. Либо битом порта, либо кодированиеем данных, а это понижение скорости передачи и доп затраты процессорного времени.
Укладываются ли ваши данные в эти кадры? Сколько данных в кадре? Защита от ошибок? Как начало кадра отличается от данных. Если слэйв пропустил начало кадра, то что должно произойти? Как проверяется то, что команда получена? Перезапросы? Сообщения о правильном/неправильном приеме.
Далее.
Сеть с одним мастером или со множеством мастеров? Есть ли передача эстафеты? Арбитраж? Коллиззии?
В чем типичная ошибка?
НИКОГДА не пытайтесь спроектировать систему "начиная от гайки". Это только кажется что в начале все очень просто. Заканчивается ВСЕГДА полохо или ОЧЕНЬ ПЛОХО.
Настоящий путь - проектирование от ЗАДАЧИ. Всегда тяжелое начало, но потом кончается работающим проектом.
Попробуйте "нарисовать поле дураков" (раньше это называлось ТехЗадание).
Вот примерно так. Составьте себе задание. Распишите ВСЕ диаграммы обмена сообщениями. Определите бюджет времени. Проверьте, что ядро операционной системы может обслужить столько прерываний. Отсюда получите пребуемую скорость обмена. Определите как будут формироваться кадры, соответственно выберите протокол обмена, порт обмена. Линии связи. И только потом ассемблер.
К этому момент Вы уже будете знать круг задач, которые Вам надо запрограммировать.
Посмотрите то, как строятся сетевые интерфейсы. Не физический уровень, а обмен сообщениями. Там уже расписано как и куда передавать. Как обрабатывать ошибки и т.д....
А все, что тут предлагается сможет только подтолкнуть Вас к ответу. Поскольку задача НЕ ОПРЕДЕЛЕНА ПОЛНОСТЬЮ, то и опветы самые разнообразные...
Вот пока все.
Удачи!