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
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
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.