Forum: Mikrocontroller und Digitale Elektronik 8051 Timer TH0-Wert


von Martin W. (martini)


Lesenswert?

Hallo allerseits :),


void isrtim0() interrupt 1
{
  TH0=-98;
  counter++;
}

das wär meine Frage, wie kommt man dazu, TH0 mit einen negativen Wert zu 
laden? Und warum entfällt dann TL0?

(Timer befindet sich in Betriebsart 1)

lg martini

von jack (Gast)


Lesenswert?

>das wär meine Frage, wie kommt man dazu, TH0 mit einen negativen Wert zu
>laden?

Das ist für Leute, die nicht wissen, daß ein 8-Bit-Register von 255
(0xFF) auf 256 (0x00) überläuft ;-)
Genauso hätte man TH0 mit 158 laden können, der Timer zählt dann
98 Schritte hoch, bis er 256 erreicht.
Na ja, läßt sich halt leichter lesen.

> Und warum entfällt dann TL0?

Wenn beim Interrupt die µs keine Rolle spielen (z.B. Tastenentprellung)
braucht man TL0 nicht voreinstellen. TL0 hat dann den Resetwert (0).

von Martin W. (martini)


Lesenswert?

hm, nur stellt sich mir die frage wie -98 dargestellt wird dann, mitn 
taschenrechner hab ichs versucht:

1111111111111111111111111111111111111111111111111111111110011110

da kommt das raus, da es nur ein 8 bit register ist, werden nur die 
hinteren 8 bit dann verwendet? die vorderen quasi einfach verworfen??

also wärs dann 10011110 und das ist 158...soweit richtig?

das mit TL0 versteh ich noch nicht ganz, bis jetzt haben wir eig immer 
beide Register mit Werten beschrieben, also immer als 16 Bit Timer 
verwendet. Hier wird ja genauso ein 16 Bit Zähler verwendet, aber nur 
TH0 verwendet? könnte ich genauso gut TL0 verwenden?

und das mit µs, inwiefern keine Rolle spielen? hm da fehlt mir noch 
einiges ^^

aber danke für deine Antwort.

lg

von MC (Gast)


Lesenswert?

>könnte ich genauso gut TL0 verwenden?
Nein.
Bei einem Überlauf des Timers sind die Timerregister gleich 0. Wenn du 
nur TH0 beschreibst, so steht in TL0 immer noch 0. Würdest du aber TL0 
beschreiben, ergäbe sich eine andere Ablaufzeit des Timers.

Das Phänomen TH0=-98 lässt sich mit negativen Dualzahlen erklären.
Schau mal hier rein (Kapitel 3.2 ab Seite 4):
http://www.m-if.de/2006-7/IF10/Skript%20IF10%20-%20Das%20Bin%E4rsystem%20-%20Teil1.pdf

Ich hoffe, dass hilft dir.
Gruß,
MC

von Johannes M. (johnny-m)


Lesenswert?

Zweierkomplement heißt das Zauberwort. Negative Werte werden in 
Zweierkomplement-Darstellung verarbeitet. Die -98 wird in den 
entsprechenden Hexadezimalwert 9E (bei 8 Bit Breite, bei 16 Bit wären es 
entsprechend FF9E, und der Windows-Taschenrechner hat eben einen noch 
höheren Wertebereich und baut deshalb noch eine ganze Stange Fs ein) 
umgewandelt.

von Martin W. (martini)


Lesenswert?

hey,

soweit so gut, is schon wieder ne weile her mit dem zweierkomplement und 
so ^^, ja das hilft mir sehr, muß mich wieder mehr damit beschäftigen, 
anscheined verfolgt das einem noch öfters ^^.

danke für eure hilfreichen u schnellen antworten

lg

von jack (Gast)


Lesenswert?

>und das mit µs, inwiefern keine Rolle spielen? hm da fehlt mir noch
>einiges ^^

Nehmen wir an, der µ läuft mit 12MHz und TH0 enthält 156. Wenn TL0
0 enthält, dann dauert es 100*256 µs = 25,60 ms bis der Timer überläuft
und der Interrupt ausgelöst wird.

Wenn jetzt TL0 mit 206 geladen wird, dauert es 25,55 ms bis der Timer
überläuft, also 50µs weniger (TL0 wird jede µs inkrementiert).

von Peter D. (peda)


Lesenswert?

Wenn das Low-Byte des Reloadwertes 0 ergibt oder es nicht so drauf 
ankommt, reicht es nur TH0 zu laden.

Wenn man aber auch TL0 laden will, wird es etwas tricky, da ja ständig 
Zyklen vergehen (TL0 läuft weiter), aber die Zeit bis zum 
Interrupteintritt unbestimmt ist.

In diesem Fall muß man unbedingt die seit dem Überlauf vergangene Zeit 
berücksichtigen, d.h. der Reload muß durch Addition zu der bereits 
vergangenen Zeit erfolgen. Und die Zeit für die Addition selber muß 
natürlich auch berücksichtigt werden.

Hier ein Beispiel:

http://home.tiscali.de/peterd/appl/soft/clock/index.htm


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.