Вы пишите:
пока поставил себе задачу зажигать светодиод при нажатии на кнопку (по прерыванию)
я и предложил код (очень простой) зажигать светодиод используя внешние прерывания. Вполне резонно (и логично!) и гасить используя то же.
Т.е. есть вн. прерывание - горим, нет - гасим. Зачем в обработчике задействовать процессор? Это тоже самое что: ощутив ожёг не отдёргивать руку, а сначала посмотреть и убедиться - а точно ли рука касается чего-то горячего? и убедившись, спокойно отодвинуть (не отдёрнуть!) руку. Именно так Вы поступаете используя опрос портов (sbis и sbic) в обработчике.
Я не говорю что такое справедливо всегда, но в данном случае - это очевидно.
Самому дойти до этого очень похвальное желание, однако как идти через глубокую реку не зная броду?
Рекомендую, коль попалась река под названием "Внешние прерывания" пойти там где и указывают люди не раз проходившие по этой дороге...
На мой взгляд для обучения было бы полезнее объяснить чем плох мой код и какие методы нужно применить чтобы его улучшить, например те же sbis, sbic - чем они плохи? А что касается советов, я их слушаю, но на С писать пока все равно не хочу
а на мой взгяд - если занялись вн. прерываниями - доведите это дело до конца, "ведь это нужно Вам" (с). Слушать советы - мало, "их нужно применять" (с)
sbis и sbic ни чем не плохи, однако если пользуетесь ими, нужно знать для чего ЭТО и когда применяется (в этом месте опять хочется процитировать avr123, но удержусь
) А код Ваш афтоматически улучшится, если Вы поэтапно и до конца разберётесь сначала с одним, затем с другим, затем с n-ным...
А что непонятного в коде который я дал? Там по-моему и вопрос-то воткнуть некуда...