White_Fox
08.01.2016, 21:26
Hallo
Eine Frage zu dem kleinen Codeschnipsel hier:
Port A ist als Eingang, Port B als Ausgang geschaltet. Jeder Pin von Port B ist mit einer LED bestückt. An Port A hängen zwei Taster. Wird ein Taster gedrückt, springt das Programm in die jeweilige s-Schleife, schreibt 0xFF in das Pin-Register und wartet, bis der Taster wieder losgelassen wird.
l0:
sbis PinA, 0
rjmp l1
rjmp s0
l1:
sbis PinA, 1
rjmp l0
rjmp s2
;Schleife Taster 1
s0:
ldi R16, 0xFF
out PINB, R16
s1:
sbic PinA, 0
rjmp s1
rjmp l0
;Schleife Taster 2
s2:
ldi R16, 0xFF
out PINB, R16
s3:
sbic PinA, 1
rjmp s3
rjmp l0
Laut Datenblatt soll das Schreiben einer 1 ins Pin-Register zur Folge haben, das der jeweilige Pin getoggelt wird. Dies funktioniert in diesem Programm auch, wenn ich vor dem geposteten Codeschnipsel ein Bitmuster auf den LEDs anzeigen lasse, wird es jedesmal brav invertiert.
Was mich aber wundert:
Ich kann eine Schleife nicht zweimal hintereinander ausführen. Wenn ich einen von beiden Tastern drücke, wird das Bitmuster invertiert-so weit, so gut. Wenn ich denselben Taster aber noch einmal drücke, passiert nichts. Ich muß erst den anderen Taster drücken, damit das Bitmuster wieder invertiert wird. Und dann ist es wieder dasselbe, auf nochmaliges Drücken des zweiten Tasters kommt keine Reaktion.
Beide Tasterschleifen führen diesselbe Aktion aus. Es muß auch jedesmal zum Ausgang l0 zurückgesprungen werden, sonst würde der andere Taster nicht ansprechen.
Warum wird ein Taster aber nicht zweimal hintereinander ausgewertet?
Eine Frage zu dem kleinen Codeschnipsel hier:
Port A ist als Eingang, Port B als Ausgang geschaltet. Jeder Pin von Port B ist mit einer LED bestückt. An Port A hängen zwei Taster. Wird ein Taster gedrückt, springt das Programm in die jeweilige s-Schleife, schreibt 0xFF in das Pin-Register und wartet, bis der Taster wieder losgelassen wird.
l0:
sbis PinA, 0
rjmp l1
rjmp s0
l1:
sbis PinA, 1
rjmp l0
rjmp s2
;Schleife Taster 1
s0:
ldi R16, 0xFF
out PINB, R16
s1:
sbic PinA, 0
rjmp s1
rjmp l0
;Schleife Taster 2
s2:
ldi R16, 0xFF
out PINB, R16
s3:
sbic PinA, 1
rjmp s3
rjmp l0
Laut Datenblatt soll das Schreiben einer 1 ins Pin-Register zur Folge haben, das der jeweilige Pin getoggelt wird. Dies funktioniert in diesem Programm auch, wenn ich vor dem geposteten Codeschnipsel ein Bitmuster auf den LEDs anzeigen lasse, wird es jedesmal brav invertiert.
Was mich aber wundert:
Ich kann eine Schleife nicht zweimal hintereinander ausführen. Wenn ich einen von beiden Tastern drücke, wird das Bitmuster invertiert-so weit, so gut. Wenn ich denselben Taster aber noch einmal drücke, passiert nichts. Ich muß erst den anderen Taster drücken, damit das Bitmuster wieder invertiert wird. Und dann ist es wieder dasselbe, auf nochmaliges Drücken des zweiten Tasters kommt keine Reaktion.
Beide Tasterschleifen führen diesselbe Aktion aus. Es muß auch jedesmal zum Ausgang l0 zurückgesprungen werden, sonst würde der andere Taster nicht ansprechen.
Warum wird ein Taster aber nicht zweimal hintereinander ausgewertet?