Пример для PORTB:
Порт_B имеет (как и другие порты МК) минимум 3 регистра :
DDRB - значение битов в этом регистре определяет чем будет ножка этого порта с номером этого бита - начальное (при включении МК или после сброса) значение "0" - ножка вход если сделать бит = "1" (говорят: установить бит англ. set bit ) эта ножка станет выходом.
сделать бит = "0" - говорят: сбросить или очистить бит англ. clear bit
PINB - биты этого регистра показывают чем ("1" или "0") считает МК напряжение на ножке порта с номером этого бита. (этот регистр в ATmega16 нужно только читать, записывать в него что либо бесполезно).
ВНИМАНИЕ !
В микроконтроллерах AVR старой серии AT90s и в ATmega8, -16, -32, -48, -64, -88, -128, -168 имеет смысл только читать из регистров PINx