Forum: Mikrocontroller und Digitale Elektronik Eingänge in verschiedene Ports mit for-schleife abfragen


von Frank (Gast)


Lesenswert?

Hallo, ich habe mehrere Eingänge, die ich gerne in einer For-Schleife 
abfragen möchte. Leider war es nicht möglich, die alle auf einem Port zu 
legen.
Ist es trotzdem irgendwie möglich die Eingänge in einer For-Schleife 
abzufragen?
Die Eingänge sind bei einem Atmega328p bei
PC0-PC3 sowie PD4-PD6
Bis jetzt habe ich einfach alles untereinander geschrieben, was auch 
funktioniert. Da aber immer das selbe passiert (nur mit anderen 
PArametern, die ich mir dann aus einer Liste holen kann) wollte ich das 
kürzen.

Frank

von Ingo (Gast)


Lesenswert?

Code?

von Peter D. (peda)


Lesenswert?

Frank schrieb:
> Die Eingänge sind bei einem Atmega328p bei
> PC0-PC3 sowie PD4-PD6
1
  val = PINC & 0x0F | PIND & 0xF0;

von Rolf M. (rmagnus)


Lesenswert?

Peter D. schrieb:
> val = PINC & 0x0F | PIND & 0xF0;

Und dann
1
for (uint8_t i = 0; i < 8; i++, val >>= 1)
2
{
3
    // Bit Nummer i auswerten
4
    bool bit = val & 1;
5
}

von MWS (Gast)


Lesenswert?

Rolf M. schrieb:
>     bool bit = val & 1;

Fast ;D

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

MWS schrieb:
> Rolf M. schrieb:
>>     bool bit = val & 1;
>
> Fast ;D
Wieso? Passt doch!

von MWS (Gast)


Lesenswert?

Christopher B. schrieb:
> Wieso? Passt doch!

Dann lies den Kommentar und frag' Dich nach dem Sinn in einer Schleife 
mehrere Pins abfragen zu wollen und immer mit einer eins zu ver-und-en.
1
     // Bit Nummer i auswerten

von Fire H. (fireheart)


Lesenswert?

Frank schrieb:
> Ist es trotzdem irgendwie möglich die Eingänge in einer For-Schleife
> abzufragen?
> Die Eingänge sind bei einem Atmega328p bei
> PC0-PC3 sowie PD4-PD6


in   r16,PINC
andi r16,$0F
in   r17,PIND
andi r17,$70
or   r16,r17  ; now r16 contains bits 0 - 6


war eigentlich eine geniale Belegung der Ports ... nicht mal schieben 
war notwendig!

von MWS (Gast)


Lesenswert?

Ok, stimmt, er schiebt val, dann passt's.

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

MWS schrieb:
> Christopher B. schrieb:
>> Wieso? Passt doch!
>
> Dann lies den Kommentar und frag' Dich nach dem Sinn in einer Schleife
> mehrere Pins abfragen zu wollen und immer mit einer eins zu ver-und-en.
> // Bit Nummer i auswerten

Brauch ich nicht, aber du solltest den Code nochmal genau lesen. 
Besonderes Augenmerk auf den Schleifenkopf.

von nicht"Gast" (Gast)


Lesenswert?

Christopher B. schrieb:
> Brauch ich nicht, aber du solltest den Code nochmal genau lesen.
> Besonderes Augenmerk auf den Schleifenkopf.

Oo Style Diskussion incoming :)

Ich persönlich würde ja nichts in den Schleifenkopf stecken, was nicht 
unbedingt nötig ist. Das verringert die Lesbarkeit enorm( wie man 
sieht).

von Rolf M. (rmagnus)


Lesenswert?

nicht"Gast" schrieb:
> Ich persönlich würde ja nichts in den Schleifenkopf stecken, was nicht
> unbedingt nötig ist. Das verringert die Lesbarkeit enorm( wie man
> sieht).

Unbedingt nötig ist im Schleifenkopf gar nichts. Man könnte die Schleife 
ja auch so schreiben:
1
uint8_t i = 0;
2
for (;;)
3
{
4
    if (i < 8)
5
    {
6
        // Bit Nummer i auswerten
7
        bool bit = val & 1;
8
9
        i++;
10
        val >>= 1;
11
    }
12
    else
13
    {
14
        break;
15
    }
16
}

Ich hab es im Prinzip so geschrieben, weil val für mich quasi die 
Variable ist, über die iteriert wird. Nur hat mir ein Abbruchkriterium 
gefehlt, deshalb habe ich i noch dazu geschrieben.

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.