Определение режима делается один раз. Или нет?
тут как бы не совсем определение режима.
SET_L_1: D0 = вверх, D1 = вниз, D2 = 0, D3 = 0 , D4 = A, D5 = START
SET_H_1: D0 = вверх, D1 = вниз, D2 = влево, D3 = вправо, D4 = B, D5 = C
SET_L_2: D0 = 0, D1 = 0, D2 = 0, D3 = 0, D4 = A, D5 = START
SET_H_2: D0 = Z, D1 = Y, D2 = X, D3 = MODE, D4 = 1, D5 = 1
SET_L_3: D0 = 1, D1 = 1, D2 = 1, D3 = 1, D4 = A, D5 = START
1) начало цикла
2) пока SEL в высоком уровне выводим SET_H_1 и ждём прерывания по SEL
3) если прилитело прерывание по низкому уровню SEL выводим SET_L_1
4) ждём 20 микросекунд, если SEL перешёл в высокий уровень, то выводим SET_H_1, иначе ждём пока SEL в низком уровне и переходим в начало
5) ждём 20 миллисекунд, если SEL перешёл в низкий уровень, то выводим SET_L_1, иначе переходим в начало
6) ждём 20 микросекунд, если SEL перешёл в высокий уровень, то выводим SET_H_1, иначе ждём пока SEL в низком уровне и переходим в начало
7) ждём 20 миллисекунд, если SEL перешёл в низкий уровень, то выводим SET_L_2, иначе переходим в начало
8) ждём 20 микросекунд, если SEL перешёл в высокий уровень, то выводим SET_H_2, иначе ждём пока SEL в низком уровне и переходим в начало
9) ждём 20 миллисекунд, если SEL перешёл в низкий уровень, то выводим SET_L_3 , иначе переходим в начало
10) ждём перехода SEL в высокий уровень и возвращаемся в начало
ну собственно я уже и расписал всю логику программы, осталось перевести это в код
единственно надо будет поиграть ожиданием в 20 микросекунд, думаю надо начинать с 30 мкс