Forum: Mikrocontroller und Digitale Elektronik PIC16F84 RB5 Interrupt


von Thomas M. (Gast)


Angehängte Dateien:

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

von M. J. (manfred-64)


Lesenswert?

Hi,

schau Dir doch mal die von Microchip gelieferten Templates an. Vor allem 
musst Du deinen Interrupt auch in dessen Vektor legen, beim 16F84 ist 
das 0x004

ORG     0x000             ; processor reset vector
goto    main              ; go to beginning of program


ORG     0x004             ; interrupt vector location

von M. J. (manfred-64)


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.

von Kein Name (Gast)


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

von bingo (Gast)


Lesenswert?

lies doch erst mal bei sprut nach, wie das mit den Interrupts beim PIC 
geht http://sprut.de/electronic/pic/int/int.htm

von Ottmar K. (wil1)


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

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.