ATmega644P Interrupt + While

OP #1621600
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.