Sieht doch ok aus, bis auf den Rundungsfehler. Der ini-Wert für OCR1A:
Code:
#define F_CPU 8000000
#define INTS_PER_SECOND 1
#define PRESCALE 1024

...
   OCR1A = (uint16_t) ((uint32_t) F_CPU*INTS_PER_SECOND/PRESCALE-1);
Evtl. liegts an der Reihenfolge, in der OCR1AH und OCR1AL geschrieben werden. Das ist nicht egal. Lass das GCC machen mit OCR1A=..., der weiß die richtige Reihenfolge.

Mit Prescale = 256 gibt's auch keinen Rundungsfehler mehr.