schieberegister einlesen

Gast #344844
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
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 ?
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
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
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.
      }
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

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