Seriell nach parallel mit shift oder doch nicht?

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

Eine eigene Frage? Dieser Thread ist über 17 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.