Errechneter Wert ist falsch. Programmfehler? Kann mal jemand drüberschauen?

Die Variable muss auf jeden Fall "volatile" deklariert werden. Lesezugriffe auf eine 16 Bit Variable kann ein 8 Bit Prozessor normalerweise nicht atomar abarbeiten. Deshalb müssen für die Dauer des Lesezugriffs auf die Variable (Vergleichsoperation im IF statement) auch die Interrupts gesperrt werden.