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
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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.