Microchip C18 Frage

Gast #268937
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
Gast #268938
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.