mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer Programmieren in C


Autor: Christian (Gast)
Datum:
Angehängte Dateien:

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

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Christian (Gast)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein Beispiel für nen 1s Timer:
#include <reg51.h>

typedef unsigned char u8;

//#define  XTAL  12e6
#define  XTAL  11.0592e6

#define TH0_RELOAD  (XTAL / 12 / 256 * 50e-3)
#define TH0_REMAIN  ((TH0_RELOAD - (u8)TH0_RELOAD) * 20 + 0.5)

bit one_second;
u8 count_50ms;


void t0_init( void )
{
  TMOD = 1;  // T0: Mode 1 (16 Bit)
  TR0 = 1;
  ET0 = 1;
}


void t0_int( void ) interrupt INT_T0
{
  TH0 = -TH0_RELOAD;

  if( count_50ms <= (u8)TH0_REMAIN )  // handle remainder
    TH0--;

  if( --count_50ms )
    return;

  count_50ms = 20;    // 1sec = 20 * 50msec
  one_second = 1;
}


void main( void )
{
  t0_init();
  EA = 1;
  for(;;){
    if( one_second ){
      one_second = 0;
      P2++;
    }
  }
}


Peter

Autor: Christian (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, lesen bildet :-)

Steht ja sogar schon im OP...

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.