Forum: Mikrocontroller und Digitale Elektronik Timer!!!


von Cri Gri (Gast)


Lesenswert?

Hi Leute...

Habe schon gesehen das es etliche Beiträge zu den Timern bei euch gibt
aber ich find mir nichts passendes.

Mal ne verständnis Frage: Der Timer (z.B:TO und 8BIT) zählt nu bis 256
und dann wird das TF0 gesetzt und der Timer fängt wieder bei 0 an
(automatisch?). Kann man diese Flag nun mit z.B:
if(!TF0){....}abfragen??
Muss ich das TF0 selber rücksetzten (also 0)?

Habe schon öfter so ne Funktion gesehen. void interupt(void) interupt1
!!! was bedeutet die "1" und woher ist die her??

Sorry aber bin nun mal Neuling und braucher jede Hilfe!!!

Danke an diser Stelle!!
mfg Cri

von Rolf Magnus (Gast)


Lesenswert?

Welcher Controller? Welche Sprache? Welcher Copmiler?

von Hannes L. (hannes)


Lesenswert?

Warum brüllst du so?
(Die vielen Ausrufezeichen werden als "Anschreien" empfunden.)

Die Informationen zum 8-Bit-Timer0 findest du im Datenblatt ab Seite
67. Die Registerbeschreibung findest du ab Seite 70. Der Timer0 kennt
nur den Overflow-Interrupt, wenn du einen anderen Zählumfang als 256
möchtest, dann musst du ihn in jeder ISR (Interrupt Service Routine)
auf einen definierten Startwert setzen. Damit der Timer einen Interrupt
auslösen kann, muss das Bit TOIE0 in TIMSK gesetzt werden (Seite 70) und
Interrupts global freigeschaltet werden. Damit der Timer0 überhaupt zum
Laufen kommt, muss in TCCR0 ein passender Vorteiler eingestellt werden
(Seite 70). Damit nun auch die richtige Routine (die ISR) aufgerufen
wird, muss diese Routine geschrieben werden und ein Sprung in die
Interrupt-Sprungtabelle eingetragen werden (Seite 44).

Da du nicht genannt hast, welchen Controller du meinst, habe ich mir
den Mega8 ausgesucht. Die Seitenangaben beziehen sich also auf das
Datenblatt des Mega8. Und da du keine Programmiersprache genannt hast,
habe ich Assembler vorausgesetzt. Falls du nicht den Mega8 unter
Assembler gemeint hast, ist das nicht mein Problem.

...

von Hannes L. (hannes)


Lesenswert?

@Rolf:

Du sein Spielverderber...

;-)

...

von Rolf Magnus (Gast)


Lesenswert?

Tja, nächstes Mal schreib nen kürzeren Text, dann bist du auch schneller
fertig ;-)

von Hannes L. (hannes)


Lesenswert?

So sei es...

;-)

...

von Rahul (Gast)


Lesenswert?

Wo bist du denn auf ASm eingegangen, Hannes?
Deine Beschreibung isrt ziemlich allgemeingültig.

@Cri Gri: Der 8bit-Timer kann nur bis 255 zählen...256 wäre das
Overflow-Bit.

von Cristian Grigoruta (Gast)


Lesenswert?

Ich verwende als Progsprache C und den µC 89c52!!

@Rahul
0-255 sind 256 Schritte.

@ALL
Sorry wegen dem Anschreien (!!!!) =)

mfg Cri.

von Cristian Grigoruta (Gast)


Lesenswert?

und?kann mir keiner meine Fragen beantworten??

von Rahul (Gast)


Lesenswert?

>0-255 sind 256 Schritte.
> ... zählt nu bis 256

Der Zähler zält aber trotzdem nur bis 255, erzeugt dann einen Überlauf
und beginnt wieder bei 0. Er macht zwar 256 Schritte, zählt aber nur
bis 255. Das wolte ich einfach nur klarstellen.

>und?kann mir keiner meine Fragen beantworten??
Hat Hannes schon etwas "überschwenglich" getan.
Bei jedem Überlauf wird das TOV0-Flag gesetzt. Man kann es durch
"while (!(TIFR & (1<<TOV0))" abfragen, muß es dann aber durch "TIFR
|= (1<<TOV0);" zurücksetzen.
Das steht wunderbar im Datenblatt(*) auf Seite 109 beschrieben.

(*) ich beziehe mich auf das ATMega64-Complete-Datasheet, weil ich
gerade kein anderes offen habe...

von Hannes L. (hannes)


Lesenswert?

> Deine Beschreibung isrt ziemlich allgemeingültig.

Naja, Hochsprachler brauchen keine Interrupt-Sprungtabelle und BASCOMer
kennen die Bits und Register meist nicht. Da bleibt wohl nur ASM
übrig... ;-(

> und?kann mir keiner meine Fragen beantworten??

Habe ich doch getan! - Nur leider fehlte Deiner Frage die erforderliche
Präzision, worauf die Antwort dir nicht so richtig half. Also nimm das
Datenblatt deines Controllers und schau dir die Register des Timers und
deren Bits genau an, dann siehst du auch dessen Möglichkeiten. Das
verspricht jedenfalls mehr Erfolg als hier Forderungen zu stellen...

...

von Cristian Grigoruta (Gast)


Lesenswert?

Sorry ich wollt euch nicht "beleidigen/verärgern"!
Das mit der Interrupt-Nummer habe ich schon...  Int.Vekt.-Adresse - 3
und dann alles durch 8 teilen.
kommt schon hin...

Ich hätte noch ne Frage und zwar:Kann ich das TF0 (beim 89C52) direkt
abfragen? Also ,wie schon geschrieben, mit if (!TF0){.....} oder kann
man diese Bit nicht abfragen?

mfg Cri

PS: Habe nie Vorderungen gestellt.

von Rahul (Gast)


Lesenswert?

>beim 89C52
Aah! Ein 8051er!

>Ich hätte noch ne Frage und zwar:Kann ich das TF0 (beim 89C52) direkt
abfragen? Also ,wie schon geschrieben, mit if (!TF0){.....} oder kann
man diese Bit nicht abfragen?

Zu dem Thema solltest du dich mit den Special Function Registern deines
Controllers auseinandersetzen. IMHO (ewig nichts mehr mit den 8051ern
mehr gemacht) sollte das möglich sein...
Für den Einstieg in die 8051er-Welt empfehle ich (und andere vermutlich
auch) das Buch von Andreas Roth "Mikrocontroller Kochbuch".

>Vorderungen
"Vogel-F" wie "Pferd"? Nur so am Rande ;)

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.