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


von Miralem (Gast)


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

von Dieter (Gast)


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

von Miralem (Gast)


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.

von Miralem (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.