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
wo muss ich es setzen? löschen tu ich es jetzt wenn der Interrupt ausgelöst wird, aber nun tut die übertragung immer nur noch ganz kurz und dann geht nichts mehr.
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
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
die Funktion liest nur die zeichnen ein. Nein des hat keinen grund, werds auch wieder raus machen, aber das RC1IE muss drinnen bleiben oder?
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.
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,
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.