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
Hängt davon ab, wo Du den Stackpointer hingesetzt hast. Den Stack sollte man beim 8051 auf die letzte benutzte SRAM-Adresse legen. Peter
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
@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!
"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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.