Придумалось по поводу управления сервами - делаем обработчики прерывания 4 видов:
Вид 0: Выставляем порт в 0, выставляем таймер, выставляем следующий обработчик прерывания, курим.
Вид 1: В зависимости от значения специальной ячейки памяти выставляем таймер, устанавливаем следующим обработчиком прерывания нужный.
Вид 2: Выставляем таймер, маску порта, ждём не выходя из прерывания нужное время, выставляем вторую маску порта, выставляем следующий обработчик.
Вид 3: Выставляем таймер, маску порта, выставляем следующий обработчик.
Прескэйлер пользуем 1/32, т.е. разрешение получим 4.34мкс, на 2500мкс это 576 шагов.
Делаем на каждые пару пинов такой набор:
Обработчик вида 0 с паузой 400мкс => обработчик вида 1 с паузой X мкс и ветвлением, уходим либо на
А) 2 подряд обработчика вида 2 с выходом на обработчик вида 0 следующей пары пинов;
Б) 3 подряд обработчиков вида 3 с выходом на обработчик вида 0 следующей пары пинов;
Добавлено спустя 7 минут 47 секунд:Если положения серв близки, выставляем ветвление на А), иначе на Б).
Пусть А), если положения больше 1500мс, тогда размещаем их во втором обработчике, а первый просто обеспечивает паузу. Иначе размещаем их в первом обработчике, а второй обеспечивает паузу.
Иначе если Б) - аналогично выбираем каким обработчиком обеспечить паузу, а каким переключать пины.
Добавлено спустя 16 секунд:PS: Всем мозг сломал?