mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage-Delay


Autor: Helli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe im ATMega16 das Led-Beispiel laufen, wobei das Delay folgendermaßen
aufgebaut ist:

DLY:
  dec  Delay
  brne  DLY
  dec  Delay2
  brne  DLY
        rjmp  loop

wobei Delay und Delay2 den Wert 0xFF als Anfangswert haben -
Funktioniert auch einwandfrei...
Jetzt dachte ich mir, ich kann das Delay um Faktor 2 erhöhen, indem ich
folgendes einbaute:

DLY:
  dec  Delay
  brne  DLY
  dec  Delay2
  brne  DLY
  dec  Delay3
  brne  DLY
        rjmp  loop

wobei Delay3 den Anfangswert 0x02 hat.
Das Delay ist jetzt aber um ein zig-faches länger und nicht nur um das
doppelte?!?

Autor: Gunter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich sehe eigentlich keinen logischen Fehler.
Vielleicht ist jetzt der RJMP "out of range" ?
Versuchs mal mit einem JMP !

hth
Gunter

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solltest du nicht den Wert für Delay wieder reloaden, nachdem es auf
Null dekrementiert wurde?

Also:

DLY:
  dec Delay
  brne DLY
  dec Delay2
  ldi Delay, 0xff
  brne DLY
     :
     :

usw. usf.

Autor: Gunter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö,
beim nächsten DEC wird aus der 0x00 sowieso wieder 0xff !

Autor: Gunter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Helli,

ich würde Delay und Delay2 den Wert 0x00 als Anfangswert geben,
sonst ist die erste Runde immer um eine Schleife kürzer.

Autor: Andreas Jäger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst Delay3 jedesmal auf 2 setzen (nicht nur beim ersten mal). Sonst
zählt Delay3 "2..1..0"  und beim nächsten Aufruf von DLY:
"ff..fe..fd..fc...."

MfG
Andreas Jäger

Autor: Helli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Andreas, das wars - muß natürlich Delay3 immer wieder auf 2
zurücksetzen!

Autor: A. Arndt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nimm doch einfach einen Basic-Compiler, da gibt es Commands wie z.B.
Wait X (Sekunden), Waitms X und Waitus x (Xx10 = us).

Gruss
A. Arndt

Autor: Helli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich absoluter Anfänger bin, möchte ich zum Verständis ein bißchen mit
Assembler experimentieren....

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.