www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Microchip C18 Frage


Autor: Kent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich möchte gerne Fehlercodes durch Blinkmuster einer LED ausgeben. Das
Muster wird in einem 8-Bit Wort "status" definiert.

Mein erster Ansatz war, einfach durch das Wort zu shiften und so die
einzelnen Bits nacheinander auf die LSB-Position zu bringen, die
anscheinend(???) ausschlaggebend ist, wenn man einem IO-Port ein 8-Bit
Wort zuweist:

while(1)
{
  tmp=status;
  for(i=0;i<8;i++)
  {
    PORTCbits.RC0 = tmp;
    tmp>>=1;
  }
}

Verrückterweise funktioniert das aber nicht; irgendwie werden zuviele
Einsen ausgegeben. Das Blinkmuster 10100000 zum Beispiel sieht aus wie
ganz normales gleichmäßiges Blinken.

Mein zweiter Anlauf funktioniert zwar, aber irgendwie kann das nicht
die wahre Lösung sein:

while(1)
{
  for(i=0;i<8;i++)
  {
    PORTCbits.RC0 = (status&(1<<i))>>i;;
  }
}

Zwei Bitshift-Operationen sind in meinen Augen zuviel Aufwand für so
eine simple Sache. Wieso funktioniert mein erster Ansatz nicht?

Vielen Dank schonmal

Kent

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kent

Ich kann mir vorstellen, dass im ersten Fall die Variable tmp bis zur
letzen Shiftoperation immer > 0 ist. Deshalb wird auf dem IO-Pin eine 1
ausgegeben.

Lösung 2 sieht meiner Meinung nach nicht schlecht aus.
Funktionieren könnte auch

 for(i=0;i<8;i++)
 {
    PORTCbits.RC0 = Status & 0x01;
    Status >>1;
 }

Das ist eine Shiftoperation weniger.

Beste Grüsse
Geri

Autor: Kent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werde ich mal probieren; danke für den Vorschlag!

Herzliche Grüße

Kent

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.