Ein Timer setzt immer dann sein (Interrupt-) Flag, wenn ein Überlauf von 255 nach 256 = 0 stattfindet (256 gibt es bei 8 Bit ja nicht).
Der Quarz hat eine Frequenz-Angabe, die in Zeit umgewandelt werden muß; das hast Du mit 1 / 1MHz schon gemacht; das ergibt 1 µs ! oder 0,001 ms !
Wenn Du als Beispiel einen Teiler 1 : 4 wählst, mit dem Du dann auf 0,004ms kommst, dann muß ein Zähler 250 mal diese 0,004ms zählen, damit sich 1ms ergibt (0,004 * 250 = 1). Genau das macht das Timer-Register. Du legst mit dem Teiler eine 'Schritt-Zeit' für den Timer fest und setzt im Timer die Anzahl der Schritte.
Allerdings wird dort nicht 250 eingesetzt, weil der Timer nicht runter zählt; er zählt rauf. Dann wäre der oben beschriebene Überlauf nach 6 Schritten (250 ... 256 = 6. Also mußt Du in den Timer die Zahl 6 reinschreiben (256 - 250 = 6), dann macht er genau 250 Schritte bis zum Überlauf bei 256, was 1ms entspricht.
Den Timer-Wert mußt Du dann wieder neu eintragen, sofern es nicht ein Reload-Register dafür gibt.

Edit: Hat noch keiner bemerkt, daß 10MHz keine 0,1µs = 0,001ms sind ?
Dann korrigiere ich mal den Quarz von 10MHz auf 1MHz (dann brauche ich nur den µs-Wert ändern).