Zeitschleifen berechnen 89S8252

Gast #228652
Lesenswert?

Hallo!

Ich hätte paar fragen zu einer assembler - Zeitschleife. Hab schon nach
Zeitschleifen oder Quarzzeiten ... gesucht abber nichts passendes
gefunden.....

wie lange braucht mein AT89S8252 um den befehl NOP 10x auszuführen???

   mov var,64h
   MOV LED_PORT,#00000001b
st:NOP                      -
   NOP                      -
   NOP                      -
   NOP                      -
   NOP                      -
   NOP                      -
   NOP                      -
   NOP                      -
   NOP                      -
   NOP                      -
   djnz var,st
   MOV LED_PORT,#00000010b

...... Der Befehl benötigt nur einen Rechen-cicle und mein controller
wird mit 12Mhz getaktet..... hab irgendwann mal
gelesen dass diese Quarz-Frequenz noch paarmal geteil wird????

Wie muss ich jetzt rechnen um herauszukriegen wie lange ein
Befehl braucht??

Dann kann ich doch sicher auch längere Zeitschleifen wie....

   mov LCD_PORT,#00000100b
   mov R2,64h
jb:djnz R1,jb
   djnz R2,jb
   mov LCD-PORT;#00001000b

...berechnen?!!

Danke schonmal im vorraus!!!

Burt
Gast #228656
Lesenswert?

.....Habs gemerkt..... die Mnemonics sind ja ganz anders wie meine...

Also wenn ich dass jetzt richtig verstanden hab muss ich mit
1 cycle = 6 Quarz-Takte rechnen (da mein Quarz an Xtal1 & Xtal2
angeschlosesen ist, X2-mode). Dann wäre bei mir ( 12Mhz Quarz )

1 Zyklus = 1sec/12000Hz x 6takte = 0,0005sec.

Das würde bedeuten dass mein controller für 2000 Zyklen ca 1sec.
brauchen würde?????

als schlechtes Beispiel: 2000x NOP  befehl dauert 1sec.  ?????


Danke, Burt
Gast #228658
Lesenswert?

@Burt: Ein bißchen Verwirrung meinerseits!
Den "X2-Mode" gibt es bei dem 89S8252 NICHT.
Den X2-Mode kann man bei manchen 8051er von Atmel aktivieren und
halbiert die Taktanzahl von 12 auf 6 Takte für einen Maschinenzyklus,
dafür darf der Quarz dann nur z. B. 20 MHz statt 40 MHz sein.

Bei 12 MHz Takt schafft Dein 8051 1.000.000 NOPs, bei 24 MHz
2.000.000.
Ein Maschinienzyklus ist bei 12 MHz 1 µS und bei 24 MHz 0,5 µS.

MfG
Andi
Gast #228659
Lesenswert?

Hallo....

Erstmal Danke @all.....
Hab des jetzt heute mal ausprobiert und es ist ja echt kein problem für
ein paar ms eine schleife zu erzeugen.....
Wenn es jetzt aber in den Sekunden-bereich geht wird es schon wieder
schwieriger, da man ja über mehrere Register und Labels schleifen
muss....

Jetzt wollt ich wissen ob es ein ähnliches programm wie
AVRdelayloop auch für nicht - AVRs gibt???

Oder ob mir jemand einen Rechenweg angeben kann für z.B. ne 5sec.
pause????

Danke für jede Antwort,

MFG Burt
Gast #228660
Lesenswert?

Wieso 5 SEKUNDEN Pause?
So was macht man am besten mit Zählern und am besten in Interrupts.
Im Main-Program fragt man den Zählerstand ab.
Bei erreichen eines gewissen Zählerstands setzt man bei Bedarf den
Zähler zurück und führt das Ereignis aus was dann passieren soll.
Man kann sich auf diese Art mehrere Zähler oder mehrere Vergleicher
bauen und es können dann mehrere Ereignisse überkreutz passieren ohne
das es die Wartezeit für ein anderes Ereignis beeinflusst.

MfG
Andi
Gast #228662
Lesenswert?

....Hab des mit m zähler mal angefa ngen und es ist wirklich besser (hab
bis jetzt noch nie zähler/Timer benötigt....

@buz11: Die Seite ist echt klasse..... aber auch bei diesem erzeugten
Code erkennt mein Assembler (RIDE IDE) eine mnemonic nicht....
Z.B. gibt mein assembler eine fehlermeldung bei dem Befehl "PSW" dass
der befehl unbekannt ist.... Im Befehlssatz für meinen Controller kann
ich diesen Befehl aber auch nirgends finden.....

woher kommt diese Inkompatibilität zwischen den einzelnen mnemonic -
befehlen bei den gleichen Controller-Architekturen??? (8051)

Danke für jede Antwort

MFG Burt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren