Forum: Mikrocontroller und Digitale Elektronik bitweise durchschieben


von Christian Logner (Gast)


Angehängte Dateien:

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?

von Benedikt (Gast)


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...

von dave (Gast)


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

von dave (Gast)


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

von Sebastian (Gast)


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

von Benedikt (Gast)


Lesenswert?

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

von Peter D. (peda)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.