PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer in C programmieren



Christoph2
02.05.2006, 20:04
Hallo!
ich bin gerade dabei C zu leernen. ich will zuerst einmal die grundlagen lernen und mich dann erst auf mikrokontroller-programmierung konzentrieren. also ich kann schon ein bisschen und möchte gerne zu einem programm einen timer dazumachen. er soll von 30 sekkunden ca im sekkundentakt herunterzählen, mit 2-3 kommastellen. kann mir jemand sagen welchen befehl ich verwenden muss oder die paar zeilen posten?
danke im voraus!

mfg,
Christoph

izaseba
02.05.2006, 20:12
Hallo,
*hust*, Du meinst Timer für den PC ?

wenn ja ist <time.h> Dein Freund, schau mal da (http://www.cppreference.com/stddate/index.html)

Gruß Sebastian

BiGF00T
02.05.2006, 20:18
öhm, was mir spontan dabei so auffällt:

ca im sekkundentakt herunterzählen, mit 2-3 kommastellen
Soll es jetzt jede Sekunde zählen oder soll es mit 2-3 Nachkommastellen (also Tausendstelsekunden oder so) zählen?

Christoph2
07.05.2006, 10:50
sorry dass ich so lang nicht on war, mein computer is irgendwie kaputt, virus oder so.
jetzt muss ich mit dem laptop meines vaters ins netz

also der timer soll so zählen:

30.000
dann 29.999
dann 28.998
.
.
.
das dann soll er nicht schreiben, sondern das 29.999stadt den 30.000 usw.

danke für die antworten

SprinterSB
07.05.2006, 20:14
So allgemein kann man deine Frage nicht beantworten, da Standard-C keine Vorstellung von Zeit oder von Interrupts hat.

Je nach Architektur wird die Antwort also ganz verschieden aussehen und ist auch davon abhängig, ob du für "the raw machine" codieren willst, oder ein OS oder eine HAL an deiner Seite hast, deren Funktionen du nutzen und gegen deren Bibliotheken du linken kannst.

Auf einer nackten Maschine musst du die SFRs kennen, die du anpacken musst und das Zeug selber implementieren...

Michaele48
20.05.2006, 20:56
Wenn du einen AVR verwendest konntest du das in etwa so machen:


//Timer einstellen
TCCR1B = (1<<CS10) | (1<<CS11); //setzt den Prescaler 64
OCR1A = 62500; //setzt den Vergleichswert
TCNT1 = 0; //startewert des Counters
TIMSK = 1<<OCIE1A; //Compare-Int aktivieren
sei(); //globale Ints aktivieren
TCCR0 = (1<<CS00) | (1<<CS02); //prescaler 1024 Bei einen Zhlerdtand von 4 sind 1,024 ms vergangen
TCNT0 = 0;



SIGNAL (SIG_OUTPUT_COMPARE1A)
{
//wird ausgeführt wenn der Counterwert mit dem Vergleichswert übereinstimmt

s++;
TCNT1 = 0; //timer 1 auf null
Anzeige(s,m,h);