Но работает он неправильно, во первых он не реагирует на действия с кнопкой.
Так этот код и не будет работать так как Вы хотите. Что у Вас сделано по тексту:
1. Настроили пины на вход и выход
2. Выставили на всех пинах лог.1
3. Далее если на входе 1, то цикл из 4х морганий
По логике вещей у Вас на входе всегда будет лог.1, так как включили резистор подтяжки. Чтобы реагировало на кнопку - нужно ждать на входе не лог.1, а лог.0!
А во-вторых светодиод который подключён к PD0 всё время горит. Горение светодиода скорее всего связанно с тем что строка PORTD=0xff; на всех портах D устанавливает единицу, а не включает подтяжку. Если проблема в этом, то это можно как то обойти?
По Вашему мнению что тогда такое "включение подтяжки", если не включение внутренних резисторов между пином контроллера и напряжением питания? Что равносильно появлению ("выставлению") лог.1 на выводе.
Отключите подтяжку от PD0, чтобы исключить свечение.
Для явной наглядности моргания светодиода сделайте задержку не 50мс, а хотя бы >200мс.