Forum: Mikrocontroller und Digitale Elektronik Beginner Stack Problem mit ATMEGA 8515


von Thomas G. (tomatos666)


Lesenswert?

Hallo,

Bitte zerfetzt mich jetzt nicht.
Ich bin auf dem gebiet ein Absoluter Neuling.

Ich habe ein PRogramm geschrieben das die LED auf den Ausgängen immer 
nach einer gewissen Zeit umschalten sollen.

Mit hilfe des Stack möchte ich gerne ein Unterprogramm mit der 
Zeitverzögeung aufrufen.

Habe folgenden code zusammengestellt.


.include "m8def.inc"

.def temp = r16

        ldi temp, HIGH(RAMEND)          ; HIGH-Byte der obersten 
RAM-Adresse
        out SPH, temp
        ldi temp, LOW(RAMEND)           ; LOW-Byte der obersten 
RAM-Adresse
        out SPL, temp

  ldi r20, 0xFF      ;
  out DDRB, r20      ;r20 als mein Ausgang an Port B Einstellen

start:

  ldi r20, 0b00000001        ;r20 neu beschreiben
    out PORTB, r20
  rcall sub1                      ; sub1 aufrufen

  ldi r20, 0b00000111        ;r20 neu beschreiben
  out PORTB, r20
  rcall sub1

  rjmp start      ;und alles wieder von vorne
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++

sub1:          ;0.25 sek warten und dann weiter
          ldi  R21, $09
WGLOOP0:  ldi  R22, $BC
WGLOOP1:  ldi  R23, $C4
WGLOOP2:  dec  R23
          brne WGLOOP2
          dec  R22
          brne WGLOOP1
          dec  R21
          brne WGLOOP0

ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+++++++

Leider funktioniert mir das Programm nicht.
Die ausgängen bleiben in der Position 0b00000001 stehen.
Im AVR Simulator kommt die meldung:"AVR Simulator: Uninitialized stack 
pointer used at 0x0008"
Könnt ihr mir Bitte weiterhelfen?
Danke.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Beginner Stack Problem mit ATMEGA 8515
                             ^^^^^^^^^^^
> .include "m8def.inc"
            ^^

von spess53 (Gast)


Lesenswert?

Hi

>Leider funktioniert mir das Programm nicht.
>Die ausgängen bleiben in der Position 0b00000001 stehen.
>Im AVR Simulator kommt die meldung:"AVR Simulator: Uninitialized stack
>pointer used at 0x0008"

Bei mir läuft das im Simulator problemlos. Hast du den richtigen 
Controller für den Simulator eingestellt?

MfG Spess

von Thomas G. (tomatos666)


Lesenswert?

Ja den Atmega8515.
Kann es sein das mir es deshalb nicht funktioniert weil ich den Atmel 
mit 4 MHZ ansteuerere und für 0.25 sek im Stack den Zyklus 1000000 
durlaufen lasse obwohl der Stack im Grunde nur 16 Bit hat?!?

von spess53 (Gast)


Lesenswert?

Hi

Wie Stefan schon bemerkt hat, benutzt du das Includefile vom ATMega8.

Wenn du einen ATMega8515 hast, muss die erste Zeile

.include "m8515def.inc"

heißen.

MfG Spess

von Peter (Gast)


Lesenswert?

Thomas Gruber schrieb:
> Kann es sein das mir es deshalb nicht funktioniert weil ich den Atmel
> mit 4 MHZ ansteuerere und für 0.25 sek im Stack den Zyklus 1000000
> durlaufen lasse obwohl der Stack im Grunde nur 16 Bit hat?!?

nein ganz bestimmt nicht. Schau doch einfach mal nach welchen Wert der 
Stackpointer hat, wenn die Fehlermeldung kommt.

von Thomas G. (tomatos666)


Lesenswert?

Thomas Gruber schrieb:
> ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++
>
> sub1:          ;0.25 sek warten und dann weiter
>           ldi  R21, $09
> WGLOOP0:  ldi  R22, $BC
> WGLOOP1:  ldi  R23, $C4
> WGLOOP2:  dec  R23
>           brne WGLOOP2
>           dec  R22
>           brne WGLOOP1
>           dec  R21
>           brne WGLOOP0
>
> ret
> ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++

Danke!!!
Genau das war der Fehler läuft jetzt.
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.