Forum: Mikrocontroller und Digitale Elektronik Problem mit Stackpointer ATMEGA851516PU0840


von Markus Retter (Gast)


Lesenswert?

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!

von Sebastian .. (zahlenfreak)


Lesenswert?

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.

von Magnus Müller (Gast)


Lesenswert?

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?

von Markus Retter (Gast)


Lesenswert?

@ 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...

von spess53 (Gast)


Lesenswert?

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

von Markus Retter (Gast)


Lesenswert?

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)

von Klaus W. (mfgkw)


Lesenswert?

Mega8515 ist kein Mega8

von spess53 (Gast)


Lesenswert?

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

von Markus Retter (Gast)


Lesenswert?

"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?

von Markus Retter (Gast)


Lesenswert?

Auja, da sind alle ;-) Danke!!

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.