Forum: Mikrocontroller und Digitale Elektronik Warteschleifen Berechnung


von Toni (Gast)


Lesenswert?

Hallo

Ich bin am Verarbeiten des Warteschleifen Prinzips.

Sind denn die Taktzyklen in diesem Beispiel (vom Internet)wirklich
richtig berechnet ?

Laut Datenblatt AT90S8515 braucht der Befehl "rcall" schon 3 Zyklen,
und der "ret" Befehl 4 Clock-Zyklen.

---------------------------------------------------------------------

Wait50us:            ;Systemtakt = 10Mhz sollen sich tges=50us ergeben

        ldi tim1,165 ; Zähler
Wait51:
        dec tim1
        brne Wait51
        ret

; 10 MHz Taktfrequenz = 0,1us/Takt
;
; 4  Takte für UP-Abarbeitung (Aufruf und Rücksprung)
; 1  Takt  für ldi tim1,X X=Zähler um 50us zuerhalten
; =5 Takte *0.1 = 0.5us =ta = sonstige Zeit für UP
;
; Schleife
;       dec tim1        1 Takt
;       brne wait51     2 Takte
;                     = 3 Takte = 3*0.1=0.3us = ts = Zeit für Schleife

;
; X= (tges-ta)/ts=(50us-0.5us)/0.3us=165 (Zeitzähler)
----------------------------------------------------------------------

Vielen Dank für die Infos

Toni

von Fiffi (Gast)


Lesenswert?

Hallo Toni,

schau mal unter:
http://www.home.unix-ag.org/tjabo/avr/AVRdelayloop.html


Gruß

Fiffi

von Frank Linde (Gast)


Lesenswert?

Hallo Toni,

genau genommen sind da zwei Fehler drin:

1. rcall, ldi und ret entsprechen 8 Zyklen und nicht 5
2. Beim letzten Durchlauf der Schleife benötigt sie nur 2 Taktzyklen

Um exakt die 50us zu treffen, mußt Du tim1 also auf 164 setzen und
zwischen BRNE und RET noch ein NOP einfügen (164*0,3 + 0,8).

Gruß, Frank

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.