mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Stackpointer ATMEGA851516PU0840


Autor: Markus Retter (Gast)
Datum:

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

Autor: Sebastian ... (zahlenfreak)
Datum:

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

Autor: Magnus Müller (Gast)
Datum:

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

Autor: Markus Retter (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Markus Retter (Gast)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mega8515 ist kein Mega8

Autor: spess53 (Gast)
Datum:

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

Autor: Markus Retter (Gast)
Datum:

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

Autor: Markus Retter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auja, da sind alle ;-) Danke!!

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.