Отличный код, все прекрасно прокомментировано,
разбито на блоки, что безусловно помогает разобраться в вашем коде.
но есть моменты которые я бы заменил:
Код
/*
p |= Bit(n);
p &= Bit(n);
if(p & Bit(n)) ... // здесь чуть-чуть отклонился от вашего кода, но смысл один (false == 0; true > 0;)
*/
на макросы:
Код
#define clear_bit(reg,bit) reg &= ~(Bit(bit))
#define set_bit(reg,bit) reg |= Bit(bit)
#define test_bit(reg,bit) (reg & Bit(bit))
После этого ваш код будет легче читаться
ведь вместо кострукций DDRD |= Bit(5);
будут set_bit(DDRD, 5);
и уже не нужен коммент установить бит такой-то там-то...
все это готовое есть в AvrLib'е -
http://hubbard.engr.scu.edu/avr/avrlib/Цитата(kd_Rash @ Jan 15 2007, 10:43)

зато форматирование IAR-овское сохранилось, не у всех же IAR, а в txt читать - ногу сломаешь

гм, я думаю что никто не смотрит код в нотпаде (хотя могу быть неправ)
а чтоб форматирование было одинаковое нужно чтоб редактор умел
заменять табуляторы на пробелы.
ЗЫ: мне, например, понравился PSPad -
http://www.pspad.com/ru/