Zähler-Zeit berechnen , wie ?

Gast #64656
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
Gast
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
Gast
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.