ja da hab ich mich vertan mit den & und |. sry.

ohne volatile wird von der variable eine kopie im register angelegt damit sie schneller ist. und diese kopie kann jedoch nicht durch einem interrupt etc verändetr werden.
das volatile verhindert das kopien angelegt werden.