Hi,
sieht doch soweit ganz gut aus.
Ich Frage mich nur, warum Du das TCCR0-Register so komisch einstellst. Statt
Code:
   TCCR0  |= (1<<WGM00)|(1<<COM01)|(1<<CS00); 
   TCCR0  &=~((1<<WGM01)|(1<<COM00)|(1<<CS01)|(1<<CS01));
kannst Du besser einfach nur
Code:
   TCCR0  = (1<<WGM00)|(1<<COM01)|(1<<CS00);
schreiben. Wie schon geschrieben - das Register wird sowieso mit 0 initialisiert, die Nullen brauchst Du also nicht zu setzen. Und bei den anderen Registern machst Du's doch auch so...

Gruß,
askazo