Der Timer hat am Eingang den Quarztakt von 16MHz. Dieser wird mit dem Prescaler (Vorteiler) nochmals verringert (nur bei jedem 256sten Takt zählt der Timer weiter). Das hast du ja schon selbst herausgefunden.
Bei Prescaler 256 wird dein Timer also mit 16 000 000 Hz/ 256 = 62500 Hz getaktet.
Ein 16bit-Timer kann von 0 bis 65535 zählen, also 65536 Schritte. Daher läuft er bei 62500Hz Eingangstakt 62500/65535 = 0,95367mal pro Sekunde über, was einer Periode von 1,0485Hz entspricht. So viel willst du aber nicht haben. Also musst du in der ISR den Timer mit einem Wert vorladen, damit er nicht bei 0 beginnt, sondern bei einem größeren Wert.
Du willst 1Hz erreichen. Dafür muss der Timer quasi den Takt durch 62500/1= 62500 teilen, also schon alle 65200 Takte einen Interrupt auslösen. Damit er dies macht, wird er mit 65536-62500= 3036 vorgeladen. Dann zählt er immer von 3036 bis 65535 durch, und zwar in genau einer Sekunde.
Lesezeichen