Warteschleife mit Atmega8535 funktioniert nicht?

Gast #789697
Lesenswert?

Ich versuche nun schon verzweifelt meine billige Warteschleife in 
betrieb zu nehmen. Hier mein Programmbeispiel:

____________________________________________________
    .include "m8535def.inc"

      rjmp Anfang

Anfang:
sbi ddrb,0

Initanzeige:
    rcall warteschleife
    cbi  portb,0

test:
rjmp test



Warteschleife:
    ldi  r16,255
Warteschleife1:
    ldi  r19,255
Warteschleife2:
  dec r19
  brne Warteschleife2
  dec  r16
  brne Warteschleife1
  sbi portb,0
  ret
____________________________________________________

Das problem ist, dass er nicht mehr aus der Warteschleife zurück kommt. 
sbi portb,0 wird noch ausgeführt, aber das cbi portb,0 nicht mehr.

Jemand eine ahnung wiso? Das LED leuchtet durchgehend.

Und eine 2. Frage hab ich gleich auch noch:
Wie kann ich den Takt des Atmegas konfigurieren?

Ich hoffe ihr könnt mir helfen :) vielen dank!
Gast #789703
Lesenswert?

Achja was vergessen sorry:

Diese Warteschleife hier funktioniert komischerweise:

XTAL wurde mit .def XTAL = 8000000 definiert.


           ldi  temp1, ( XTAL * 5 / 607 ) / 1000
WGLOOP0:   ldi  temp2, $C9
WGLOOP1:   dec  temp2
           brne WGLOOP1
           dec  temp1
           brne WGLOOP0
           ret
#789713
Lesenswert?

@  Michi (Gast)

>Ich versuche nun schon verzweifelt meine billige Warteschleife in
>betrieb zu nehmen. Hier mein Programmbeispiel:

Tja, hast du dir mal überlegt oder simuliert, was da passiert?

>sbi ddrb,0

Auf Ausgang schalten, OK

>    rcall warteschleife

Schleif hab ich mal vom logischen Ablauf reinkopiert.

>Warteschleife:
>    ldi  r16,255
>Warteschleife1:
>    ldi  r19,255
>Warteschleife2:
>  dec r19
>  brne Warteschleife2
>  dec  r16
>  brne Warteschleife1

Zwei verschtelte Schleifen, mit 65536 Durchläufen.

>  sbi portb,0

LED ein.

>  ret

Zurückspringen

>    cbi  portb,0

LED aus.

>test:
>rjmp test

Endlosschleife

Hmm, wenn du mich fragst, verdammt wenig Zeit zum leuchten. ;-)

Kann es sein, dass du ein STK500 hast, und die LEDs low active sind?

MfG
Falk
Gast #789728
Lesenswert?

Du hast das falsch verstanden. das LED leuchtet IMMER! es hört nicht auf 
zu leuchten. Und da es erst vor dem ret eingeschaltet wird, wird wohl 
auch da der Fehler sein denke ich. Allerdings finde ich keinen ???? Hab 
ich eventuell was falsch eingestellt? der Atmega ist Fabrikneu und hab 
bisher nichts gross umgestellt. ausser "BODEN" auf 1 (bzw auf 0 im AVR)
#789764
Lesenswert?

Versuchs mal so.

1
    .include "m8535def.inc"
2

3
sbi ddrb,0
4

5
test:
6
    rcall warteschleife
7
    cbi  portb,0
8
    rcall warteschleife
9
    sbi  portb,0
10
rjmp test
11

12
Warteschleife:
13
    ldi  r16,255
14
Warteschleife1:
15
    ldi  r19,255
16
Warteschleife2:
17
  dec r19
18
  brne Warteschleife2
19
  dec  r16
20
  brne Warteschleife1
21
  ret

MfG
Falk
Gast #789920
Lesenswert?

Ihr meint das hier?:

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

auch wenn ich das ganze miteinbinde ganz am anfang vom Programm 
funktionierts nicht. Beim Atiny13 den ich vorhher hatte hat alles 
wunderbar funktioniert.

Ich werde morgen mal nochmals einen Versuch machen. Komme heute nicht 
mehr dazu und schreib dann wies ausgegangen ist.

Gruss Michi ;)

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