Porównaj sobie sposób, który napisałem wcześniej, spójrz do pliku *.lss i sprawdź jak wygląda to w asemblerze, porównaj sobie do dziesiątek operacji, które miałyby się wykonać w tych proponowanych przez ciebie IF'ach. Toż nie dość, że zajęłoby to więcej miejsca, więcej czasu to jeszcze z uwagi na to byłoby jeszcze bardziej narażone na zmiany w przerwaniach które sam wymyśliłeś. Więc to sposób na wyjęcie sobie dywanika spod nóg.
I jeszcze raz podkreślę, że od takiej operacji którą podałem nie przestanie działać wyświetlacz LED

.....
zresztą spójrz sobie tutaj na to co napisałem w asemblerze:
Zaloguj się, aby zobaczyć kod
Wykona się to powiedzmy w czasie ok 20-30 cykli przy taktowaniu 8MHz zajmie powiedzmy ok 3us
A teraz ty spróbuj sobie rozpisać to swoim sposobem na IF'y i rozbicie wszystkiego na ustawianie pojedynczych bitów i wtedy porównaj.
Dodano po 10 [minuty]: krru napisał:
O ile kompilator wstawi odpowiednie instrukcje na ustawianie/kasowanie bitów taka sekwencja (jak i cały szereg takich if'ow dla kolejnych bitow) jest odporna na modyfikacje PORTD na przerwaniach.
Panie kolego odporne na przerwanie to może być ustawienie pojedynczego bitu czy całego rejestru stałą - ogólnie mówiąc coś co jest w stanie wykonać się w ciągu jednego cyklu zegara.
Ale już twoje stwierdzenie że cała sekwencja jest odporna - to hmmm delikatnie mówiąc ogromne nadużycie

bo jak pisałem wyżej - zanim uzyskasz zamierzony przez autora efekt, jedno przerwanie w środku całej sekwencji może zniszczyć całą twoją układankę.