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!
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.
> 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.
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
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))
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
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
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
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