Forum: Mikrocontroller und Digitale Elektronik Logikproblem


von edd (Gast)


Lesenswert?

Hallo Leute,

Ich arbeite mich erst in C++ und MC Technik ein.
Nun möchte ich folgende Aufgabenstellung lösen und weiss nicht mehr 
weiter.

Ich möchte die Bytereihung beibehalten und über die serielle augeben.

ich erhalte aber immer folgende Ausgabe "01110000",ich möchte aber
"00001110" ausgeben.

Der Fehler liegt sicher hier "byte mask = 0x01; mask; mask <<= 1"
was muss ich ändern dass sich die Ausgabe dreht ?

lg eddi


#include <SoftwareSerial.h>

    void setup()
    {
    Serial.begin(57600);
    }



    void loop()
    {
     byte test = 00001110;

     for (byte mask = 0x01; mask; mask <<= 1)
      {
        if (test & mask) // wähle das  bit
           Serial.print("1"); // send 1
        else
           Serial.print("0"); // send 0
      }
    }

von Guest (Gast)


Lesenswert?

mask mit 0x80 initialisieren und nach rechts statt links schieben.

von Timmo H. (masterfx)


Lesenswert?

1
void loop(){
2
  byte test = 0b00001110;
3
  byte mask = 0x80;
4
     
5
  do{
6
    if (test & mask) // wähle das  bit
7
       Serial.print("1"); // send 1
8
    else
9
       Serial.print("0"); // send 0
10
11
    mask >>= 1;
12
  }while(mask);
13
}

: Bearbeitet durch User
von edd (Gast)


Lesenswert?

Du meinst so ?

byte mask = 0x80; mask; mask >>= 1

von edd (Gast)


Lesenswert?

Danke Timmo funktioniert :-)

lg eddi

von ed (Gast)


Lesenswert?

Leider hänge ich bei meinem Problem noch immer etwas fest.

Obige Lösung funktioniert aber nur mit einem Wert in einer Varianblen
   Warum bekomme ich dann verschiedene Werte ob ich den wert aus einer 
Variablen nehme oder aus einem Array ?

lg ed

#include <SoftwareSerial.h>

    void setup()
    {
    Serial.begin(57600);
    }


     unsigned long Long_Array1[2] = {918016,9502976};

     uint8_t i;

    void loop()
    {
   // Ausgabe Long_Array1

    long test;
    long mask = 0x800000;
    for (i=0; i<2; i++);
    {
     // test = Long_Array2[i];   // nehme ich die Daten aus dem Array 
bekomme ich folgende Ergebnis: 000000000010010110000000
     test = 918016;          // nehme ich die Daten direkt aus der 
Variablenrehalte ich das Richtige Ergebins: 000011100000001000000000
    do{
      if (test & mask) // wähle das  bit
         Serial.print("1"); // send 1
      else
         Serial.print("0"); // send 0
      mask >>= 1;
    }while(mask);

    }
    Serial.println(" ");
}

von Timmo H. (masterfx)


Lesenswert?

Little-Endian...

von ed (Gast)


Lesenswert?

Hi Timmo

und wie kann ich das umgehen ?

lg eddi

von Timmo H. (masterfx)


Lesenswert?


von ed (Gast)


Lesenswert?

Schau ich mir gleich , danke

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.