Hallo zusammen,
ich habe ein ganz merkwürdiges Phänomen heute entdeckt, dass ich mir
nicht erklären kann.
Ich werte beim 12F683 über Pin 7 (GP0) per Interupt ein Signal aus.
Wenn das Pegel an GP0 auf "H" wechselt, soll der Ausgang Pin 3 (GP4)
gesetzt werden. Beim Wechsel auf "L" eben wieder rück gesetzt werden.
1 | #INT RA
|
2 | void_irs_GP0()
|
3 | {
|
4 | if (!toggle)
|
5 | {
|
6 | output_high (PIN_A4)
|
7 | toggle = 1;
|
8 | }
|
9 | else
|
10 | {
|
11 | output_low (PIN_A4)
|
12 | toggle = 0;
|
13 | }
|
14 | x = input_a(); // Port lesen
|
15 | clear_interrupt (INT_RA0);
|
16 | }
|
Wenn ich das Ganze in MPLAB 8.56 simuliere, ist alles OK, aber in der
Realität wird GP4 nicht gesetzt.
Wenn ich die output Befehle durch das Setzen einer Variable ersetze und
diese Variable in der main() auswerte und dann den Ausgang setze, ist
alles gut.
Woran liegt das?
Wenn ich den GP4 direkt in der INT_EXT Interruptschleige setze,
funktioniert das.
Wer kann mir das erklären??
Gruß
Uwe
PS: CCS 4.069 Compiler