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

Re: Timer Kategorie: Programmierung (von Guido - 25.02.2004 19:35)
Als Antwort auf Timer von ChristianS. - 23.02.2004 20:37
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, OSOPT_V2
> 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.
>
>
Ich denke dein Problem lieg bei dem Reset da dadurch der Thread in seinen Ursprungszustand
zurückversetzt wird das heist er hat auch die Priorität 0 also der Tread steht.
Mfg Guido
 
>


    Antwort schreiben


Antworten: