Offenbar ist der Empfang noch nicht so super zuverlässig. Der gezeigte Fehler spricht dafür, das durch Störungen die Zählung der Bits etwas durcheinander gerät, und nicht nur einzelne Bits falsch Empfangen werden. Gelegentliche Fehler kommen beim DCF77 Empfang sogar bei kommerziellen Uhren vor, was besonders ärgerlich ist, weil da der Empfang oft nur 1-2 mal am Tag erfolgt und die Zeit dann den ganzen Tag falsch ist. Vor allem bei Netzbetrieb kann man es sich leisten eine zweifelhafte Messung einfach zu ignorieren, und dann halt später zu synchronisieren.

In dem Programm sind noch ein paar Punkte nicht wirklich gut:
1) Die Timer nutzen einen Preload von Hand statt des CTC modes. Die Hardware kann das besser, auch wenn das bei einem Vorteiler von 1024 nicht so kritisch ist.
2) Im Sekunden Interrupt (Timer 1) wird auch die LCD Ausgabe gemacht. Damit dauert der Interrupt ggf. relativ lange und könnte ggf. die Zeitmessung per Timer0 durcheinander bringen.
3) Es wird nicht auf den Abstand der Bits geachtet, d.h. ein Bit kann zu fast jeder Zeit beginnen, nicht nur gegen Anfang einer Sekunde. Damit werden deutlich mehr Störungen als Daten btis erkannt als nötig.
4) Auch der Abgleich auf die kürzeste Zeit ist eher schlecht gelöst. Wenn man da schon versucht sie Zeiten zu lernen sollte man zum einen ganz kurze Pulse (Störungen), und auch die Länge der langen Pulse auswerten. Als Grenze ist 1,5 mal die kürzeste Zeit auch nicht optimal,besser wäre ( kurze Zeit + lange Zeit) / 2 als Grenze uz wählen, oder besser noch 2 Grenzen zu setzen, so Pulse mit einer unklaren Zeit als Fehler gewertet werden. Lieber keine Zeit als eine falsche.

Die Softclock könnte man um einiges genauer hin bekommen, mit einem kleineren Vorteiler für Timer1 und falls nötig dem Auto-reload mode (CTC). Wenn man es richtig anstellt, könnte man damit dann auch ganz auf timer0 und den 2. Interrupt verzichten: der Zählerstand von timer1 könnte dann die Funktion der Variable Zähler übernehmen.