Here I am again

Die 16MHz habe ich eingestellt bekommen, allerdings etwas Kurios...
Hier
Externes Bild anzeigen   
Sind 16MHz eingestellt, wobei hier
Externes Bild anzeigen   
8MHz eingestellt sind - das Prozessor Fenster sagt 16MHz und es läuft auch doppelt so schnell wie mit 8MHz ...
Code:
		  		PORTB <<= 1;
    		if (!PORTB){
        		PORTB = 1;
			}
PORTB<<=1 shiftet (<<) die 1 durch den ganzen Port, aber warum bei jedem Zyklus das nächse? Und was genau macht die IF Anweisung?
Da steig ich - auch mit dem tutorial - noch nicht ganz durch.

Code:
	uint8_t run=PINA&PINA0;
if(run==1){ // tu was }
Tut nicht- Erklärung? Vielleicht liegts am Code ... C/C++ hat dann doch ein zwei verschiedenheiten..


Code:
#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h> 



int main (void) {

	DDRB  = 0xff;
	DDRA  = 0x00;
	uint8_t run=PINA&PINA0;
	char auswahl='n';

while(1) { // MAINSCHLEIFE
	if((PINA&(1<<PINA0))&&(auswahl=='n')){ auswahl='r';}
	else if((PINA&(1<<PINA0))&&(auswahl=='r')){ auswahl='n'; }
	else if((PINA&(1<<PINA0))&&(auswahl=='b')){ auswahl='c'; }
	else if((PINA&(1<<PINA0))&&(auswahl=='c')){ auswahl='b'; }
	else if((PINA&(1<<PINA1))&&(auswahl=='r')){ auswahl='b'; }
	else if((PINA&(1<<PINA1))&&(auswahl=='b')){ auswahl='r'; }
		switch(auswahl){
		case 'r': // VORWÄRTS FWD
		  		PORTB <<= 1;
    		if (!PORTB){
        		PORTB = 1;
			}
			break;
		case 'b' :  // RÜCKWÄRTS RWD
			PORTB >>= 1;
			if(!PORTB){
				PORTB=128;
			}
			break;
		}
} // MAINSCHLEIFEN ENDE
 

   return 0; 
}
Das tut soweit alles was ich will, auser der Variablen zuweisung.

Was ist daran C Untypisch? Es ist mit der Version vll ungemütlich geschrieben, Funktioniert aber tadellos