Servus an alle ich versuche mit den registern zu arbeiten und so die lampal an zu steuern also im end effekt möchte ich überprüfen ob der Stackpointer richtig arbeitet das programm soll folgendes tun: wenn ich die taste 7 drücke soll er es im r30 ablegen und wenn ich die taste 0 drücke im r28 die led 3 soll nur dann leuchten, wenn beide gleichzeitig gedrükt sind. im AVR Studio 4.14 hab ich es geschrieben, assembliert und simuliert es funktioniert wie ich es haben will doch der praxis test widerlegt es ich drücke taste 7 und led 3 leuchtet ich drücke taste 0 und led 3 leuchtet soll sollte es nicht sein! könnt ihr mir bitte helfen??? ich kann meinen fehler nicht finden :-(
Habe mir den Code jetzt nicht so genau angeschaut. Aber Du weißt, daß die LEDs low-aktiv sind. Also eine LED leuchtet wenn der entsprechende Ausgangspin low ist.
Hallo,
dann aber eher zufällig?
tst r28
breq led_a
tst r28
brne wow
tst r30
breq led_a
tst r30
brne wow2
hier springst Du nach wow bzw. wow2
wow: tst r30
breq led_a
rcall led
dort rufst Du als Subroutine led auf
led:
sbi portb,1
pop r28
pop r30
rjmp haupt
led holr 2 Register vom Stack, die nie gesichert wurden, Du holst also
die Rückspringadresse vom Stack, die mit rcall led dort abgelegt wurde.
Dann springst Du nach haupt zurück.
Ist das so Absicht, um Stackspielereien zu machen?
Anmerkung:
wozu gibst Du die Interrupts frei, wenn Du keine benutzt?
tst r28
breq led_a
tst r28
brne wow
Wozu hier 2x tst r28?
Die Srünge ändern die Flags nicht,
tst r28
breq led_a
brne wow
macht also genau das Gleiche.
tst r28
breq led_a
rjmp wow
macht auch das Gleiche, hat aber den großen Vorteil, daß man nicht einem
Programmverlauf danach zu folgen versucht, den es da garnicht geben
kann.
Spätestens wenn man nach ein paar Monaten in sowas reinschaut, wundert
man sich darüber...
Gruß aus Berlin
Michael
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.