Hallo,
Ich schau mir eben das AVR-Tutorial an und habe ein Programm getestet,
das beim drücken des ersten Tasters die 2., 4., 6. und 8. LED leuchten
lässt.
Nun wollte ich es etwas modifizieren, so dass das Programm danach noch
weiter läuft, und man, wenn man nun den Taster 2 drückt, die 3. LED
leuchtet.
Warum funktioniert das folgende Programm nicht?
.include "m8515def.inc"
ldi r16, 0b11111111
out DDRB, r16
ldi r16, 0b00000000
out DDRD, r16
ldi r16, 0xFF
out PORTB, r16
loop: sbic PIND, 0
rjmp loop
cbi PORTB, 3
cbi PORTB, 1
cbi PORTB, 5
cbi PORTB, 7
loop: sbic PIND, 1
rjmp loop
cbi PORTB, 4
ende: rjmp ende
Hallo,
na welche Fehlermeldung bekommst Du denn wohl vom Assembler? :)
PS: Dein Programm hat nur eine Endlosschleife:
ende: rjmp ende
Wäre sonst ja auch ziemlich sinnlos.
Gruß aus Berlin
Michael
doppeltes loop, schon klar
aber wie soll ich es sonst machen? Kann mir nicht vorstellen, dass man
in einem assemblerprogramm nur eine endlosschleife verwenden kann
Hallo,
naja, ich hatte es nur nicht korrigiert, weil ich so dacht, er bemerkt
die Fehlermeldung und tauft eins der Label selbst um...
PS: ich habe meinen AVR jetzt übertaktet.
Nun schafft er eine Endlosschleife in 10 Sekunden... ;-))
Gruß aus Berlin
Michael
für die loops (warteschleifen) musst du eine abbruchbedingung einbauen.
im moment hast du insgesamt drei endlosschleifen (loop1, loop2, ende),
wobei es schon aus der ersten kein "entkommen" gibt.
als tipp nenne ich die sbis/sbic (bzw. sbrs/sbrc) befehle. wenn du diese
passend in die warteschleifen einbaust, kannst du diese ganz einfach
beenden...