Die Register habe ich jetzt nicht überprüft, ich denke, die sollten passen.

Der Fehler liegt wohl im Interrupt.
Du setzt jedesmal, wenn der Interrupt aufgerufen wird, die variable counter auf 0. In der if-Abfrage ist counter demnach immer 1 und es passiert nichts.

Lass einfach mal das "= 0" weg. Static-Variablen werden bei C automatisch mit 0 initialisiert, daher ist die Zuweisung nicht nötig.

Gruß,
askazo