www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer 2 mit AT89C51ED2


Autor: Peter H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner eine Idee?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas

Danke für die Hilfe!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nen Interrupt muß man auch enablen:
ET2 = 1;


Peter

Autor: Peter H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.