Einen direkten Fehler seh ich grad nicht, aber einige Punkte, die man verbessern könnte:

#1: InterruptFlag ist nicht volatile, d.h. bei durch Interrupts geänderten Variablen sollte das schon sein.

#2: Senden und v.a. While in einer ISR: Eine While in einer ISR kann "lustige" Effekte erzeugen, wenn das Warten mal länger dauert, als der Abstand zwischen 2 ISRs ist.
Hier einfach eine weitere Volatile-Variable als Flag verwenden, in der ISR auf 1 setzen und in der while(1) der Main-Loop schauen, ob das gesetzt ist. Wenn ja: Da senden und wieder auf 0 setzen.

#3: Kleinigkeit: Den Vergleich in der Abfrage "if (Sekundenzaehler == 59)" auf ">= 59" ändern. Sollte - aus irgend einem Grund - der Wert doch mal 61 o.ä. sein, wird dieser Fehler damit auch abgebrochen.
Ansonsten würde der einfach bis 255 durchlaufen.


Ich hab die DCF77-Auswertung damals anders gemacht; Der Interrupt reagiert auf beide Flanken und der Timer läuft als ganz normaler Timer (also ohne Input Capture). Bei jedem Flankenwechsel wird der aktuelle Zählerstand gespeichert und mit dem des vorherigen Wechsels verglichen.