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?
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...
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
@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
.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
@dave Ist klar, aber da er die Schiebeanzahl verändert hat, und die LEDs trotzdem dunkel blieben, kann es das nicht sein.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.