-         

Ergebnis 1 bis 7 von 7

Thema: Rotate

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2004
    Beiträge
    121

    Rotate

    Anzeige

    Hallo, ich habe eine Variable (ledwf = &B1000). Ich wollte nun die 1 mit dem Rotate-Befehl immer um eine stelle nach rechts wandern lassen, und am ende wider links einlaufen lassen:

    1000
    0100
    0010
    0001
    1000..........

    Rotate ledwf,right,1

    Aber die 1 erscheint erst nach dem 8ten aufruf wider an der ersten position. Mach ich da was falsch ?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    34
    Beiträge
    979
    ich nehme mal an die ledwf variable ist eine byte variable? 8bit=1byte... dann muss man logischerweise 8mal schieben bis die 1 wieder am anfang steht....

    gruss bluesmash

    --edit--

    wenn du immer nach 4mal schieben wieder die 1 an 4. stelle haben wilst mach doch einfach LED=&B10001000

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2004
    Beiträge
    121
    Ja, das ist richtig. Ich darf trotzdem nur 4 bit rotieren. Ich hab einfach einen zähler mitlaufen lassen, der bei 5 die Variable zurücksetzt.
    Aber was ich nicht hin beckomme ist, einen "ein-aus-ein-aus" mit einem Taster zu programieren.

    If Taste = Setsid And Tog = 1 Then
    Tog = 0
    Adr = &B00000100
    Reg = Wf(s)
    Gosub Sidsend
    End If

    If Taste = Setsid And Tog = 0 Then
    Tog = 1
    Adr = &B00000100
    Reg = Wf(s) + 1
    Gosub Sidsend
    End If

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    34
    Beiträge
    979
    sollte doch so funktionieren? ich würde noch ein waitms100 oder höher ind die if schleife einbauen.... sonst wird ein tastendruck gleich mehrmals detektiert... da der mikroprozi einiges schneller ist als du mit dem tastendruck...

    ich würde es so lösen:

    Code:
    if taste=0 then
        waitms 200
    
        toggle setbit
    
        if setbit=0 then
            tu irgendwas
        endif
    
        if setbit=1 then
            tu irgendwas anderes
        endif
    endif
    gruss bluesmash

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    29.07.2006
    Ort
    Heidenheim
    Alter
    57
    Beiträge
    40
    Zu 1:
    Ich schätze, Du könntest auch eine Variable auch mit ledwf_A = &B10001000 initialisieren. Diese dann wie gehabt rotieren.
    Danach einfach:
    ' Ledwf = Ledwf And &B00001111 ........Blödsinn. So sollte es aussehen
    Ledwf = Ledwf_A And &B00001111

    Sollte so funktionieren.

    Zu 2. Das sollte meiner Meinung nach so aussehen:

    Code:
    If Taste = Setsid Then
      If Tog = 1 Then
        Tog = 0
      Elseif Tog = 0 Then
          Tog = 1
      End If
      Adr = &B00000100
      Reg = Wf(s) + 1
      Gosub Sidsend
    End If

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Ort
    Potsdam
    Beiträge
    190
    Jup! Würd ich ähnlich machen - einfach das passende Bit vier stellen weiter Richtung MSB oder LSB auch setzen und gut ist. Dann kann bei rotate nix schief gehn.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Vom Prinzip her würde es übrigens ausreichen, das MSB dieser Variable zu Testen und beim vorhandensein einer 1 einfach die nibbles zu swapen ...

    Ich hab allerdings keine Ahnung ob dieses mit Bascom realisierbar ist.

    Alternativ ist der Vorschlag meines Vorposters im übrigen auch nicht verkehrt.
    Anstatt einer &B00000100 könnte man natürlich auch ein &B01000100 hineinschreiben. Allerdings sollte man vor weiterer Verwendung dieses Wertes (z.B. für eine Adresse) die oberen 4 Bits maskieren.

    Grüße,
    da Hanni.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •