Timer 2 mit AT89C51ED2

Gast #552607
Lesenswert?

Hallo!

Hab da ein Problem mit dem Timer 2 meines AT89C51ED2.
Woran es liegt, weiß ich nicht genau, aber mein Programm sieht so aus:

>void main (void)
>{
>        init();

>  while(1)
>  {
>    if(tf2==1)  //Timer-Flag
>    {
>      tf2=0;
>      zaehl++;
>      if(zaehl==6000)
>      {
>        zaehl=0;
>        laufzeit++;
>      }
>    }
>
>    if(laufzeit==1)
>    {
>      laufzeit=0;
>                          led=1;
>
>    }
>}

inititalieren tu ich das ganze folgendermaßen:

>T2CON=0x00;
>T2MOD=0x00;

>TH2 = 0xDC;      //Timer auf 10ms vorsetzen
>TL2 = 0x00;
>TR2=1;
>EA   = 1;

und der interrupt schaut so aus:

>void t2_ISR (void) interrupt 5
>{

>        TH2 = 0xDC;  //Timer auf 10ms vorsetzen
>  TL2 = 0x00;

>  tf2=1;
>  led2=0;
>}

Wo liegt der Fehler? Hab ich Register falsch gesetzt? Ach ja, der Timer 
macht gar nix.

Wäre für Tipps dankbar.

lg Peter
Gast #553320
Lesenswert?

@Peter

Ja, danke, bin ich dann auch noch draufgekommen.

@all

Aber ganz richtig funktioniert der Timer trotzdem noch nicht, er ist zu 
schnell.

Hab ich ihn falsch vorgesetzt?

Im Datenblatt steht Fosc/12.

Also habe ich folgendermaßen gerechnet:

tcycl = 12/fosc = 12/11.0592 = 1.085[µs]

t=10[ms]...auf 10[ms] vorsetzen

#=10[ms]/1.085[µs]=9216

65536-9216=56320

TH=56320/256=220=0xDC
TL=0=0x00

Normal sollte es ja so stimmen, oder?

Wo hab ich einen Fehler gemacht?

Bin wie immer für jeden Tip dankbar.

lg Peter
Gast #554360
Lesenswert?

Ich glaub du mußt die Vorladewerte in die Register RCAP2H und RCAP2L 
schreiben. Der läuft im AutoReloadMode und lädt diese Werte in die TH 
und TL Register, direkt geht das wohl nicht.
Funktioniert das so?

Gruss
Thomas

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