Forum: Mikrocontroller und Digitale Elektronik Hilfe!


von Klaus...(Norad) (Gast)


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

von peter dannegger (Gast)


Lesenswert?

Hängt davon ab, wo Du den Stackpointer hingesetzt hast.

Den Stack sollte man beim 8051 auf die letzte benutzte SRAM-Adresse
legen.


Peter

von Joe (Gast)


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

von Klaus...(Norad) (Gast)


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!

von peter dannegger (Gast)


Lesenswert?

"Ich bin davon Ausgegangen das sich der Stack selber verwaltet ..."

wenn Du in C programmierst, stimmt das auch.

Aber in Assembler muß man immer alles selber machen.


Peter

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.