Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Timer Kategorie: Programmierung (von ChristianS. - 26.02.2004 22:35)
Als Antwort auf Re: Timer von Martin Binder - 25.02.2004 17:24
Ich nutze:
C-Control II Station, OSOPT V3.0
Hallo,
vielen Dank für Eure Hilfe + Anregungen,
ich werd´s morgen gleich ausprobieren.

Christian

> Hallo Christian,
>
> ich löse dein Problem folgenderma�en:
> ~~~~~~~~~~~~~~~
> // Routine ktime.c2
> //-----------------------------------------------------
>   function diffm(long oldtim, int minutes) returns byte
> //-----------------------------------------------------
> // Routine zur Abfrage ob bestimmte Zeit in Minuten schon vergangen ist
> // result = 0 -> NEIN,  result = 1 -> JA
>   {
>   long newdif, deltim;
>   deltim = minutes;             // gewünschte Zeitdifferenz in m
>   deltim = deltim * 60000;    // gewünschte Zeitdifferenz in ms
>   newdif = system.timer() - oldtim;  // aktuelle Zeitdifferenz in ms
>   if deltim > newdif
>     return 0;                        // noch nicht vergangen
>   return 1;
>   }
> ~~~~~~~~~~~~~~~
> ...und der Aufruf dieser Routine läuft so ab:
> ~~~~~~~~~~~~~~~
> // Thread Main
> {
>   int i;
>   long timerone;
> ...
>   system.TIME time;
>   system.gettime(time);
> ...
>   timerone = system.timer();      // timer starten
> ...
>   i = ktime.diffm(timerone, 10);   // schon 10 Minuten seit Start ?
>     if i == 0
>       {
>       (irgendeine Aktion);            // Zeit abgelaufen
>       return;
>       }
> ...
> }
> ~~~~~~~~~~~~~~~
> Den Timer kannst du jederzeit neu starten, auch zwischendurch,
> natürlich gehts auch mit längeren oder kürzeren Intervallen als zB. Minuten.
> Ich hab mir Routinen für Sekunden, Minuten, Stunden und Tage geschrieben.
>
> Aber pass auf:
> Wenn du den Timer nicht zurücksetzt, wird er alle 48 Tage von selbst "aktiv",
> denn nach dieser Zeitspanne hat "system.timer()" einen internen Zähler - �berlauf...
>
> GruÃ? Martin
>
>
> > Hallo,
> > ich versuche einen Timer zu programmieren, der eine bestimmte Anzahl von Sekunden warten soll.
> > Ich habe eine Funktion geschrieben, die dieses macht , nur sind dann
> > während der Wartezeit keine anderen Aktionen (z.B. Abfragen von Ports) möglich.
> >
> > function ZEIT(byte sekunden) returns byte
> > /*******************************************************/
> > /** Wartezeit in Sekunden, maximal 3600s (60min)       */
> > /*******************************************************/
> > {
> >   byte akt_sec, akt_min, sec, min;
> >   sec= sekunden%60; // Anteil Sekunden
> >   min= sekunden/60; //Anteil Minuten
> >   akt_min=system.minute(); //aktuelle Minute
> >   akt_sec=system.second(); //aktuelle Sekunde
> >   while min > (system.minute() - akt_min);
> >    while sec > (system.second() - akt_sec);
> >   return -1;
> > }
> >
> > Deshalb habe ich ins Forum geschaut, und bin auf einen "Muster-Thread" gestoÃ?en, den ich dann
> > etwas geändert habe.
> >
> > const sekunden=5;
> > byte flag, timerflag, tim, sekunde;
> >
> > thread zeit2
> >
> > {
> >  timerflag=0xFF;
> >  tim=0;
> >  sekunde=system.second();
> >  while tim > >  {
> >   wait sekunde!=system.second();
> >   sekunde=system.second();
> >   tim=tim+1;
> >  }
> >  timerflag=0;
> >  reset;
> > }
> >
> >
> >
> > ...aber irgendwie läuft der Timer nur ein mal. Wie kann ich diesen öfter starten?
> >
> >
> >
> > mein Test-Hauptprogamm sieht so aus...
> > thread main
> > {
> >  stports.init();
> >  lcdext.init();
> >  lcdext.clear();
> >  run waithost;
> >  run zeit2;
> >
> > loop
> > {
> >
> > lcdext.home();
> > lcdext.zahl3(timerflag);
> >  if timerflag==0
> >  {
> >  lcdext.clear();
> >  lcdext.print("...ende");
> >  }
> >  }
> > }
> >
> >
> > Wenn mir einer unter die Arme greifen könnte, wäre ich dankbar, da ich Anfänger bin und mich
> > noch ziemlich schwer mit der Programmiererei tue!
> >
> > Vielen Dank,
> > ChristianS.
> >
> >
> >


    Antwort schreiben


Antworten:

Re: Timer (von Hansi - 21.04.2004 14:28)