Forum: Mikrocontroller und Digitale Elektronik PIC16f876: RB Interrupt


von Jan (Gast)


Lesenswert?

Hallo

Probiere gerade den RB Interrupt, welcher bei jedem Wechsel an RB4-RB7 
einen Interupt auslöst, aus.
Das Programm:

// Include-Files
#include <16f876.h>  // Microcontroller-Definitionen
#include <reg16f876.h>  // Erweiterte Definitionen

// Configuration-Bits Einstellungen
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP

// Clockspeed=8MHz fuer die Delays setzen
#use delay(clock=8000000)

#INT_RB          //PORTB Interrupts
void interrupt (void)
  {
  PORTC=0x0F;    //PORTB an PORTC ausgeben
  }
void init (void)        //Initialisierungen
   {
    DDRB=0xFF;        //PORTB als Eingang (Schalter)
    DDRC=0x00;         //PORTC als Ausgang (LED)
  enable_interrupts(GLOBAL);  //Globale Interrupts ein
  enable_interrupts(INT_RB);  //PORTB Interrupts ein
   }
void main(void)        //Main
   {
   init();         //Initialisierungen
  while(1){
    PORTC=0xF0;
   }
}

Am PORTB befinden sich Schalter und am PORTC LEDs.
Meiner Meinung, sollte es vollgendermassen funktionieren:
Wenn alle Schalter 0, dann leuchten die oberen vier LEDs
Wenn Schalter 4,5,6 oder 7 gedrückt wird, sollten für eine kurze Zeit 
die unteren vier LEDs leuchten und dann gleich wieder die oberen vier. 
Das macht es aber nicht!!
--> Wenn Schalter 4,5,6 oder 7 "1" ist, dann bleiben die unteren LEDs 
solange auf "1", bis der Schalter 4,5,6 oder 7 wieder auf "0" ist.

Verstehe ich das RB-Interrupt falsch?!!

von tastendrücker (Gast)


Lesenswert?

Ich glaube, du musst das RBIF Interrupt-Flag in der ISR wieder löschen.

von Jan (Gast)


Lesenswert?

Wie lösch ich den das wieder?

von tastendrücker (Gast)


Lesenswert?

Wie du ein Bit auf '0' setzt, müsste im Compiler-Handbuch stehen (ich 
Programmier in Assembler).

Wahrscheinlich etwas in der Art

  INTCON.RBIF=0;

oder so (falls das RBIF-Flag im INTCON-Register ist - habe gerade kein 
16f876 Datenblatt zur Hand).

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
Noch kein Account? Hier anmelden.