Forum: Mikrocontroller und Digitale Elektronik Timer mehrfach Overflow, dann erst Interrupt?


von Simon (Gast)


Lesenswert?

Hallo und einen Guten Abend,

ich beschäftige mich momentan mit dem Timer eines 8051er und weiß wie er 
geht, ein Interrupt kann ich mit ihm beim Overflow auslösen, jetzt habe 
ich eine Frage dazu, da es ja sehr schnell ist, wenn er von 0 auf seine 
16 bit kommt und überläuft, kann man da etwas bei den SFR einstellen, 
das er z.B. erst beim 10. mal Überlaufen das Interrupt auslöst?

ich habe es jetzt so gemacht das ein Register hoch zählt und bei der 
bestimmten Anzahl an überläufen die Interrupt-Routine ausführt.

Kann mir jemand helfen?


Danke schon mal an alle!

von Reinhard B. (brainstorm)


Lesenswert?

Einfach in der ISR eine Variable runterzählen. Nennt sich dann Software 
Timer. Manche Timer bieten auch die Möglichkeit, einen Prescaler 
einzustellen.

von Simon (Gast)


Lesenswert?

Reinhard B. schrieb:
> Einfach in der ISR eine Variable runterzählen.

Sry für die Frage, aber was heißt ISR?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Interupt Service Routine

von Dussel (Gast)


Lesenswert?

Reinhard B. schrieb:
> Einfach in der ISR eine Variable runterzählen. Nennt sich dann Software
> Timer.

Ist vom Ansatz das Gleiche wie

Simon schrieb:
> ich habe es jetzt so gemacht das ein Register hoch zählt und bei der
> bestimmten Anzahl an überläufen die Interrupt-Routine ausführt.

Ich kenne mich mit dem 8051 nicht aus, aber ich denke nicht, dass das 
geht. Das übliche Vorgehen ist das Zählen einer Variable. Alternativ 
kann man auch vielleicht noch den Vorteiler runterstellen.

von MaWin (Gast)


Lesenswert?

> ich habe es jetzt so gemacht das ein Register hoch zählt und bei der
> bestimmten Anzahl an überläufen die Interrupt-Routine ausführt.

So macht man das (oder eine Variable).

Hardware ist hardware weil hwardware so hard ist daß du dir bei ihr 
nicht einfach was wünschen kannst.

von Simon (Gast)


Lesenswert?

Okey, danke, dann mache ich das wohl doch so, danke =)

von spess53 (Gast)


Lesenswert?

Hi

>> ich habe es jetzt so gemacht das ein Register hoch zählt und bei der
>> bestimmten Anzahl an überläufen die Interrupt-Routine ausführt.

>So macht man das (oder eine Variable).

Es ist aber sinnvoller herunter zu zählen. Bei Null wird das Zero-Flag 
gesetzt und ein zusätzlicher Vergleich entfällt.

MfG Spess

von Simon (Gast)


Lesenswert?

Mir fällt grade auf, das es noch TCon und TMOD gibt, ist der Timer 
standardmäßig auf 16 oder 8 bit gestellt, weiß einer das?

von Simon (Gast)


Lesenswert?

Okey, jetzt habe ich da was gefunden, finde jedoch nichts dazu, bzw. 
blick das nicht so ganz, kann mir jemand weiterhelfen mit dem 
"MC8048-Timer"??

(Funktion als MC8048-Timer. Das Low-Byte arbeitet als 5-bit-Vorteiler 
(max, interner Systemtakt/32))

von Helfer (Gast)


Lesenswert?

Simon schrieb:
> Mir fällt grade auf, das es noch TCon und TMOD gibt, ist der Timer
> standardmäßig auf 16 oder 8 bit gestellt, weiß einer das?

Ja, das Datenblatt. Und Tante Google liefert es sogar auf deutsch:

http://www.goblack.de/desy/mc8051chip/datenblatt/register/tcon01.html

von Peter D. (peda)


Lesenswert?

spess53 schrieb:
> Es ist aber sinnvoller herunter zu zählen. Bei Null wird das Zero-Flag
> gesetzt und ein zusätzlicher Vergleich entfällt.

Der 8051 hat kein Zero-Flag. JZ bzw. JNZ prüfen direkt, ob ACC = 0 ist.

Allerdings hat der 8051 den Befehl DJNZ, der bei != 0 springt und keine 
Flags beeinflußt. Man muß also nichts pushen, wenn man ihn in der ISR 
benutzt.

Der 8051-Befehlssatz ist sehr gut auf Steuerungen optimiert worden.


Peter

von spess53 (Gast)


Lesenswert?

Hi

>Der 8051 hat kein Zero-Flag. JZ bzw. JNZ prüfen direkt, ob ACC = 0 ist.

Ich hatte erst vor kurzem bei verschiedenen Controllern nach den 
verfügbaren Flags nachgesehen, und die hatten alle ein Z-Flag. 8051 habe 
ich allerdings nicht in meiner Datenblatt-Sammlung. Daher ist mir dieser 
Unterschied entgangen. DJNZ ist mir vom Z80 ein Begriff.

MfG Spess

von Simon (Gast)


Lesenswert?

Danke für eure Hilfe, ich weiß jetzt, das der Controller den ich 
verwende auf 13 bit gestellt, steht net im Datenblatt, aber Keil 
µVision4 hats mir im Debug-Mode gezeigt, hab mit dem Mode noch nie 
wirklich gearbeitet, aber Trotzdem danke ich werde mich damit dann noch 
weiter auseinander setzen, ist ein sehr interessantes Thema =D

von Peter D. (peda)


Lesenswert?

Simon schrieb:
> das der Controller den ich
> verwende auf 13 bit gestellt, steht net im Datenblatt

Manchmal lagern die Hersteller die Peripheriebeschreibung in extra PDFs 
aus.
Z.B. bei Atmel in das "8051 Microcontrollers Hardware Manual".

Der 13Bit-Mode wird wirklich sehr selten verwendet, wenn das zufällig ne 
günstige Interruptrate ergibt.
Häufiger ist der 16 oder 8Bit-Mode.


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.