Hoppala,
was muss ich da lesen, mit |= werden normalerweise die entsprechenden Bits gesetzt !

@paulspiegel
der AVR hat keinen Pulldown, dH. wenn der Pullup nicht gesetzt ist hängt das Signal in der Luft, und es gibt evtl. Zufallswerte an den Eingängen.
Eine mögliche Lösung wäre, die Pullups zu aktivieren, und dann nach den DIP-Schaltern die Leitung auf Masse zu legen, dann brauchts keine externen Widerstände !

Du stellst deine Werte aber auch etwas kompliziert zusammen, wenn die Eingänge so schön beieinander liegen könnte man das auch zB. so machen:

Code:
unsigned int Platinenerkennung (void)
{
   unsigned int auswahl = 0x00;
   auswahl = PINC & 0x0F;     // die unteren 4 Bits einlesen
   if ((auswahl == 0) || (auswahl > 12)) {
       auswahl = 13;
   }
   return auswahl;
}
Evtl. wäre es noch praktisch, nicht einen Integer zu verwenden sondern nur ein Byte bzw. char, denn ein Port kann sowieso nur ein Byte gross werden !
also unsigned char auswahl ...