PIC12F683 Ausgang in Interruptroutine setzen schlägt fehl

Gast #2941696
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.