timer interrupt problem

OP (Firma: tu wien) #1442804
Lesenswert?

hallo,
ich habe gerade in der uni angefangen atmega16 zu programmieren und hab 
da eine frage. ich wollte einfach nur eine stoppuhr programmieren, 
schaffe es jedoch nicht die zeit anzuhalten.
zum stoppen lese ich einfach einen button ein:

help = PINA;
if((help & 0x40)==0x40){ /*wenn PINA.7  auf 1 ist, --> uhr stoppen */
  flag = 0;
}
else{
  flag = 1;
}

soweit funktioniert das ja auch.
jetzt will ich aber im timer interrupt das flag auslesen und entweder 
einen counter dort weiterlaufen lassen oder eben stoppen, damit die zeit 
stehen bleibt:

SIGNAL(SIG_OVERFLOW1){/*timer interrupt*/
if(flag == 1){
  temp++;
}

das funktioniert aber einfach nicht. temp wird einfach immer 
weitergezählt.  ich hab auch schon probiert, dass ich einfach mal gleich 
nach dem abfragen des buttons leds ein und ausschalte. das geht auch. 
nur die abfrage im interrupt macht ein problem.
kann es sein, dass das überhaupt nicht funktioniert oder hats da ein 
anderes problem?
mfg specht
Angehängte Dateien:
Persönliche Seite #1442822
Lesenswert?

Dir ist schon klar daß das bestenfalls nur dann geht, wenn der Taster 
(dauerhaft) gedrückt ist?

Ausserdem tust du dir und anderen einen Gefallen, wenn du "magische" 
Zahlen wie in TIMSK=4 vermeidest. Ich hab jetzt keine Lust das Handbuch 
runterzulagen und zu schauen was in Bit 2 codiert ist; es sollte aber 
gleichbedeutend sein zu sowas wie
1
TIMSK |= (1 << TOV1);

Johann
OP (Firma: tu wien) #1442824
Lesenswert?

ok danke für die tipps. werds gleich mal umschreiben. bin wie gesagt neu 
im programmiergeschäft. drum schaut der code vielleicht ein bisschen 
anders aus.
das es nur solange stoppt, wie der button gedrückt ist ist mir schon 
klar. ich werds noch umändern, so dass der button start - stopp toggelt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren