8051 Timer Assembler

OP #1597858
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
Gast #1598023
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
#1598149
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

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