-         

Ergebnis 1 bis 3 von 3

Thema: PIC16F628 RX-Interrupt auslösen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2009
    Alter
    26
    Beiträge
    104

    PIC16F628 RX-Interrupt auslösen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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...
    Gruß
    Kevin

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    526
    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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2009
    Alter
    26
    Beiträge
    104
    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
    Gruß
    Kevin

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •