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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren