Bin neu auf dem Gebiet.Bräuchte eine Zeitschleife mit einer Wartezeit von 2-3 Sekunden bei einem 8051 12Mhz. Hat da einer ne Idee wie man das realisieren könnte? Mfg Oliver
Oliver, Zeit- und Zählschleifen lassen sich leicht mit der DJNZ-Anweisung bilden, z.B. für 1.000.000 Schritte mit drei ineinander geschachtelten Schleifen, die je nach 8051-Variante eine Ablaufdauer im Sekundenbereich haben. Start: mov R4,#100 Schleife1: mov R3,#100 Schleife2: mov R2,#100 Schleife3: djnz R2,Schleife3 djnz R3,Schleife2 djnz R4,Schleife1 Ende: Ciao, Yagan
Ich hab ein ähnliches Problem ich soll eine Zeitschleife Programmiern die 1s verbraucht bei einer Zy´kluszeit von 1µs unter verwendung von djnz(2µs) da es ein 8bit controller ist kann ich ja maximal immer nur 255 laden . Jetzt soll das aber mit 2 Schleifen gemacht werden und damit komm ich doch nur auf ein 1/4 s ?
"Jetzt soll das aber mit 2 Schleifen gemacht werden und damit komm ich doch nur auf ein 1/4 s ?" Du hast recht, das ist Blödsinn. Du brauchst 3 Bytes. Peter
Gut hab ich also doch richtig gelegen , bei 2 schleifen mit djnz(2Zyklen) und 255 komm ich aber auf 260µs oder ?
auf 130 komme ich wenn ich nicht berücksichtige das der zweite djnz befehl 2µs braucht . Ich rechne 255*2*255*2~260.000µs Hab´s jetzt mit 3 schleifen gemacht . 12Mhz würd ich aber 0,083µs als zykluszeit rausbekommen (zykluszet=kehrwert der Taktrate) unserer scheint demnach 1Mhz zu haben .
Was verwendest du eigentlich? Bei den Uralt-8051, also die Mutter der ganzen Serie, wurde oft mit 12 MHz gearbeitet. Da der 8051 für einen Maschinenzyklus 12 Takte braucht, ist die Zykluszeit 1µs. Wie sieht deine Zeitschleife aus? Ich verstehe deine Rechnung nämlich momentan nicht.
Welchen genau weiss ich gar nicht , ist im MC-Labor . MEine Rechnug ich dachte 255 geladen Zyklusanzahl 2 = 512 , das nochmal 255 x durchlaufen 512*255=130.000*2 (zyklusanzahl)~1/4 s
Nochmal: Wie sieht die Zeitschleife aus? Bsp.: mov r7, #02h s2: mov r6, #02h s1: djnz r6, s1 djnz r7, s2 Das wären momentan 15 Zyklen. Du musst die Zeit der mov-Befehle berücksichtigen, die brauchen auch einen Zyklus.
Erster mov-Befehl -> 1 Zyklus Zweiter mov-Befehl -> 1 Zyklus djnz (a1) von 2 auf 1 -> 2 Zyklen djnz (s1) von 1 auf 0 -> 2 Zyklen djnz (s2) von 2 auf 1 -> 2 Zyklen mov r6, #02h -> 1 Zyklus djnz (s1) von 2 auf 1 -> 2 Zyklen djnz (s1) von 1 auf 0 -> 2 Zyklen djnz (s2) von 1 auf 0 -> 2 Zyklen ------------- 15 Zyklen Oder kurz als Rechnung: r7*(r6*2+3)+1= Gesamtzeit (für dieses Beispielprogramm) Gruß Elektrikser
Es geht aber auch ganz ohne Register, die Laufzeit ist 1,05s:
1 | delay: |
2 | acall delay18 |
3 | delay18: |
4 | acall delay17 |
5 | delay17: |
6 | acall delay16 |
7 | delay16: |
8 | acall delay15 |
9 | delay15: |
10 | acall delay14 |
11 | delay14: |
12 | acall delay13 |
13 | delay13: |
14 | acall delay12 |
15 | delay12: |
16 | acall delay11 |
17 | delay11: |
18 | acall delay10 |
19 | delay10: |
20 | acall delay9 |
21 | delay9: |
22 | acall delay8 |
23 | delay8: |
24 | acall delay7 |
25 | delay7: |
26 | acall delay6 |
27 | delay6: |
28 | acall delay5 |
29 | delay5: |
30 | acall delay4 |
31 | delay4: |
32 | acall delay3 |
33 | delay3: |
34 | acall delay2 |
35 | delay2: |
36 | acall delay1 |
37 | delay1: |
38 | ret |
Peter
@Elektrikser ja so ähnlich hab ich´s mir auch gedacht ging ja nur darum ca 1s . Meine Schleife sieht wie oben aus . @peter dannegger hab ich auch schoin gefunden , die aufgabe verlangt aber explizit den djnz Befehl
Berechnung für die Schleife von Yagan; t= r4(r3(r2*2+3)+3)+1 Das *2 ist der jeweilige djnz und die +... die mov-Befehle.
hallo leute! ich bin neu hier, hab auch ne frage zu Zeitschleife. unzwar ich möchte ein PWM signal mit 2ms erzeugen. kann ich diese mit eine "acall" erstellen? und wie kann ich eigentlich die Zeit genau berechnen. Die Rechnung die ihr da geschrieben habt versteh ich nicht so ganz( wie ihr da auf die Zeit kommt) gruß newman8051
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.