неправильно
PORTB=0b00000001; // РВО - входправильно:
PORTB=0b00000001; // РВО - включение подтяжкине важно что вперёд - ПОРТ или ДДР писать - в любом случае 1 в ПОРТ тянет вверх, а 1 в ДДР включает силовые выходные транзисторы (с ними порт начинает работать на выход, кстати, при этом не переставая работать и на вход тоже)
_____________
ты понимаешь суть этой строки?:
PORTB|= 0x10; // зажигаем зеленыйобъясню, это пример сокращенной записи вот этой строки:
PORTB = (PORTB) | (0x10); // зажигаем зеленыйвертикальная черта
| - это поразрядное ИЛИ (это как плюс, только без переноса) если хотябы в одном из операндов в данном месте была 1, то на выходе в этом же месте будет 1.
тоесть взяли регистр ПОРТБ и записали его весь обратно, кроме 1го (2го по счету) бита - он в результате этой операции всегда станет равным 1.
я стал объяснять про эту строчку из-за этой строки (она хоть и работать будет, но написана неправильно и может в дальнейшем навредить - когда начнешь мигать более чем одним светодиодом):
PORTB= 0x01; // тушим зеленыйна самом деле эта строчка выключает все ножки порта, кроме 0й (там у тебя подтяжка кнопки)
если надо отключить только 1ю ногу и не тронуть остальные, то правильно писать так:
PORTB&= 0x11111101; // тушим зеленый& - (поразрядное И) записывает 0 в те разряды, где хоть у одного оператора был 0.
но такая запись неудобна, проще инвертировать чило:
~ - (поразрядное НЕ, или инверсия)
PORTB&= ~(0x00000010); // тушим зеленыйтакие операции встречаются очень часто и их стоит запомнить.
ещё, для улучшения восприятия можно воспользоваться командой сдвига:
PORTB|= (1<<x); // зажигаем x ногу порта
PORTB&= ~(1<<x); // тушим x ногу порта<< - сдвиг, в данных строках происходит сдвиг "1" на х позиций, (вместо х число) так и получится при х = 0 единица не сдвинется и будет переключение 0 ноги порта, при х=1 - первой, и т.д.
_____
надеюсь эта информация поможет тебе написать более красивый и правильный код