mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC16f876: RB Interrupt


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?!!

Autor: tastendrücker (Gast)
Datum:

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

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie lösch ich den das wieder?

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.