Hilfe!

Gast #283001
Lesenswert?

Hallo!

Ich programiere einen AT89C51ED im 8051 Code komplett in ASM und habe
schon Routinen für LCD, I2C Bus geschrieben und funzt auch so weit.
Dort deklarierte ich im Bitadressierbaren Bereich Flags die ich
benötige zum steuern.

Jetzt zum problem: Zur Ausgabe einer Zahl rufe ich es über einen
seperaten LCALL befehl auf.
Beim Debuggen ist mir aufgefallen das beim sichern von PSW und die
Register R0-R7 auf denm Stack den Bitadressierbaere Bereich
überschreiben.

Das find ich ist doch nicht normal diese sollten doch auf dem Stack
abgelegt werden.

Weiss jemand rat was ich falsch mache?  irgendwie blick ich es nicht
was da falsch läuft.




Gruß Klaus
Gast #283003
Lesenswert?

wie Peter schon erklärt hat mußt du denn SP auslagern. Nach einem RESET
liegt der auf Speicherstelle 0x07 im internen RAM.

Wächst der STACK an so schiebt er sich im internen RAM immer weiter
nach oben. Du zerstörst die weiteren Registerbänke, BIT Bereich usw.
usw.

Also mov SP,#60H z.B.

Joe
Gast #283004
Lesenswert?

@Joe und Peter

Vielen Dank für den hinweis!

@Peter: ich habe den Stackpointer nicht verstezt.


Ich bin davon Ausgegangen das sich der Stack selber verwaltet und einen
eigenen Speicherbereich hat.

Muss wohl nochmal Datenblatt genauer anschauen.


Nochmals Danke!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren