www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zähler-Zeit berechnen , wie ?


Autor: Miralem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich verstehe nicht wie man in den untenstehenden Listing ( einfache
Dioden ein-aus Schaltung)  auf eine Pause von 500 ms kommt. Ich
verstehe das ein 3 Byte Zähler verwendet wird, aber nicht wie man die
Zeit berechnet.
Es wird ein Quarz von 4 MHz verwendet.
Wird das Register r17 immer wieder dekrementiert oder nur einmal ? Ist
es richtig das der Zähler 655360 Takte zählt ?




.include "2313def.inc"      ;Definitionsdatei laden
.cseg          ;Beginn eines Code-Segmentes
.org 0          ;Startadresse=0
;
start:  ldi  r16,low(ramend)    ;Stackpointer auf
  out  spl,r16      ;RAM-Ende setzen
  ldi  r16,0b00000001    ;PortB: PB0 auf Ausgang
  out  ddrb,r16    ;setzen
  clr  r16      ;Anfangswert setzen
;
loop:  out  portb,r16    ;Daten an PortB ausgeben
  rcall  wait      ;Warteschleife aufrufen
  inc  r16      ;Datenwert erhöhen
  rjmp  loop      ;Schleife neu beginnen
;
;  Warteschleife (ungefähr 500ms)
;
wait:  ldi  r19,10      ;r19, r18 und r17
  clr  r18      ;ergeben zusammen
  clr  r17      ;einen 3-Byte-Zähler
wait1:  dec  r17      ;niedrigstes Byte -1
  brne  wait1      ;0 erreicht? nein -> Schleife
  dec  r18      ;mittleres Byte -1
  brne  wait1      ;0 erreicht? nein -> Schleife
  dec  r19      ;höchstes Byte -1
  brne  wait1      ;0 erreicht? nein -> Schleife
  ret        ;Schleifenende, Rückkehr

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Miralem

Am besten verstehst du den Code doch, wenn du im AVR Studio
simuluierst. Da kannst du doch genau sehen, was abgeht.

Ein Blick in die Datenblätter zeigt dir auch die Funktion der Befehle.


Ich komme auf 1971229 Zyklen. Bei 4 MHz kommen dann 492.81 ms raus.

R17 wird solange dekrementiert bis es null ist, dann wird r18
dekrementiert  und wieder nach wait1: gesprungen und r17 dekrementiert.
r17 steht aber ja noch auf null und wird mit dem nächsten
dekrementieren  auf 255 kommen, und so geht es weiter.

In diesem Sinne

MFG

Dieter

Autor: Miralem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Dieter für deinen Tipp,
Da ich überzeugter Linuxer binn wollte ich erst nur Linux Software
einsätzen aber zum Glück kann ich das Studio auch mit win4lin
emulieren. Du hast recht, es ist viel einfacher das Programm zu
verstehen.

Autor: Miralem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War ein Denkfehler:
Der Zähler braucht ja die doppelte Zeit da er nicht nur 255 Takte zählt
sondern auch zwischendurch das z-bit immer kontrolliert .
Danke

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.