Mal wieder: C, AVR und das Bitshiften

Gast #1980323
Lesenswert?

Sooo... ich hänge nun schon wieder seit knapp 2h an ner blöden Bitschift 
Operation und komme nicht weiter.


Er soll folgende 20Bit ausgeben:

1000 1000 1000 1000 1001

beim shiften fängt er aber leider von hinten an und gibt dieses aus:

1001 0001 0001 0001 0001

1
  unsigned long  mask = 1;
2
  unsigned long bitx =  0x88889;
3

4
  for(ki=0;ki<20;ki++)
5
  {
6

7
    clk = 0;
8
      if(bitx & mask) dat = 1; else dat = 0;
9
    clk = 1;
10
    mask <<= 1;
11
  }

Wo liegt der Denkfehler?!
Gast #1980336
Lesenswert?

Nimm mask auch als "Schleifenzähler":

  unsigned long  mask = 0x80000;
  unsigned long bitx =  0x88889;

  do{
    clk = 0;
      if(bitx & mask) dat = 1; else dat = 0;
    clk = 1;
    }
  while((mask >>= 1));


Nach 20 Durchläufen wird mask 0 (das Bit "fällt nach rechts heraus") und 
die Schleife endet.

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