ATmega644P Interrupt + While

OP #1621600
Lesenswert?

Hallo liebe Community :)

Ich habe ein merkwürdiges Problem !
Ich habe eine void-Schleife in dieser werden 2 Variablen gesetzt.
Dann wird in einer Interrupt-ISR die ZAHL1 Heruntergezählt, ZAHL2 
gesetzt, wenn ZAHL1 == 0 ist...
IN der void-Schleife wird mittels eines "while(ZAHL2 != 0);" darauf 
gewartet, dass die ZAHL2 0 ist, DANN ERST soll die Schleufe enden und es 
im Main-Abschnitt  weitergehen (die Funktion "quittiert" werden)...

Code:
1
int Rem_Steps = 0;
2
int Finished = 1;
3

4

5
void Steps(int Steps)
6
{ 
7

8
  Rem_Steps = Steps;
9
  
10
  Finished = 0;
11

12
  while(Finished != 0);
13

14
}
15

16
ISR(INT0_vect)
17
{
18
  if (Finished == 0) 
19
  {
20
    if (Rem_Steps > 0) 
21
    {
22
      Rem_Steps--;
23
    }
24
    else
25
    {
26
      Finished = 1;
27
    }
28
  }
29

30
}
31

32
int main(void)
33
{ 
34

35
//INT0,1
36
EICRA = 0b00001111;
37
EIMSK = 0b00000011;
38
EIFR = 0b00000011;
39

40
sei();
41

42
Steps(100);
43

44
PORTD ^= BIT7; // Hier kommte er NICHT an !
45

46
while(1);
47

48
}

SO Das prob ist, dass entweder "Finished" nicht von der ISR wieder auf 1 
gesetzt wird, oder die while-Schleife, die darauf wartet nicht 
anspricht, warum auch immer...

An INT0 ist sozusagen ein prellfreier Taster, den ich denn ja 100x 
drücken müsste, bis PORTD-BIT7 einmal getoogelt wird...
Passiert aber nicht.

Hoffe echt ihr könnt mir helfen. kann das was mit meinem compiler zu tun 
haben oder so ?

Mfg Howie
OP #1621627
Lesenswert?

hust Das war echt zu einafch um wahr zu sein...
Du hast mir die Grübelarbeit von ca 2-3 Wochen in einem Satz 
beantwortet...
Kurz umgeschrieben, getestet, GEHT !!!
Ich muss echt mal 1000 Dank sagen, wenn ich dich mal im RL treffe 
bekommste einen Keks von mir !!!

Mfg Howie

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