PortB Change Interrupt löst sofort aus

OP #2407992
Lesenswert?
• ▲
▼
Hallo

Ich hab ein kleines Problem mit einem PortB Change Interrupt. Der 
Interrupt löst sofort nach der Initialisierung aus, obwohl ich PortB 
direkt davor lese, was meines wissens eigentlich jeden bisherigen 
"mismatch" zw. aktuellem und alten latch Wert beseitigen sollte?


 TRISB = 0b11110000;
 PORTB = 0b11110000;
 nRBPU = 0;    //pullups

 // Interrupts
 INTEDG = 0;          //falling edge
 INTF = 0;
 INTE = 1;

 IOCB = 0b11110000;  //PORTB7:4 Interrupt on change
 portb_last_value = PORTB;
 RBIF = 0;
 RBIE = 1;


Die ISR funktioniert prinzipiell. Großartig stören tut mich der 
1.Interrupt direkt am Start auch nicht, da ich jedoch den PortB Change 
für Taster verwende, die ein Menü steuern, bin ich stets nach Start 
schon bei "Menüpunkt 2"... nervt ein wenig.

Danke

Vinci
#2408005
Lesenswert?
• ▲
▼
Vincent Hamp schrieb:
> Der
> Interrupt löst sofort nach der Initialisierung aus, obwohl ich PortB
> direkt davor lese, was meines wissens eigentlich jeden bisherigen
> "mismatch" zw. aktuellem und alten latch Wert beseitigen sollte?

1.
Woher hast Du dieses "Wissen", aus dem Datenblatt?

Da Du keinen MC-Typ nennst, kann ich nur allgemein bleiben.
In der Regel setzt ein Interruptereignis ein Flag, das Lesen eines Ports 
ist daher schnuppe.
Was aber hilft, ist das Flag rücksetzen unmittelbar vor der 
Interrutpfreigabe.

2.
Ein externer Interrupt ist ohne zusätzlichen Aufwand völlig ungeeignet, 
Tasten einzulesen, da Tasten prellen.
Die beste Methode ist ein Timerinterrupt zum Einlesen und Entprellen.


Peter
OP #2408070
Lesenswert?
• ▲
▼
Achso ja natürlich, der Typ!
Es handelt sich um einen PIC16F887. Das Flag wird natürlich auch 
gesetzt, das ist mir schon klar... Wie gesagt, die ISR funktioniert 
bereits ohne Probleme! Lediglich nach der Initialisierung erfolgt sofort 
ein Interrupt, den ich mir nicht erklären kann.

Bezügl. 2.
Leider habe ich keine Timer mehr frei, die ich für diese Aufgabe nutzen 
könnte (obwohl einer Mehrzwecknutzung wohl nichts im wegsteht wenn ich 
so dran denk...), deswegen wollte ich hierfür den PortB Interrupt nützn.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.