Die Befehle sind soweit ich das sehe Amtel AVR.
http://www.atmel.com/webdoc/avrassem...r.wb_SBIS.html
http://www.atmel.com/webdoc/avrassem...r.wb_SBIC.html
http://www.atmel.com/webdoc/avrassem...r.wb_RJMP.html
http://www.atmel.com/webdoc/avrassem...er.wb_LDI.html
http://www.atmel.com/webdoc/avrassem...er.wb_OUT.html
Code:
l0:
sbis PinA, 0 ;wenn gesetzt springe zu s0 (überspringe Jump l1)
rjmp l1
rjmp s0
l1:
sbis PinA, 1 ;wenn gesetzt springe zu s2 (überspringe Jump l0)
rjmp l0
rjmp s2
;Schleife Taster 1
s0:
ldi R16, 0xFF
out PINB, R16
s1:
sbic PinA, 0 ;wenn zurückgesetzt springe zu l0 (überspringe jump s1 - was eine Warteschleife ist solange der Taster gedrückt ist)
rjmp s1
rjmp l0
;Schleife Taster 2
s2:
ldi R16, 0xFF
out PINB, R16
s3:
sbic PinA, 1 ;wenn zurückgesetzt springe zu l0 (überspringe jump s3 - was eine Warteschleife ist solange der Taster gedrückt ist)
rjmp s3
rjmp l0
ich würde zum Testen mal zwichen:
ldi R16, 0xFF
und
out PINB, R16
eine Zählschleife oder andere Manipulation des Registerwertes einbauen, um zu sehen ob da nicht doch bei jedem Tastendruck was passiert.
Beim schnellen durchsehen kommt mir der Code von der Logik auch korrekt vor.
Weshalb ich auch nicht mehr sagen kann als anstelle der orginal Sequenzen s0: und s2: halt einen testcode zu nehmen.
(eventuell reicht ein LSL und LSR oder ROL/ROR, je nach Bitmuster)
Die Sprunglogik scheint zu funktionieren.
Wenn tatsächlich die Schalter gegen Vss schalten und nicht gegen GND sollte es von der Sprunglogik her richtig sein.
Lesezeichen