mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik bitweise durchschieben


Autor: Christian Logner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe schon ein bischen mit dem 80535 aus der 8051 familie in
Assembler programmiert und wollte eben auf meinem atmega8 etwas
nachmachen. Und zwar wollte ich im Register ein bit von links nach
rechts durchschieben. Beim 80535 war es glaube ich so das wenn man z.B.
von links nach rechts geschoben hat, das dieses bit dann nach 8 mal
schieben wieder an der ersten Stelle ankam(ohne carry). Das habe ich
eben ausprobiert aber nach achtmal oder mehrmals schieben bleiben meine
LED's dunkel. Hab ein jpeg angehängt um zu zeigen wie ich das meine.
Liege ich da falsch?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim AVR gibt es lsr und ror.
Beim ror werden die Daten so geschoben wie du es willst, bei lsr fallen
die Bits raus und die fehlenden Stellen werden mit 0en gefüllt.
Vermutlich hast du lsr verwendet...

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man muss halt LSR (logical shift right) und ich habs dann einfach
gemacht:
lsr register
tst register
brne label1
ldi register, 0b10000000
label1:
..weiter

einmal schieben, dann schaun, ob du die 1 grad rausgeschoben hast...
Wenn ja, dann eine neue reinschreiben.

dave

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Benedikt
Auch bei ROR (rotate right through carry) hast du einen Zyklus, bei dem
das Register 0 ist, und zwar, wenn die 1 im Carry liegt.

dave

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.include "m8def.inc"

.def tmp=r16

rjmp main

main:
  ldi  tmp,low(ramend)
  out SPL,tmp
  ldi  tmp,high(ramend)
  out SPH,tmp
  ldi  tmp,0xff
  out  DDRB,tmp
  ldi  tmp, 1
loop:
  ror  tmp
  out portb,tmp
  rjmp loop

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@dave
Ist klar, aber da er die Schiebeanzahl verändert hat, und die LEDs
trotzdem dunkel blieben, kann es das nicht sein.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Rotieren (RR A) gibt es beim AVR nicht, es geht immer nur über Carry
(wie RRC A).

Hier mal ein Beispiel, wie man mit einem Compare das richtige Carry
erzeugen kann (mein Beitrag):

http://www.mikrocontroller.net/forum/read-1-183367.html#new


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.