Unregistriert
27.11.2016, 17:44
Hallo Leute,
ich muss für die in Assembler ein "Lauflicht" über die STK500 (mega16) programmieren.
Ich habe mich im Internet informiert wie das rol und das ror funktioniert. Ob ich es verstanden habe ist offen.
Das Programm was ich vorbereitet habe:
.include "m16def.inc"
ldi r16, 0xff
out ddrb,r16
ldi r17, 0x00
out ddrd,r17
ldi r17,0xfe
ldi r16,0xfe
ldi r20,0xff
ldi r21,0xff
loop:
in r18,pind
cp r17,r18
breq lable1
cpi r18,0x7f
brne ende
ror r16
out portb,r16
warteschleife1:
nop
dec r20
brne warteschleife1
nop
dec r21
brne warteschleife1
rjmp loop
lable1:
out portb,r16
rol r16
warteschleife2:
nop
dec r20
brne warteschleife2
nop
dec r21
brne warteschleife2
out portb,r16
ende:
rjmp loop
die Warteschleifen könnt ihr erst mal ignorieren.
Das Ziel ist: Bei jedem Tastendruck soll eine bzw. die nächste LED leuchten.
Wenn ich ROL oder ROR benutze macht er das nicht.
Zb. 1111 1110 wird zu 1111 1100 wenn ich rol benutze.
Sollte es nicht 1111 1101 werden?
Ich danke schon mal für die Antworten.
- - - Aktualisiert - - -
Zb. 1111 1110 wird zu 1111 1100 wenn ich rol benutze.
Sollte es nicht 1111 1101 werden?
rol holt Bit 0 aus dem Carry Flag. Carry Flag wird 0 gewesen sein und Carry ist dann nach dem ersten rol 1, da Bit 7 ins Carry geschoben wird. Ohne jetzt den ganzen unkommentierten und unerklärten Code durchzugehen, könnte ein SEC (Set Carry) an der richtigen Stelle das Problem lösen. Allerdings wird irgendwann die 0 im Bitmuster im Carry "unsichtbar" werden ...
ich muss für die in Assembler ein "Lauflicht" über die STK500 (mega16) programmieren.
Ich habe mich im Internet informiert wie das rol und das ror funktioniert. Ob ich es verstanden habe ist offen.
Das Programm was ich vorbereitet habe:
.include "m16def.inc"
ldi r16, 0xff
out ddrb,r16
ldi r17, 0x00
out ddrd,r17
ldi r17,0xfe
ldi r16,0xfe
ldi r20,0xff
ldi r21,0xff
loop:
in r18,pind
cp r17,r18
breq lable1
cpi r18,0x7f
brne ende
ror r16
out portb,r16
warteschleife1:
nop
dec r20
brne warteschleife1
nop
dec r21
brne warteschleife1
rjmp loop
lable1:
out portb,r16
rol r16
warteschleife2:
nop
dec r20
brne warteschleife2
nop
dec r21
brne warteschleife2
out portb,r16
ende:
rjmp loop
die Warteschleifen könnt ihr erst mal ignorieren.
Das Ziel ist: Bei jedem Tastendruck soll eine bzw. die nächste LED leuchten.
Wenn ich ROL oder ROR benutze macht er das nicht.
Zb. 1111 1110 wird zu 1111 1100 wenn ich rol benutze.
Sollte es nicht 1111 1101 werden?
Ich danke schon mal für die Antworten.
- - - Aktualisiert - - -
Zb. 1111 1110 wird zu 1111 1100 wenn ich rol benutze.
Sollte es nicht 1111 1101 werden?
rol holt Bit 0 aus dem Carry Flag. Carry Flag wird 0 gewesen sein und Carry ist dann nach dem ersten rol 1, da Bit 7 ins Carry geschoben wird. Ohne jetzt den ganzen unkommentierten und unerklärten Code durchzugehen, könnte ein SEC (Set Carry) an der richtigen Stelle das Problem lösen. Allerdings wird irgendwann die 0 im Bitmuster im Carry "unsichtbar" werden ...