Forum: Mikrocontroller und Digitale Elektronik 8051 Timer Assembler


von Gerd S. (drave)


Lesenswert?

Nabend,

wenn ich mit dem Timer 0 overflowed wird der TF0 zu 1, aber wie lang 
bleibt der eigentlich eins ? Mit meinem Simulator ist der fünfmal durch 
die Schleife nach einem Overflow, wie macht man es wenn er nur einmal 
durch soll und dann abwarten.

org 8000h

mov a,#01h
mov p1,#01h

MOV TMOD,#01
SETB TR0

b1:JNB TF0,$
rl a
mov p1,a
mov a,p1

ljmp


Welcher befehl kopiert aus dem Akku in p1 ohne dass ich mov 2 mal machen 
muss

von Gerd S. (drave)


Lesenswert?

Sorry, ist klar der b1 muss vor SETB TR0 stehen.

Aber wie kann aus dem Akku kopieren

von Peter D. (peda)


Lesenswert?

Gerd Schanze schrieb:
> wenn ich mit dem Timer 0 overflowed wird der TF0 zu 1, aber wie lang
> bleibt der eigentlich eins

Entweder bis der Interrupt ausgeführt wird oder bis Du es zurück setzt.


Peter

von Gerd S. (drave)


Lesenswert?

Ahja was ist mit Akku kopieren ?

von HolgerT (Gast)


Lesenswert?

Gerd Schanze schrieb:
> Ahja was ist mit Akku kopieren ?


Nach mov p1,a haben ACC und P1 den gleichen Inhalt, ein mov a,p1 ist 
unnötig.

-Holger

von Gerd S. (drave)


Lesenswert?

Ja stimmt.
Mal angenommen ich hab 16-Bit Mode drin. Dann zählt er bei 12 Mhz in 
0,05 sek einmal durch. Was ist wenn ich längere Perioden brauche ?

von HolgerT (Gast)


Lesenswert?

Mal angenommen, Du willst 1-Sek-Perioden haben, dann lade  r1 mit 20, 
lass alle 0.05 Sek den Interrupt auslösen, decrementiere R1 in der 
Interrupt-Service-Routine und prüfe auf Null. Ist R1 == Null, dann ist 1 
Sekunde rum.
-Holger

von Gerd S. (drave)


Lesenswert?

Echt spartanisch sogar c gegenüber ;)

von Peter D. (peda)


Lesenswert?

Gerd Schanze schrieb:
> Echt spartanisch sogar c gegenüber ;)

Was hast Du erwartet?
Assembler ist auf jedem MC umständlicher als C.

Wobei der 8051 noch ganz hübsche Kombibefehle hat (DJNZ, JBC, CJNE), die 
z.B. der AVR nicht hat. Und viele Befehle auch auf dem direkten RAM 
(0x00-0x7F) ausführbar sind.

Z.B. das "DJNZ RAM-Variable" im Interrupthandler braucht nichtmal 
PUSH/POP, um Register zu sichern, da es weder Flags noch den ACCU 
verändert.


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.