1) Wenn du OCIE2A und OCIE2B aktivierst, solltest du den IRQs auch ihre ISRs spendieren. Ansonsten landest du beim Auftreten der IRQ bei __bad_interrupt, und dann bei Adresse 0.
2) das id (done==0) kannst du rauswerfen. Es schützt dich nicht vor mehrfachinitialisierungen durch einen Warmstart, denn im init-Code wird done auf 0 gesetzt. Willst du das verbeiden, musst du done dach .noinit lokatieren und MCUCSR auswerten, um es vernünftig zu initialisieren.
Lesezeichen