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:
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
}
Und so sieht die Interrupt Routine aus:
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
}
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.

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...