Seriell nach parallel mit shift oder doch nicht?

Gast #1358517
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
#1358525
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.

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