PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC16F628 RX-Interrupt auslösen



hagbart06
12.01.2011, 17:59
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:


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:


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

Siro
15.01.2011, 14:49
Ich vermisse in deinem Text die eigentliche Frage,
aber ich vermute mal, daß Du keinen Interrupt bekommst.

Hast Du denn auch das PIE Bit im INTCON Register eingeschaltet ?
Peripheral Interrupt Enable Bit
Ich sehe nur das Global Interrupt Bit GIE,
sonst wird kein Interrupt ausgelöst.

mit freundlichen Grüßen
Siro

hagbart06
16.01.2011, 22:08
Hast Recht, habe die Frage vergessen ](*,) . Aber wie du richtig erraten hast, wird kein Interrupt ausgelöst.
Ich dachte das PIE wäre nur für einen externen Interrupt (Flankenwechsel am Eingang), werde es aber sofort mal ausprobieren, sobald ich meinen Brenner wieder repariert habe.
Vielen Dank