А можно на ходу переключать что будет вызываться при прерывании? Если да, то готовим 5 блоков - первые 4 обрабатывают порты A,B,C,D, последний - курит. Блоки каждый отрабатывает свои циклы и переключает прерывание на след. блок. Т.е. первый блок обрабатывает 3мс, второй, третий, четвертый столько же, а пятый - оставшиеся 8мс.
Ну а каждый блок уже банально - не более 8 точек перехода подряд, т.е. пиковая загрузка не более 1024 такта.
Памяти - 4*8*2=64 байта на основные структуры. Ну и за счет деления на 4 блока пиковая нагрузка в % должна поменьше быть.
PS: Если я правильно понял, что предлагается
