Цитата(Zelepuk @ Nov 5 2010, 19:52)

Чему изначально равно PD0? Или дело обстоит так, сначала выставляем на PD0 единицу, а потом уже работаем с ним?
Обычно пины портов у AVR определяются в одном из хидеров, как НОМЕP этого пина:
#define PD0 0
#define PD1 1
#define PD2 2
......................
#define PD7 7
Однако во многих командах пин порта соответствует определенному биту. В таких случаях порт выглядит при программировании, как байт, а пины этого порта выглядят, как биты внутри этого байта.
Запись типа 0<<PD2, хоть и численно равна нулю, но является наглядным способом указания того, что бит в маске порта, соответствующий пину PD2, равен нулю. Такая форма записи подразумевает, что определения пинов PD0-PD7 соответствуют номеру бита в байте. А чтобы запихнуть в данное место 0 или 1, их сдвигают влево операцией сдвига << на это же число двоичных разрядов.
Сама операция такого сдвига кода не порождает, т.к. операции над числовыми константами компилятор делает "в уме", подставляя на исполнение уже готовый результат.