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
Frank schrieb: > Die Eingänge sind bei einem Atmega328p bei > PC0-PC3 sowie PD4-PD6
1 | val = PINC & 0x0F | PIND & 0xF0; |
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 | }
|
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
|
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!
Ok, stimmt, er schiebt val, dann passt's.
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.
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.