PIC16F84 RB5 Interrupt

Gast #2644547
Lesenswert?
• ▲
▼
Hallo,

Ich habe hier ein kleines Entwicklungsboard.
Möchte aber gerne an RB5 ein Interrupt durch Flanken wechsel über einen 
Taster auslösen.

Leider komme ich der Lösung nicht umbedingt näher.
Wollte also fragen ob mir vllt jemand helfen kann.

Hab die assembler Datei einfach mal angehängt.


Zur Info:
- Es handelt sich um ein durch meine Firma entwickeltes Board
- Nein möchte nicht in C Programmieren ...


Bin für jede Hilfe dankbar.

Gruß Thomas
Angehängte Dateien:
#2644835
Lesenswert?
• ▲
▼
Ups hab da, weil auskommentiert, was übersehen :/

Was mir (nach etwas genauerer Betrachtung) auffällt ist Du machst einen 
CALL im Interrupt und dann in diesem NUR einen RETFIE. Da bleiben noch 
ne "Leiche" auf dem Stack! da der CALL nicht mit einem RETURN beendet 
wird.


Präzisiere doch mal bitte Dein Problem. Was läuft nicht, welche 
Fehler(meldungen) treten auf.
Gast #2644838
Lesenswert?
• ▲
▼
Das "ORG 0x004 Call  LED_an" ... "retfie" wird so nicht klappen.

Besser wäre

ORG       0x004

movwf   w_temp
swapf   STATUS,w
movwf   status_temp

call interruptverarbeitung //endet mit normalem return

bcf    INTCON, INTF

swapf   status_temp,w
movwf   STATUS
swapf   w_temp,f
swapf   w_temp,w
retfie
#2645371
Lesenswert?
• ▲
▼
Hallo Thomas,

...aller Anfang ist schwer :-), es müßte ja nicht gerade Einschalten per 
Interrupt sein...

Wie hast Du die LEDs geschaltet? Wohl vom PIN mittels Vorwiderstand nach 
+5V? Dann musst Du aber die Ausgänge an PORTB zum Einschalten der LEDs 
auf Low (0) setzen. Bei H also logisch 1 wären die LEDs dann AUS.

Bitte strukturiere Dein Programm, damit machst Du Dir vieles leichter! 
Nimm doch einfach eines der mitgelieferten Beispiele.

Im Pfad "MPLAB\MPASM Suite\Template\Code\16F84ATEMP.ASM" findest Du ein
gutes "Gerüst für künftige Projekte

Du kannst auf keinen Fall INTCON,RBIE (Bit3), bzw. das Flag RBIF - 
Interrupt on Change PORTB - verwenden! Jeder Wechsel an irgendeinem 
PORTB-Pin würde einen Interrupt auslösen. Für Deinen Zweck ist nur Pin 
RB0/INT geeignet (wenn auch für einen Taster, wegen des Prellens, nicht 
gerade empfehlenswert!).

Angenommen Du möchtest an RB0 einen Impuls, sei es per Signal oder 
meinetwegen auch mit Taster anlegen, dann kannst Du mit dem Wechsel der 
Signalflanken einen Interrupt auslösen.

Konfiguriert wird dieser Interrupt so (schau dazu auch ins Datenblatt):
INTCON,INTE (Bit4)=1
OPTION_REG, INTEDG 1 oder 0 bestimmen ob der Interrupt mit steigender 
oder fallender Flanke ausgelöst werden soll.
INTCON,INTF = 1 signalisiert dass der Interrupt ausgelöst wurde und muss 
zu Beginn der ISR auf 0 gesetzt werden um die Auslösung von Interrupts 
während Ausführung der ISR zu verhindern.
Du kannst Deinen Prozessor mit SLEEP in den Tiefschlaf schicken, der 
nächste Tastendruck lässt ihn dann sofort aufwachen und die ISR 
ausführen.

Mein Tip zum Testen:

Verwendest Du MPLAB? Wenn ja, dann aktiviere bitte unter "View" WATCH. 
Damit kannst Du alle PORTS und Register überwachen.

Dann gehst Du einen Schritt weiter und lädst noch unter "Debugger" den 
"STIMULIS" hinzu -> New Workbook. Mit diesem kannst Du die Portpins 
beeinflussen, also auch Deinen "Taster" virtuell betätigen.

Klicke dazu in das Feld direkt unter der Spalte Pin/SFR,
wähle dort RB0
Klicke unter "Action",
Wähle PULSE LOW
Comments: Interrupt RB0 mit neg/pos Flanke.
Dann mit "APPLY" die Funktion zum Testen hinzufügen.

Es gibt im Netz hierzu auch noch ausführlichere Tutorials, google 
einfach danach.
Den Tip zur Seite von SPRUT brauche ich nicht zu wiederholen. Mit dieser 
Seite hat sich für mich die Welt der PICs geöffnet!

mfG Ottmar

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.