PIC16f876: RB Interrupt

Gast #717931
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?!!
Gast #718008
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren