Das ist wirklich merkwürdig was da anscheined passiert.
Kann es eine Überlappung von Stack und Variablen geben ?
Ich habe mit den AVR's noch nicht gearbeitet aber man kann sicher so einiges in der Entwicklungsumgebeung umstellen, oder es gibt einen Linker FIle....
Wenn Du der Meinung bist, dass sich ein Speicher überschreibt:
Mach doch mal ein paar unnütze Variablen vor den momentanen, um Speicher zu verschwenden....
Das Problem ist, dass die Compiler unbenutzen meist wegoptimieren, meist reicht das volatile davor.

volatile char dummy[20]; /* reserviere 20 Bytes für Muell */

dann deine wirklicehn Variablen

volatile int sec,igr;

dadurch verschieben sich die Speicherstellen deiner Variablen
Dann schaust Du wie sich das Programm dadurch verhält.

und ganz wichtig: NIE aufgeben jeder Fehler ist zu finden