Forum: Mikrocontroller und Digitale Elektronik Zeitschleifen berechnen 89S8252


von Burt (Gast)


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

von Jan (Gast)


Lesenswert?

Schau dir mal das Programm "AVRdelayloop" an. Dem gibst du Zeitdauer
und Takt oder nur die Taktanzahl an und er berechnet dir dann den
passenden Asm-Code.

von Burt (Gast)


Lesenswert?

Danke für die schnelle Antwort!!!!!

Gibts das Program hier oder muss ich googlen??

Danke, Burt

von Andi K. (Gast)


Lesenswert?

AVRdelayloop ist nur was für die AVRs, nicht für die 8051er!
Bei den preiswerten 8051 gilt: 1 Maschinenzyklus = 12 Quarz-Takte.
Im X2-Mode gilt: 1 Maschinenzyklus = 6 Quarz-Takte.

MfG
Andi

von Burt (Gast)


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

von Jan (Gast)


Lesenswert?

'Tschuldigung, ich habe deinen µC nicht als Nicht-AVR erkannt.

Einen Fehler hast du noch in deiner Rechnung: 12Mhz = 12.000.000 Hz.
In einer Sekunde schafft er also 2 Millionen NOPs, nicht 2000

von Andi K. (Gast)


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

von Burt (Gast)


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

von Andi K. (Gast)


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

von buz11 (Gast)


Lesenswert?


von Burt (Gast)


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

von Peter D. (peda)


Lesenswert?

PSW ist das Programmstatuswort, also ein (wichtiges) SFR und kein
Befehl, sollte man eigentlich kennen.

Der Befehl muß davor stehen. Vielleicht ist durch Copy+Paste eine Zeile
umgebrochen worden.


Peter

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.