www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe!


Autor: Klaus...(Norad) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus...(Norad) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.