Forum: Compiler & IDEs Seriell nach parallel mit shift oder doch nicht?


von Manuel (Gast)


Lesenswert?

Hallo!

Ich versuche gerade einen Decoder für meine Ferbedienung zu schreiben. 
Jetzt hab ich in meiner Interruptroutine folgendes:

            if (bit_time > BIT_AVG_TIME) {
        pre_command <<= 1;
        pre_command |= 1;
      }
      else {
        pre_command <<= 1;
      }

das ganze funktioniert aber leider nicht. Wenn das erste ankommende Bit
eine 0 ist, passiert beim links shiften natürlich nix :-).

Was gibt es für Alternativen? Ich kann jetzt natürlich abfragen welches 
Bit gerade bearbeitet wird und dann entsprechend setzten; da ich aber in 
ner Interruptroutine bin, frage ich mich, ob es auch einfacher geht???

Viele Grüße
  Manuel

von Manuel (Gast)


Lesenswert?

Ok, ich glaub ich setzte einfach das erste Bit und schiebe es dann 
später nach hinten raus :-)

von Karl H. (kbuchegg)


Lesenswert?

Manuel schrieb:
> Hallo!
>
> Ich versuche gerade einen Decoder für meine Ferbedienung zu schreiben.
> Jetzt hab ich in meiner Interruptroutine folgendes:
>
>             if (bit_time > BIT_AVG_TIME) {
>         pre_command <<= 1;
>         pre_command |= 1;
>       }
>       else {
>         pre_command <<= 1;
>       }
>
> das ganze funktioniert aber leider nicht. Wenn das erste ankommende Bit
> eine 0 ist, passiert beim links shiften natürlich nix :-).

Und?
Warum ist das so wichtig?
Nach 8-maliger Abarbeitung hast du 8 Bits da reingeschoben. Und wenn 
dann eben das MSB eine 0 ist, dann ist es eben eine 0.


> Was gibt es für Alternativen?

Wozu?
Dein Code ist völlig korrekt. Zumindest was das Einschieben von 0-en und 
1-en angeht. Man könnte das noch etwas kompakter schreiben
1
        ....
2
        // nächstes Bit anhängen
3
        pre_command <<= 1;
4
        if (bit_time > BIT_AVG_TIME)
5
          pre_command |= 1;
6
        ...

aber ansonsten ist daran nichts falsch.

von Manuel (Gast)


Lesenswert?

Ja, du hast natürlich vollkomen recht. Ich such wieder Fehler wo keine 
sind :-(.

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
Noch kein Account? Hier anmelden.