Cały kod z twojego pierwszego postu powinien normalnie zadziałać. Owszem zastosowane starsze makro SIGNAL, czy return 0; to jakieś drobiazgi, które nie mają żadnego wpływu na to że program miałby źle z tego powodu zadziałać. Taki program testowy.
O ile jednak warto używać ISR() zamisst SIGNAL(), czy też nie ma sensu wpisywanie return 0; po pętli nieskończonej o tyle na pewno nie ma najmniejszej różnicy stosowanie pary nawiasów klamrowych w takim przypadku:
while(1); ----> bo to jest w 100% dokładnie to samo co ----> while(1) {} .... i nawet po ostatnim nawiasie klamrowym żaden średnik nie jest potrzebny. Ale to też tylko czysto kosmetyczna uwaga.
Dokładnie tak samo kosmetyczną uwagą może być to, że po resecie przy starcie procka nie trzeba ustawiać pinów jako wejścia (twoje DDRD=0

... bo domyślnie wszystkie są wejściami po resecie.
Proponuję żebyś sprawdził czy podajesz stan zerowy na właściwy pin czyli PD2, bo podejrzewam, że tu może robisz jakiś prosty błąd - może niechcąco podajesz ten stan na jakiś pin obok, PD1 albo PD3 - sprawdź to dokładnie. Bo stan na porcie A powinien się na pewno zmienić na 0 - nawet jak pisałem w kodzie z pierwszego postu.