Was auf jeden Fall fehlt ist einige Zugriffe atomar zu machen.

Schau mal in folgendem Artikel, der Artikel ist noch Baustelle, aber es sind ein paar Links drin, die zu dem Thema was sagen.

https://www.roboternetz.de/wissen/in...Programmierung

In deinem Fall wäre das einfachste so was wie ein yield() in der Hauptschleife:
Code:
   // yield();
   sei();
   nop();
   cli();
Es gibt also nur einen definierten Punkt im Programm, wo eine IRQ ausgelöst werden kann. Dadurch werden Konflikte vermieden, weil sonst "gleichzeitig" auf PORTB und seconds zugegriffen wird.

Allerdings glaub ich net, daß das der Grund ist, warum es überhaupt nicht funktioniert...

Muss man da nicht Fuses setzen?

Und der Test auf ASSR muss *vor* dem Setzen neuer Werte gemacht werden.

Ausserdem kannst du in der ISR einfach hinschreiben
Code:
   PORTB ^= 16;