ножкодрыганьем занимается обработчик прерывания, время выполнения которого ну крайне нельзя затягивать, а софтовый последовательный интерфейс - это долго (даже два битика в параллель). Если параллельное ничего не найду, тогда конечно а-ля 595 решает все проблемы.