Forum: Mikrocontroller und Digitale Elektronik Atmel Mega8 auf STK 200


von Igor M. (nooby)


Angehängte Dateien:

Lesenswert?

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  :-(

von Der Teufel (Gast)


Lesenswert?

Aktiviere einfach die int. pullups von PortD.

Gruß

von Igor M. (nooby)


Angehängte Dateien:

Lesenswert?

danke für den Tip
hab ich gemacht funktionirt immer noch nicht
schade

von Der Teufel (Gast)


Lesenswert?

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.

von Der Teufel (Gast)


Lesenswert?

Bei dem STK200 auch noch die LED-Jumper setzen.

von Igor M. (nooby)


Lesenswert?

sind gesetzt,
sie leuchten schon aber nicht wie es sein sollte

von Igor M. (nooby)


Lesenswert?

ja schon

von Igor M. (nooby)


Angehängte Dateien:

Lesenswert?

So endlich
habs hin gekriegt
danke für die hilfe
cao
bis nächstes mal

von Michael U. (amiga)


Lesenswert?

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

von Igor M. (nooby)


Lesenswert?

also hab mich doch geirrt
schade
ich probiers weiter aus

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
Noch kein Account? Hier anmelden.