www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeitschleife 8051


Autor: Oliver Hegele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Yagan Z. Dongobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut hab ich also doch richtig gelegen , bei 2 schleifen mit
djnz(2Zyklen) und 255 komm ich aber auf 260µs oder ?

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich würde behaupten, dass du auf ~130ms kommst, wenn es ein
normaler 8051 bei 12 MHz ist.

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausserdem kannst du maximal 00h laden, was 256 dezimal wäre und nicht
255...

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
.

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht aber auch ganz ohne Register, die Laufzeit ist 1,05s:
delay:
        acall   delay18
delay18:
        acall   delay17
delay17:
        acall   delay16
delay16:
        acall   delay15
delay15:
        acall   delay14
delay14:
        acall   delay13
delay13:
        acall   delay12
delay12:
        acall   delay11
delay11:
        acall   delay10
delay10:
        acall   delay9
delay9:
        acall   delay8
delay8:
        acall   delay7
delay7:
        acall   delay6
delay6:
        acall   delay5
delay5:
        acall   delay4
delay4:
        acall   delay3
delay3:
        acall   delay2
delay2:
        acall   delay1
delay1:
        ret


Peter

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: ** ** (newman8051)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: stephan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
dazu fällt mir das hier ein..

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.