Problem mit Stackpointer ATMEGA851516PU0840

Gast #1355718
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!
#1355770
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.
Gast #1355772
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?
Gast #1355885
@ 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...
Gast #1355896
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
Gast #1355911
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
Gast #1355919
"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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.