Also beginnen wir mal mit der Abfrage auf logisch 0...
die geht genauso wie die Abfrage auf logisch 1, nur mit einem ! davor
Code:
!(PINB & (1<<PINB1))
Weiter geht's mit deinem Code, der in dieser Form nicht funktionieren kann (hauptsächlich wegen der fehlerhaften Abfrage auf logisch 0).
Außerdem passen die Kommentare nicht so ganz, daher habe ich versucht das nochmal etwas übersichtlicher darzustellen:
Code:
//PORTB 1234
// 0001
// 0010
// 0011
// 0100
// 0101
// 0110
// 0111
// 1000
// 1001
// 1010
// 1011
// 1100
Dabei werden 2 Dinge offensichtlich:
1. Das wären die Zahlen von 1 bis 12 im Binärformat...
2. wenn die Bits nicht "rückwärts" angeordnet wären 
Kannst du das noch ändern, oder ist die Zuordnung so festgelegt?
Denn falls die Reihenfolge anders wäre, könnte man deine Funktion bis auf das hier reduzieren:
Code:
int anzahl_Zyl(void) //fragt BP1-PB4 ab und giebt Einstellung Zylinderanzahl zurück
{
DDRB |= 0x00;
return ((PINB & 0x1E) >> 1);
}
Lesezeichen