www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik anfängerfrage zu assemblerbeispielen


Autor: the beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
in assemblerbeispielen finde ich öfter so was:

 ;Pause nach jeder Übertragung
delay50us:                              ;50us Pause
           ldi  temp1, $42
delay50us_:dec  temp1
           brne delay50us_
           ret                          ;wieder zurück

was bedeuten diese $42 sachen? weil wenn ich 42 von hex nach dez
umrechne kommt 66 raus, also ich peil nicht was dass heißt.
allgemein:  ich peil den kompletten teil quelltext nicht.
diese "wartezeit" wird doch mitnem timer erreicht oder? also timer so
lang zählen bis gegebener wert ereeicht, oder?

Autor: Klaus Bröntgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, kein timer, sondern eine rechenpower-vernichtungsmaschine. das
register temp1 wird mit einer zahl (hier halt $42 oder 66 dezimal)
geladen. dann wird 1 abgezogen (dec  temp1).wenn das ergebnis dieser
operation ungleich null ("brne...") ist, wird erneut an die stelle
gesprungen, an der 1 abgezogen wird ("...delay50us") . dies geschieht
also solange, bis das ergebnis gleich null ist, dann wird über ret das
unterprogramm verlassen. hier wird die schleife also 66mal
durchlaufen.
der vorteil dieser methode ist, sie ist leicht zu implementieren. der
nachteil ist, sie blockiert solange alle anderen aufgaben des
controllers.
brne bedeutet "branch if not equal" und heißt "springe, wenn das
null-flag nicht gesetzt wurde". so wird das resultat der dec-operation
auf null geprüft.
die 42 kannste durch jede andere zahl ersetzen, abhängig davon wird die
abarbeitungszeit kürzer oder länger.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aeh. Nein.
Das da oben ist kein Timer.
Das ist ganz einfach eine Zaehlschleife. Im Grunde
dasselbe was auch die Kinder benutzen wenn sie 'Verstecken'
spielen (... , 99, 100, Ich koooooommmmmeeeee)
Der µC zaehlt in einer Schleife von einem bestimmten
Wert runter auf 0. Je nach Prozessortakt braucht er
dafuer mehr oder weniger Zeit. Man muss also wissen
wie schnell (MHz) der Prozessor getaktet wird, weiters
muss man wissen wieviele Takte in der Zaehlschleife
insgesammt verbraucht werden und schon kann man berechnen
wie lange das dauert.
Im konkreten Fall werden halt 66 Durchlaeufe durch die
Schleife benoetigt, damit in Summe 50us vergehen.

Autor: the beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
merci für die infos!
aber wie kann ich den prozessor warten lassen, ohne power zu
verbrauchen
und ohne dass er nebenbei nix mehr anderes macht?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht nur über einen Timer. Den stellst du dir ein, wie du ihn
brauchst. Dann setzt du den Controller in den Sleep-Modus.
Ein Timer-Interrupt weckt den Controller aus dem Sleep-Modus.

Der Interrupt muss dazu aber auch freigeschalten werden, das blosse
Einstellen des Timers reicht nicht...

Ralf

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.