schieberegister einlesen

Gast #344844
Lesenswert?

hi leute ich möchte ein schieberegister einlesen
und hab mir das dabei ausgedacht.
leider geht es nicht richtig
prinzibiell kann man aber ports so einlesen (at89C4051)
mfg



zahl = 0;
schieberegister = 0;
for (i= 0; i<16; i++)
{
zahl++;
schieberegister = schieberegister << 1;//so gehts in visuall basic
if (P1_0 == 1)
{
schieberegister = schieberegister + 1;
}
schieberegister = schieberegister << 1;
switch (zahl)
     {
      case 4:
        schieberegister = 0;
        break;
      case 8:
            zahl1 = schieberegister;
        schieberegister = 0;
        break;
      case 12:
        zahl2 = schieberegister;
        schieberegister = 0;
        break;
      case 16:
          zahl3 = schieberegister;
        schieberegister = (zahl1*100+zahl2*10+zahl3);
        break;
    }

}
}
Gast #344847
Lesenswert?

was mir net klar ist wieso muss bei visual basic
das "schieberegister = schieberegister << 1;"
vor der if anweisung stehen
for(i = 0; i < 4; i++)
{
schieberegister = schieberegister << 1;
if(Bit)
schieberegister |= 1;
}

muss dann die "schieberegister = schieberegister << 1;"
anweisung beim mycrocontroller
nach der if anweisung kommen ?
#344848
Lesenswert?

Kann eigentlich nicht.
for(i = 0; i < 4; i++)
{
  if(Bit)
    schieberegister |= 1;
  schieberegister = schieberegister << 1;
}

sollte in vb irgentwie so aussehen:

For i = 0 to 3
  if bit == 1 then
    schieberegister = schieberegister | 1;  'geht das überhaupt so in
vb?
  schieberegister = schieberegister << 1;
Next i
#344849
Lesenswert?

Habe ich gerade ein Déjà vu?
Es soll ja der enstprechende Wert für jedes Bit weiter geschoben
werden. Ob eine 1 da steht entscheidet die if-Anweisung. Beispiel:
Am Port liegt nacheinander 1,0,0,1,1 an: Dann würde also beim 1,4 und 5
Bit die If-Bedingung erfüllt sein und der Inhalt des Schieberegisters
wird mit 1 VerODERt. Steht im Schieberegister vorher 01101100 würde
nach der vorODERung 01101101 drin stehen und danach das ganze nach
links geschoben werden, was dann 11011010 ergibt
Gast #344852
Lesenswert?

aber bei dir ergibt es doch dann folgendes


   1.
      schieberegister = 0;
   2.
      for(i = 0; i < 16; i++)
   3.
      {
   4.
      if(Bit)
   5.
      schieberegister |= 1; //zb 00000001
   6.
      schieberegister <<= 1;  //und dann 00000010 was 2 entspricht
   7.
      }
#344854
Lesenswert?

Nein, du willst doch z.B. beispiel ein Folge von einem Port einlesen und
den dann in einem Register speichern oder nicht?
1
schieberegister = 0 //Hier isses noch 0x00
2
for(i = 0; i < 16; i++)
3
{ 
4
  if(Bit)    // Wenn der Portpin auf 1 ist => erfüllt
5
    schieberegister |= 1;   //Ergibt 0x01
6
  schieberegister = schieberegister << 1;  //ergibt 0x02
7
}
Beim nächsten durchgang wird dann wieder das LSB (also das
niederwertigste Bit) mit dem aktuellem Port-Wert belegt. Und das ganze
dann eben 16 mal, so dass ......
argghhh..
mist verdammte. Haste räscht. Das muss natürlich vor das if. Weil sonst
einmal zu viel geschoben wird. Oh man ist glaub zu warm heute.
1
schieberegister = 0 //Hier isses noch 0x00
2
for(i = 0; i < 16; i++)
3
{
4
  schieberegister <<= 1;
5
  if(Bit)    
6
    schieberegister |= 1;  
7

8
}
Boa is mir das peinlich
[/c]

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