Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage-Delay


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Helli (Gast)


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?!?

von Gunter (Gast)


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

von ERDI - Soft (Gast)


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.

von Gunter (Gast)


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

von Gunter (Gast)


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.

von Andreas Jäger (Gast)


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

von Helli (Gast)


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

von A. Arndt (Gast)


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

von Helli (Gast)


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.