Beginner Stack Problem mit ATMEGA 8515

OP #1927438
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.
Gast #1927459
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
Gast #1927486
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.
OP #1927489
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren