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