C is nicht unbedingt mein Favorit... und ich kann mich sicher auch Täuschen...
aber ich würde mal das genauer kontrollieren:
if ((rx_bit_counter == 59) && (flags.parity_P1 == rx_buffer->P1) && (flags.parity_P2 == rx_buffer->P2) && (flags.parity_P3 == rx_buffer->P3))
Anscheinend muss ja diese Bedingung nicht erfüllt sein... daher geht das Programm dazu über die sekunden "manuell" zu zählen.

oder der Interrupt meldet nie, das die DCF ein Signal gesendet hat.