Also Ceos, was du da schreibst ist unfug.

In einer Oder-Verknüpfung wird nie auf 0 gestellt wenn es nicht schon 0 ist.
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1

register |=(1<<0) setzt bit0 auf 1
register &= ~(1<<0) setzt bit0 auf 0
und zwar wird immer nur bit0 verändert, die anderen bleiben unverändert.

Siehe auch hier: http://www.mikrocontroller.net/artic...f_auf_Register