www.mikrocontroller.net

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


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manuel (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
        ....
        // nächstes Bit anhängen
        pre_command <<= 1;
        if (bit_time > BIT_AVG_TIME)
          pre_command |= 1;
        ...

aber ansonsten ist daran nichts falsch.

Autor: Manuel (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.