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