... Das kann man abfragen, zB mit: ...
Bei meiner (Programmiersprachen-) Leseschwäche sieht das deutlich aufwändiger aus, aber ich komme damit besser zurecht.

Hier ein Beispiel für zwei Jumper auf PB6 und PB7. Wichtig im Code ist nur die Zeile nach "// Anwendung im Code". Wie gesagt, mehr Aufwand, ich lese das besser.

Code:
// Ports+Pins als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
//      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
  DDRB  = 0b00111111;   // siehe aktuell oben
  PORTB = 0b11000000;   //    und Port/Pull Ups (1)  aktivieren
// ...
  #define IsBitSet(ADDR,BIT)     (((ADDR)  &  (1<<BIT))?1:0)    // Fragt Bit = 1?
  #define IsBitClr(ADDR,BIT)     (!((ADDR)  &  (1<<BIT))?1:0)   // Fragt Bit = 1?
// ...
// - - - - - - - - - - - - - - - -
  #define JUMPER_PORT   PINB    //
  #define JMP_6           6     //
  #define JMP_7           7     //
// ...
// - - - - - - - - - - - - - - - -
  #define JUMPER6_an    IsBitClr (JUMPER_PORT, JMP_6)   // Jumper 6 gesetzt ??
  #define JUMPER6_aus   IsBitSet (JUMPER_PORT, JMP_6)   // Jumper 6 gelöst ??
// ...
// - - - - - - - - - - - - - - - -
// Anwendung im Code
  if (JUMPER6_an)  tu_das();    // Aktion wenn Jumper gesetzt ist
 
// ============================================================================== =
// Ein Beispiel bei einer sinngemäßen Tastenanwendung in einem meiner Codes
  if ( Taste1_an )
  {                             //
    SetBit ( PrtLED, L1r );     // Zünde rote LED, sobald Taste gedrückt
    while  ( Taste1_an ) {}     // warten, bis Taste1 gelöst ist
    ClrBit ( PrtLED, L1r );     //
    wms (  100);                //
    u0st1();                    // RX-Tx-UART0(PD) zum Einstellen               rUn
    wms (   10);                // Wait
    SrvTST_06 ();               // Servo 1 mit Verzögerung testen               r1n
  }             // Ende if ( Taste1_an ) ...