Hallo, Ich bin ganz neu in der Mikrocontroller-Technik wir programieren in der Schule gerade den AT89C51ed2. In der nächsten Arbeit kommt Zeitschleifenberechnung dran,hat da vielleicht jemand ein "KochRezept" oder irgend einen Trick wie man Zeitschleifen schnell berechnen kann?? Danke für eure Antworten Gruß Florian
Florian, die Dauer einer "Zeitschleife" haengt immer ab von der Taktfrequenz deines Prozessors und dem benutzen Algorithmus. Steht der Algo dann kannst du mit Hilfe des Datenblatts die Anzahl der benoetigten Takte fuer einen Schleifendurchlauf berechnen und multiplizierst dass mit der Anzahl der Durchlaeufe. Wie du siehst gibts es viele Variablen und damit kein allgemein gueltiges Kochrezept. Daz
Erst einmal vielen dank für deine superschnelle antwort, wir machen die schleifen aber noch nicht so kompliziert,ich verstehe dich aber für zb eine wie unten genannte zeitschleife müsste es doch eine allgemeine formel geben.ich weiss es kommt darauf an wie schnell ein befehl von dem mc ausgeführt wird. hier mal eine beispielschleife,das ist bestimmt die kinderlösung aber wir lernen es so ,ist ja was ganz neues für uns. hier das bsp: mov r2,#10 mov r1,#20 mov r0,#20 djnz r0,loop3 djnz r1,loop2 djnz r2,loop1 ret Das ist ein Beispiel für eine zeitschleife,wie wir sie lernen ,ist bestimmt ein bisschen "kindisch" aber es reicht denke ich zum verstehen ,für so eine zeitschleife müsste es doch einen trick zum verstehen geben. weil genau so eine müssen wir in der arbeit erstellen . vielen dank gruß florian
Florian, weisst du wie lang jeder einzelne Befehl fuer die Ausfuehrung braucht ? Wenn ja, dann kannst du ausrechnen, wie lang deine Schleife braucht, oder ? Es gibt keine universelle Regel dafuer, wie Zeitaufwendig einzelne Assembler-Kommandos sind. Das haengt zum einen vom hardware design des Prozessors ab (sprich wieviele Takte fuer den einen oder anderen Befehl) und von der Taktfrequenz des Prozessors. Ersteres entnimmt man dem Datenblatt, zweiteres wird von der konkreten externen Beschaltung des Prozessors festgelegt. Die einzige Formel, die man hier erstellen kann, ist eine mit mindestens zwei Unbekannten. Ist es das was du suchst ? Daz
hallo also im grunde ist das ganz simpel.. mal ien beispiel: (befehle stimmen icht ganz, registernamen auch nicht) ldi reg_1, 10; ldi reg_2, 0; .schleife inc reg_1; // 2 takte brie reg_1, reg_2; // 4 takte jump .schleife; // 2 takte ret; // 2 takte inc braucht hier 2 takte, brie (wenn gleich ueberspring den nägsten befehl) 4 takte und der jump noch mal 2 takte macht also 2 takte + 4 takte + 2 takte = 8 takte pro durchlauf das ganze passiert nun 10 mal 8 takte * 10 = 80 takte + 2 takte (ret) das heisst nun, du brauchst 82 takte, bis das programm weiterläuft (+ 2 takte, wenn du in die schleife mit jump springst //jump .schleife\\) gehen wir also mal von 84 takten aus: bei einer Frequenz von 1 000 000 Takte pro Sekunde zB. 1 000 000 takte = 84 takte 1s t t = 1s 1 000 000 * 84 t = 11,904762ns Gruss Jens
Vielen Dank Euch 2 es hat mir sehr weiter geholfen,jetzt gibt es in der arbeit bestimmt ne 1 ;D vielen dank gruß florian
Servus Flobo Ein Mascinenzyklus = 1us mov Befehl = 1 Maschinenzyklus djnz Befehl = 2 Maschinenzyklen also: mov r2,#10 1us x 1= 1us mov r1,#20 1us x 1= 1us mov r0,#20 1us x 1= 1us djnz r0,loop3 2us x 20= 40us djnz r1,loop2 2us x 20= 40us djnz r2,loop1 2us x 10= 20us ret 1us x 1= 1us = 104us Marcel
Na ja, da könnte man ja gleich mov r0,#50 1us x 1= 1us loop1: djnz r0,loop1 2us x 50= 100us ret 1us x 1= 1us machen. Normalerweise bestehen längere Warteschleifen aus mehreren, verschachtelten Schleifen: mov r2,#10 loop1: mov r1,#20 loop2: mov r0,#20 loop3: djnz r0,loop3 djnz r1,loop2 djnz r2,loop1 ret Die innerste Schleife wird 20*20*10 mal ausgeführt, die 2. 20*10 mal und die äußerste 10 mal. Da wird das ausrechnen der Dauer schon etwas schwieriger ;-) Am besten von innen nach außen berechnen. MfG Andi
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.