-         

Ergebnis 1 bis 5 von 5

Thema: rol und ror

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    473

    rol und ror

    Anzeige

    Hallo da,
    ich hab hier die abgebildete Plattform. mit den zwei Tastern steuere ich die ror und rol Befehle und gebe das Ergebnis auf die LED´s aus. Laut Datanblatt wird das Bit, das normalerweise verlorengehen würde in das Carry geschoben und dann wieder eingegliedert. Genau das passiert bei mir aber nicht und wenn ich´s übertreibe, sind sie alle aus und bleiben es auch.
    Code:
    mainloop:	wdr
    
    	in	r16,PINC
    	ori	r16,0b11101111
    	cpi	r16,0b11111111
    	breq	d
    	in	r16,PINC
    	ori	r16,0b11011111
    	cpi	r16,0b11111111
    	breq	a
    	rjmp	mainloop
    a:
    	rcall	ana
    	rjmp	mainloop
    d:
    	ldi	r31,0b00010000
    	out	PORTB,r16
    	rcall	dec_inc	;Hier den Quellcode eintragen.
    	rjmp	mainloop
    ;------------------------------------------------------------------------
    ana:
    
    bis_converted:
    	in	r16,ADCSRA
    	ori	r16,0b11101111
    	cpi	r16,0b11111111
    	breq	ausgabe
    	rjmp	bis_converted
    ausgabe:
    	in	r18,ADCH
    	out	PORTB,r18
    	ret
    dec_inc:
    
    wieder:
    	sbic	PINC,3
    	rol	r31
    	sbic	PINC,1
    	ror	r31
    	out	PORTB,r31
    loop1:
    	in	r16,PINC
    	ori	r16,0b11111101
    	cpi	r16,0b11111111
    	breq	loop1
    	in	r16,PINC
    	ori	r16,0b11110111
    	cpi	r16,0b11111111
    	breq	loop1
    	in	r16,PINC
    	ori	r16,0b11101111
    	cpi	r16,0b11111111
    	breq	wieder
    	ret
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken test_171.jpg  

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    rol Rn

    ist lediglich syntactic sugar und eine Abkürzung für

    addc Rn, Rn

    Die Rotation geschieht also nicht nur in den 8 Bit des Rn, sondern mit dem 9-Bit-Wert, der sich aud Rn und Carry ergibt.
    Disclaimer: none. Sue me.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.09.2004
    Ort
    Darmstadt
    Alter
    47
    Beiträge
    166
    Hallo dort,

    das Prellen ist keine Erklärung für das Verschwinden der "1". Und dass "rol Rn" gleich "addc Rn, Rn" ist, mag zwar sein, bringt aber auch keine Lösung.

    Normalerweise sollte wiederholtes Ausführen der Rotationsbefehle niemals dazu führen, dass die "1" verschwindet. Sie muss sich immer entweder im Register oder im Carry-Flag befinden. Und da fängt das Problem an: wenn eine Operation auf ein anderes Register - in diesem Fall z.B. cpi r16, * - das Carry-Flag verändert, also löscht, dann war's das mit der Rotation der "1". Ich hab jetzt keine Lust, den Code zu verstehen, aber irgendwo passiert es. Bereinige den Code entsprechend, also vermeide das Löschen des Carry-Flags. Wenn das nicht geht, speichere das Status-Register (SREG) an einem sicheren Platz und hole es vor der Rotation zurück.

    Gruß, Achim.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zitat Zitat von voidpointer
    Und dass "rol Rn" gleich "addc Rn, Rn" ist, mag zwar sein, bringt aber auch keine Lösung.
    Doch schon. Sofern man sich etwas Gehirnschmalz gönnt...

    Code:
    ; doing a ROL
       MOV    Rdummy, Rn   
       ROL    Rdummy
       ROL    Rn
    
    ; doing a ROR
       MOV    Rdummy, Rn
       ROR    Rdummy
       ROR    Rn
    Die Semantik (Bedeutung) eines Befehls zu kennen kann also durchaus hilfreich sein.
    Disclaimer: none. Sue me.

Berechtigungen

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