Hallo,
habe eine Schaltung mit einem PIC16F628. Er soll einfach nur Daten empfangen und in einer Variable speichern. Bisher habe ich das ganz einfach mit Pooling in der Main-Schleife gemacht. Weil der PIC jetzt aber noch ein paar andere Sachen machen soll, wollte ich das RX einen Interrupt auslöst sobald Daten eingehen
Das ist der Code zum initialisieren der Schnittstelle:
Und so sieht die Interrupt Routine aus:Code:void InitUSART(void) { GIE=1; // Global Interrupts erlauben BRGH=1; // High Speed einstellen SPBRG=129; // 9600 baud @ 20MHz SPEN = 1; // Asynchrone Pins aktivieren SYNC = 0; // Asynchroner Modus einstellen TX9 = 0; // 8bit TX einstellen RX9 = 0; // 8bit RX einstellen CREN = 1; // RX einschalten TXEN = 0; // TX ausschalten RCIE=1; // RX Interrupt erlauben }
Das einzige was ich noch mache ist InitUSART(); nach dem anschalten in der Main aufzurufen. Der Rest des Programms funktioniert nach wie vor ohne Probleme.Code:interrupt InterruptRoutine(void) // Interruptroutine { int_save_registers // W, STATUS (und PCLATH) retten if (RCIF) //Schauen ob Interrupt von RX kommt (RCIF = 1 wenn Daten in RCREG vorhanden sind) { einlesen(); //Rufe Funktion zum speichern von RCREG in der Variable auf } int_restore_registers // W, STATUS (und PCLATH) Wiederherstellen }
Hoffe es hat jemand noch eine Idee. Wie gesagt die Daten kommen/kamen am PIC richtig an. Muss also etwas mit der Einstellung vom Interrupt zu tun haben!?
Einen schönen Abend noch...







Zitieren

Lesezeichen