while (PORTB | (1<<PB5)); etc wegoptimiert. sie müssen
while (PORTB | (1<<PB5)) {
; //Achtung: ein ; ist hier
}
angeschrieben werden.
@Superhirn:
IMHO sind obige Zeilen C absolut identisch und werden nicht
unterschiedlich optimiert. Sprich: der erzeugte Code ist absolut
identisch. Dem compiler ist es egal ob der Block hinter dem
while explizit oder implizit leer ist.

Und wie bist du eigentlich auf dieses Beispiel gekommen, daß
überhaupt nichts mit der Originalfrage zu tun hat.

@Izaseba:
Nachdem boolsche Ausdrücke von links nach rechts ausgewertet
werden glaube ich das ein "while (var | 1)" niemals wegoptimiert wird
(auch wenn das Ergebnis immer bekannt ist).

@Zarathustra:
Solange du nur motortick in deinem Interrupt verändernst (und nicht
mot1 oder mot2) reicht es auch nur motortick als volatile zu deklarieren.