cyklus switch

Takto to můžeš testovat jen pokud zajistíš, že v jednu chvíli bude sepnut jen jeden vstup. Jinak bys tam musel mít 255 case. Jednodušší je testovat jednotlivé bity portu, tam máš jen 8 podmínek. Např:

#define bit_get(adr, bit) ((adr) & (1<<bit)) // hodnota bitu (váha)

a pak ti stačí testovat takto:

if (bit_get(PORTA, 0) == 1) {proveď něco při 1;} else {proveď něco při 0;}
if (bit_get(PORTA, 1) == 1) {proveď něco při 1;} else {proveď něco při 0;}
if (bit_get(PORTA, 2) == 1) {proveď něco při 1;} else {proveď něco při 0;}
if (bit_get(PORTA, 3) == 1) {proveď něco při 1;} else {proveď něco při 0;}
if (bit_get(PORTA, 4) == 1) {proveď něco při 1;} else {proveď něco při 0;}
if (bit_get(PORTA, 5) == 1) {proveď něco při 1;} else {proveď něco při 0;}
if (bit_get(PORTA, 6) == 1) {proveď něco při 1;} else {proveď něco při 0;}
if (bit_get(PORTA, 7) == 1) {proveď něco při 1;} else {proveď něco při 0;}

a tím máš zajištěno, že se ti projede vždy celý port a odchytíš na něm jakoukoli změnu.