PIC 18F Interruptproblem

Gast #2769580
Lesenswert?
• ▲
▼
Hallo,

ich benutze einen PIC 18F von micochip, den ich benutzt um digitale 
Signale zu erfassen und über RS232 an den PC sendet.
Wenn viele messwerte übertragen werden, dann tritt hin und wieder der 
fehler auf das kein Interrupt mehr ausgelöst wird, obwohl Daten auf der 
seriellen schnittstelle vorhanden sind.

Erst wenn der PIC aus und wieder ein gechaltet wird funktioniert der 
Interrupt wieder.

Hat jemand eine Idee woran das liegen kann?

Danke
Gast #2769902
Lesenswert?
• ▲
▼
Das steht in der ISR:

  if(PIR1bits.RC1IF)
  {
    Abbruch = 0x01;
    PIR1bits.RC1IF = 0x00;
    PIE1bits.RC1IE = 0x00;
    PIE3bits.RC2IE = 0x00;
    Receive1_isr();
    PIR1bits.RC1IF = 0x01;
    PIE1bits.RC1IE = 0x01;
    PIE3bits.RC2IE = 0x01;
    Abbruch = 0x01;
    Schnittstelle = 0x01;
  }

Muss dazu sagen das es momentan funktioniert, ich weis nur nicht wie 
lang
(Firma: Atelier Klippel) #2770092
Lesenswert?
• ▲
▼
bastler schrieb:
> Das steht in der ISR:
>
>   if(PIR1bits.RC1IF)
>   {
>     Abbruch = 0x01;
>     PIR1bits.RC1IF = 0x00;
>     PIE1bits.RC1IE = 0x00;
>     PIE3bits.RC2IE = 0x00;
>     Receive1_isr();
>     PIR1bits.RC1IF = 0x01;
>     PIE1bits.RC1IE = 0x01;
>     PIE3bits.RC2IE = 0x01;
>     Abbruch = 0x01;
>     Schnittstelle = 0x01;
>   }
>
> Muss dazu sagen das es momentan funktioniert, ich weis nur nicht wie
> lang

In einer IRQ Routine andere Funktionen aufrufen sollte man nach 
Möglichkeit vermeiden.

Gibt es einen Grund warum zuerst das RC1IF löschst, und dann wieder 
setzt? Ziemlich Unsinnig...

Grüße,

Chris
Gast #2770143
Lesenswert?
• ▲
▼
Das Empfangen IRQ-Flag wird beim Lesen des Empfangsregisters gelöscht.
Des Weiteren solltest Du die Error-Flags der Empfangsschieberegisters 
behandeln.
Es ist nicht notwendig, zum Lesen des Registers den Interrupt zu 
deaktivieren.
Gast #2778506
Lesenswert?
• ▲
▼
Hallo

für den Fall das du bei deiner Behandlung feststellen willst, ob dein 
Registerbuffer deiner Schnittstelle überläuft, kannst du das 
dazugehörige Errorflag abfragen, wenn dieses Flag durch den Controller 
gesetzt wird, kannst du es detektieren, vieleicht mit einer 
if-Bedingungsfrage, in Anschluss, bei vorhanden sein eines solchen 
Errors kannst du die Betroffene Schnittstelle einmal deinitialisieren 
und wieder initialisierenn,

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.