Сразу предупрежу - задача высосана из пальца

Мы с другом делаем систему управления пятью двигателями с управлением через микроконтроллер. Реализуется очень просто, но мне захотелось задачу усложнить

Каждый двигатель находится в одном из 3 состояний - стоит, движется влево, движется вправо. В порт вывода выводится по 2 бита на каждый двигатель - 00 стоит, 01 - вправо, 10 - влево. Итого 10 бит (5 пар последовательно) в порт на 5 моторов. Но всего количество состояний равно 3^5 = 243, что вполне влезает в один байт. Вот мне и захотелось реализовать короткий, быстрый и эффективный алгоритм кодировки и декодировки 10-битного развернутого представления в восьмибитное. Конечно, можно записать в ПЗУ 2 таблицы прямых соответствий, но это не спортивно

Мне конечно самому интересно придумать алгоритм, но также интересно что предложит общественность
Что мы имеем - АТМега48, 8 битные регистры, система команд -
http://www.gaw.ru/html.cgi/txt/doc/micr ... /start.htm (DIV-ов, к примеру, нет

трехрегистровых команд нет, и т.д.). Писать будем на С, но доступ к регистру состояний, например, есть.