Forum: Mikrocontroller und Digitale Elektronik Programmablaufzeit berechnen


von DerPate (Gast)


Lesenswert?

Hallo habe ein kleines Problem damit bei der folgenden Befehlssequenz 
die Ablaufzeit zu Berechnen weil ich nich genau weiß wann das Carry Flag 
nun wirklich gesetzt wird.

start: push r17
       clc
       ldi r17,0x00
st01:  dec r17
       brcs st01
       pop r17
       ret

nun ist es ja eigentlich so das der dec-Befehl keinen Einfluss auf das 
Carryflag hat.

Nun ist meine Frage läuft die Schleife dann 255 mal durch und dann wird 
das C-Flag gesetzt oder wird es trotzdem nach dem erstenmal dec gesetzt 
weil ein Überlaufstattfindet?

Zyklen
push 2
clc 1
ldi 1
dec 1
brcs1/2
pop 2

der ATmega ist mit 8 MHz getaktet also hat damit eigentlich eine 
Zykluszeit von 125 ns.

wenn mir jemand helfen könnte wäre das sehr schön

Danke

von spess53 (Gast)


Lesenswert?

Hi

Das C-Flag wird überhaupt nicht gesetzt.

MfG Spess

von DerPate (Gast)


Lesenswert?

sprich das programm rent einmal nach unten durch ohne nochmal auf die 
Marke zu springen?

von spess53 (Gast)


Lesenswert?

Hi

>sprich das programm rent einmal nach unten durch ohne nochmal auf die
>Marke zu springen?

Ja. 'DEC' beeinflußt das Carry-Flag nämlich nicht. Und da du C löscht 
bleibt dem Programm nichts anderes übrig.

Was hast du denn vor?

MfG Spess

von Floh (Gast)


Lesenswert?

prüf auf 0 mit brne oder breq und du hast deine Warteschleife :-)

von DerPate (Gast)


Lesenswert?

das is ne Prüfungsaufgabe und ich wollte sehn ob mein Gedankengang 
richtig war das ich am ende auf 1,25 us komme ^^ da ich nächsten 
Mittwoch Prüfung habe und ich grad die Probeklausur rechne.

Und Danke an Euch die mir geholfen haben ^^

von DerPate (Gast)


Lesenswert?

hab nochwas vergessen ein    ret   kommt auchnoch mit unten dran und das 
sind nochal 4 Zyklen mehr ^^

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.