Битами в памяти ваши контроллеры управлять могут? Если могут - организуйте несколько сдвиговых регистров и получите простейший счётчик.
Создать сдвиговые регистры проще, чем счётчик.
Тогда же вы сможете сделать и регистр с обратными связями, так называемое "электронное колесо", и дешифратор для определения различных состояний регистра. Очевидно, что эти состояния будут повторяться через определённые промежутки времени, квантуясь периодом сканирования программы. На компьютере можно "прогнать" циклическую кодовую последовательность такого "колеса" и выбрать необходимые комбинации для дешифратора.
Наукообразное название такого "колеса":
Линейный рекуррентный регистр
Генерируемых кодовых комбинаций меньше, чем в счетчике, но реализация намного проще.
Для устойчивости процесса время от времени регистр "колеса" надо сбрасывать, прописывая туда определённую кодовую комбинацию.
Подробнее можно почитать в литературе про поточное шифрование, циклические коды и их образующие полиномы.
Например:
Д. Э. Кнут, "Искусство программирования", т. 2 "Получисленные алгоритмы", глава 3 "Случайные числа".
Брюс Шнайер, "Прикладная криптография", глава 16 "Генератор псевдослучайных почледовательностей и потоковые шифры"
Повторю - это реализуемо при наличии возможности оперировать с внутреними битами памяти контроллера, т.е. когда результат логической операции может быть записан во внутренний бит памяти, а не только на выход. И таких свободных внутренних битов должно быть достаточное количество.
PS
На практике, если вам на вашей технике удасться запрограммировать такой регистр, то выловить нужную кодовую комбинацию для дешифратора можно и с секундомером в руках, запуская программу с известным начальным кодом в регистре, и считывая результат на остановленном по секундомеру контроллере.
