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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren