Hallo zusammen. Ich bin ein uC-Neuling und habe mal ein kleines Programm ausprobiert und will nur mal Anfangs was Blinken lassen, dann bin ich schon mal zufrieden. Ich nutze AVR STudio und eine STK500 Wenn ich mein Programm im AVR Studio simuliere, geht alles wunderbar. Wenn ich das gleiche aber auf den uC lade, dann läuft das Programm aber nicht nach dem Return an die letzte Stelle, sondern fängt wieder von vorne an. Ich vermute dass es am Stack-Pointer liegt. Ich bekomm es aber nicht gebacken weil ich einfach ein hilfloser Anfänger bin. /* ******************************************************** */ .include "m8def.inc" ; Definitionsdatei für den Prozessortyp einbinden ; Stackpointer initialisieren .def tmp=r17 ldi tmp,low(ramend) out SPH,tmp ldi tmp,high(ramend) out SPL,tmp ; I/Os Definieren (A-C=OUT, D=IN) ldi r16, 0xFF ; lade Arbeitsregister r16 mit der Konstanten 0xFF out DDRA, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben ldi r16, 0x00 ; lade Arbeitsregister r16 mit der Konstanten 0x00 out DDRD, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben loop: ; 10101010 und 01010101 im Wechsel, jedes Register gleichzeitig ldi r16, 0b01010101 ; in r16 laden out PORTA, r16 rcall Zeit ldi r16, 0b10101010 ; in r16 laden out PORTA, r16 rcall Zeit rjmp loop ; zurück zu loop /* *************************** */ Zeit: /**** ZEIT *******/ ldi r20, 0xf0 ldi r21, 0xff ldi r22, 0x00 Zeit_21_m: dec r20 cp r20,r22 ; Vergleiche Register BRNE Zeit_21_m ; Wenn ungleich, Springe zu Zeit_21_m ldi r20, 0xff dec r21 cp r21,r22 ; Vergleiche Register BRNE Zeit_21_m ; Wenn ungleich, Springe zu Zeit_21_m RET /* ******************************************************** */ Kann mir jemand helfen und sagen was ich vergessen habe? Wäre klasse!
Ohne deinen Code ganz gelesen zu haben... Hab beim ersten Fehler aufgehört: ldi tmp,low(ramend) out SPH,tmp ldi tmp,high(ramend) out SPL,tmp Du lädst in das High-byte des Stackpointers (SPH) den low-wert von Ramend und umgekehrt. So muss es eigentlich sein: ldi tmp,high(ramend) out SPH,tmp ldi tmp,low(ramend) out SPL,tmp Ich hab jetzt die Ram-Grenzen vom 8515 nicht genau nachgeschaut, aber damit dürftest du wohl irgendwo im IO-bereich rumschreiben. Schau einfach mal ob's läuft, wenn du das richtest.
Der Threadtitel lautet _Problem mit Stackpointer ATMEGA851516PU0840_ Die erste Zeile im Code lautet: .include "m8def.inc" ; Definitionsdatei für den Prozessortyp .... ..... Warum in Gottes Namen kräuseln sich mir da die Fußnägel?
@ sebastian: Leider brachte das tauschen keinen Erfolg. Hatte da schon einige möglichkeiten versucht @ Magnus Müller: Warum in Gottes Namen kräuseln sich dir da die Fußnägel? Sag doch bitte was da falsch ist. Wie gesagt, bin blutiger Anfänger...
Hi >Sag doch bitte was da falsch ist. Wie gesagt, bin blutiger Anfänger... Hat er doch: Problem mit Stackpointer ATMEGA851516PU0840 .include "m8def.inc" ; Definitionsdatei für den... Und welchen Controller benutzt du nun wirklich? MfG Spess
Ich benutze einen ATMEGA851516PU0840. Ich dachte m8 steht für "MEGA8". Ich mache grad einen suchlauf auf der AVR-CD, damit ich hoffentlich eine passende datei finde. Welche benötige ich? (ist noch nichts gefunden worden)
Hi Welche benötige ich? (ist noch nichts gefunden worden) -> m8515def.inc >ch mache grad einen suchlauf auf der AVR-CD Wieso auf CD suchen? AVR-Studio-Verzeichnis->ASSEMBLER->APPNOTES AVR-Studio-Verzeichnis->ASSEMBLER2->APPNOTES MfG Spess
"Mega8515 ist kein Mega8"...sondern ...? Entschuldige bitte, ich kann jetzt die Zahl nicht zuordnen. Von was hängt das ab? Wo kann ich sehen welche include Datei ich benötige?
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.