Forum: Mikrocontroller und Digitale Elektronik Portpins einzeln in Schleife abfragen auf PIC18


von Florian P. (ol1cr0n)


Lesenswert?

Hallo,

ich würde gerne jeden einzelnen Pin eines Ports abfragen und 
entsprechend des Zustands eine Aktion ausführen. Das ganze soll auf 
einem Pic18F45k22 laufen, ist ja aber eher eine Grundsatzfrage.
Nun könnte man das Problem ja für jeden Pin mit einer einzelnen 
If-Abfrage erledigen:
1
If(PORTBbits.PORTB0 == 1){
2
  mache etwas;}
3
else
4
  mache etwas anderes;
5
}
6
7
...
8
9
If(PORTBbits.PORTB7 == 1){
10
  mache etwas;}
11
else
12
  mache etwas anderes;
13
}


Ich würde das Ganze nun gerne in einer Schleife lösen, in etwa so:
1
for (i=0x00; i<8; i++){
2
  If(PORTBbits.PORTBi == 1){
3
    mache etwas;
4
  }
5
  else
6
    mache etwas anderes;
7
  }
8
}

Gibt es dazu eine simple Möglichkeit?

Nur um der Frage die mit Sicherheit kommen wird, vorzugreifen:
Für jeden Portpin soll die gleiche Aktion durchgeführt werden in der 
sich nur "i" unterscheidet. In dem konkreten Fall ein String versendet 
werden, der immer gleich bleibt, bis auf eine Stelle, welche aus "i" als 
PIN Index besteht.


Danke und Gruß

von Witkatz :. (wit)


Lesenswert?

Eine Möglichkeit von vielen:
1
for (char i=0; i<8; i++) {
2
    if(PORTB & (1 << i)) {
3
        ;//mache etwas;
4
    }
5
}

von A. S. (Gast)


Lesenswert?

if (PORTB & (1<<i))

von Florian P. (ol1cr0n)


Lesenswert?

Danke für die schnellen Antworten :) Manchmal sieht man den Wald vor 
lauter Bäumen nicht :(

Problem gelöst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.