GP1
для устранения проблем нерационального расхода времени просто переводится сканер дисплея/клавиатуры в фоновый режим вместо указанного в той программе основного...
только вот у меги и малых пиков (в отличии от 8051) нет приоритетного контроллера прерываний... "мудрить" надобно...
BOB51
у меня весь вывод организован в фоновом режиме
и мудрить особо ничего не надо, просто используется один таймер настроенный на прерывание 2-5 мс.
а поскольку это процесс не требующий особой точности +/-200..300 мкс ни как не повлияет, это 180-250 инструкций, и если бы у АВРов были приоритеты, этому процессу можно смело присвоить низший приоритет.
это если только один процесс использует прерывания, или потоки синхронизированы...
опять же без разрешения прерываний внутри текущего у аврки не обойтись - что уже есть необходимость немножко "помудрить" по сравнению с автоматическим исполнением у 8051 (о 10/12/16 пиках уж ... )
так весь фокус в том, что для AVR это уже будет "вложенное прерывание" которое еще необходимо предварительно разрешить во всех прерываниях более низкого уровня
здесь есть приоритет, но нет автоматического выполнения прерываний высшего уровня во время исполнения прерывания низшего уровня (в отличии от контроллеров mcs51 и урезанного до 2-хуровней вложений на pic18)
во всех примененных в данной программе, если есть приоритет хотя бы у одного из них
"ни одно прерывание не может быть выполнено пока не исполнится одна команда после reti",
а "вложенное", даже если его "приоритет" (размещение вектора в таблице векторов) будет выше не будет исполняться, если на данный момент уже исполняется другое, пусть даже и более низкого уровня, прерывание без соответствующего на то разрешения со стороны программиста...
(в mcs51 / pic18 автоматически выполнится прерывание высшего приоритета, если оно разрешено)