Forum: Mikrocontroller und Digitale Elektronik Timer 2 mit AT89C51ED2


von Peter H. (Gast)


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

von Peter H. (Gast)


Lesenswert?

Hat keiner eine Idee?

von Thomas (Gast)


Lesenswert?

Hi,
Das Register T2CON hat im Bit2 eine Steuerung (TR2) für den Timer. Wenn 
das Bit auf 0 ist stoppt der Timer. Setz mal T2CON auf 0x04, dann sollte 
der laufen.
Schönen Abend

Thomas

von Peter H. (Gast)


Lesenswert?

@Thomas

Danke für die Hilfe!

von Peter D. (peda)


Lesenswert?

Nen Interrupt muß man auch enablen:
1
ET2 = 1;


Peter

von Peter H. (Gast)


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

von Thomas (Gast)


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

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.