PORTA |= (1<<2);
ist abgekürtzt: PORTA = PORTA | (1<<2);

Durch 1<<2 wird die zahl 1 binär 00000001 um zwei stellen nach links verschoben also 00000100.

jetzt wird das ergebnis mit PORTA verodert

00000[highlight=red:fd71d6c119]1[/highlight:fd71d6c119]00
01011[highlight=red:fd71d6c119]0[/highlight:fd71d6c119]11 PORTA
-------------
01011[highlight=red:fd71d6c119]1[/highlight:fd71d6c119]11

ebenso funktioniert es beim löschen.

PORTA &= ~(1<<2);
ist abgekürtzt: PORTA = PORTA & ( ~(1<<2));

erst wird wie der die zahlt eins um 2 stellen nach links verschoben

dann wird sie mit "~" invertiert (einsen werden zu nullen und nullen zu einsen).
und dann wird das ergebnis mit PORTA verundet

11111[highlight=red:fd71d6c119]0[/highlight:fd71d6c119]11
01011[highlight=red:fd71d6c119]1[/highlight:fd71d6c119]11 PORTA
-------------
01011[highlight=red:fd71d6c119]0[/highlight:fd71d6c119]11

MfG Martin