Forum: Mikrocontroller und Digitale Elektronik Timer Programmieren in C


von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich muss in einem Programm eine Wartezeit von 5-10 Minuten 
Programmieren. Es sollte so ablaufen, wenn Fehler auftritt warte 5 
Minuten wenn dann der Fehler immer noch ansteht dann mache was. Jetzt 
weiß ich weder wie man einen Timer in C Programmiert noch ob es auch 
anders geht. Habe schon ins Datenblatt vom Controller geschaut doch 
daraus werd ich nicht schlau. Ich benutze einen Atmel at89c51ac3 und 
habe den Ausschnitt aus dem Datenblatt über Timer angehängt. Kann mir 
vielleicht jemand helfen und sagen wie ich einen Timer Programmiert 
sodass ich eine Wartezeit in meinem Programm einfügen kann? Wäre sehr 
Dankbar
Mfg
Christian

von Huch (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Z.B.:

http://www.hkln.net/german/timer.htm

Größere Zeiten erreicht man einfach dadurch, daß man dann im 
Timerinterrupt eine Variable runterzählt.
Man kann aber auch ohne Interrupt die Überläufe zählen, wenn man nichts 
sonst zu tun hat.


Peter

von Christian (Gast)


Lesenswert?

Danke,
aber trotzdem weiß ich nicht wie ich das im C Code eingeben soll. Kann 
ich alle Parameter da eingeben und dann denen einfach Werte mitgeben 
oder wie muss das dann aussehen?

von Klaus W. (mfgkw)


Lesenswert?

hast du mal das Tutorial erfolgreich hinter dich gebracht?
Dann sollte man das eigentlich schaffen, oder konkretere Fragen haben.

von Peter D. (peda)


Lesenswert?

Hier mal ein Beispiel für nen 1s Timer:
1
#include <reg51.h>
2
3
typedef unsigned char u8;
4
5
//#define  XTAL  12e6
6
#define  XTAL  11.0592e6
7
8
#define TH0_RELOAD  (XTAL / 12 / 256 * 50e-3)
9
#define TH0_REMAIN  ((TH0_RELOAD - (u8)TH0_RELOAD) * 20 + 0.5)
10
11
bit one_second;
12
u8 count_50ms;
13
14
15
void t0_init( void )
16
{
17
  TMOD = 1;  // T0: Mode 1 (16 Bit)
18
  TR0 = 1;
19
  ET0 = 1;
20
}
21
22
23
void t0_int( void ) interrupt INT_T0
24
{
25
  TH0 = -TH0_RELOAD;
26
27
  if( count_50ms <= (u8)TH0_REMAIN )  // handle remainder
28
    TH0--;
29
30
  if( --count_50ms )
31
    return;
32
33
  count_50ms = 20;    // 1sec = 20 * 50msec
34
  one_second = 1;
35
}
36
37
38
void main( void )
39
{
40
  t0_init();
41
  EA = 1;
42
  for(;;){
43
    if( one_second ){
44
      one_second = 0;
45
      P2++;
46
    }
47
  }
48
}


Peter

von Christian (Gast)


Lesenswert?

Welches Tutorial?
Vom Prinzip her weiß ich ja wie der Timer funktioniert. Ich kenn nur 
nicht die Syntax wie ich das für den at89c51ac3 in C eingeben muss. Mit 
welchen Befehl kann ich den Timer starten? Wie kann ich die Zeit 
einstellen und wie kann ich ein Bit setzen wenn der Timer seine Zeit 
erreicht hat?
Die Parameter sind doch von Controller zu Controller unterschiedlich 
oder?

von Falk B. (falk)


Lesenswert?

@  Christian (Gast)

>Vom Prinzip her weiß ich ja wie der Timer funktioniert. Ich kenn nur
>nicht die Syntax wie ich das für den at89c51ac3 in C eingeben muss.

Ssprich, du kannst gar nicht programmieren. Dann musst du das lernen. 
Und NEIN, das geht nicht mal fix in 10 Minuten.

> Mit
>welchen Befehl kann ich den Timer starten? Wie kann ich die Zeit
>einstellen und wie kann ich ein Bit setzen wenn der Timer seine Zeit
>erreicht hat?

Steht im Datenblatt, welche Bit man in welchen Rgistern setzen muss.

>Die Parameter sind doch von Controller zu Controller unterschiedlich
>oder?

Ja.

MFG
Falk

von Klaus W. (mfgkw)


Lesenswert?

Christian schrieb:
> Welches Tutorial?

Dasjenige, welches man dir gleich zu Anfang anempfohlen hatte:
Huch schrieb:
> http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Oder ist das inzwischen gelöscht worden?

von Peter D. (peda)


Lesenswert?

Klaus Wachtler schrieb:
>> http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
>
> Oder ist das inzwischen gelöscht worden?

Nö, aber ein AVR ist kein 8051.


Peter

von Klaus W. (mfgkw)


Lesenswert?

ok, lesen bildet :-)

Steht ja sogar schon im OP...

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.