www.mikrocontroller.net

Forum: PC-Programmierung Printf -Funktion in For-Schleife


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie kann ich mein Programm ändern, damit ich printf mit dieser Ausgabe
ZB: PINC1,2,4,7 are high und nicht:
PinC1 are High
PinC2 are High
PinC4 are High
PinC7 are High
Ich habe versuch das Treffen in einer anderem Array zu kopieren, aber 
aus der For-Schleife bekomme ich nur das letzte Element.
Danke


         uint8_t PinC_Status[8] = {0, 1, 2, 3, 4, 5, 6, 7};
   uint8_t *Ptr_PinC_Status;
   Ptr_PinC_Status = PinC_Status;
   uint8_t Value = PORTC;

   for( uint8_t i = 0; i < 8; i++ )
   {
     if(Value & ( 1 << i )) {

     printf("PINC%i are high", Ptr_PinC_Status[i]);

     }

   }

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast schrieb:
> Hallo,
> wie kann ich mein Programm ändern, damit ich printf mit dieser Ausgabe
> ZB: PINC1,2,4,7 are high und nicht:
> PinC1 are High
> PinC2 are High
> PinC4 are High
> PinC7 are High

Durch nachdenken?
Was muss in welcher Reihenfolge ausgegeben werden?

Das "PINC" ist fix und wird daher vor der Schleife ausgegeben.
Innerhalb der Schleife wird die jeweilige Zahl (wozu eigentlich das 
Zwischenarray?) ausgegeben, wenn der Pin high ist. Schwierigkeit dabei 
ist eigentlich nur, das Komma entsprechend einzuschmuggeln. Aber da kann 
man sich mit einem Merker behelfen. Das Komma wird nur ausgegeben wenn 
der Merker gesetzt wurde und der wird nach der ersten ausgegebenen Zahl 
gesetzt. Damit kommt vor die erste Zahl kein Komma und bei allen 
weiteren auszugebenen Zahlen kommt ein Komma davor.

Und dann kommt zum Schluss, nach der Schleife der wiederrum konstante 
Text "are high" hinten drann.
    uint8_t Value = PINC;
    uint8_t PrintKomma;

    if( Value != 0 )     // ist überhaupt ein Bit ungleich 0?
    {
      printf( "PINC " );

      PrintKomma = FALSE;

      for( uint8_t i = 0; i < 8; i++ )
      {
        if( Value & ( 1 << i ) )
        {
          if( PrintKomma )
            printf( ", " );
          printf( "%d", (int)i );
          PrintKomma= TRUE;
        }
      }

      printf( " are high" );
    }
    else
      printf( "No Pins on PINC are set" );

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke sehr für die gute Beschreibung

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.