Der Timer zählt unsigned bis 0xffff und löst den Interrupt beim Überlauf 0xffff->0x0000 aus. Kurz gesagt: Das ist so richtig.

%d bei printf erwartet einen signed integer.