Er is een HW lijn op deze PIC ( RB0 ) die als INT lijn kan gebruikt worden.

Is er iem die deze functie van het IC al gebruikt geeft?

ja, er zijn zelfs meerdere mensen die 'm al eens gebruikt hebben. Hij doet het, neem het van me aan :)

Op 3 april 2003 15:29:25 schreef DIY:
ja, er zijn zelfs meerdere mensen die 'm al eens gebruikt hebben. Hij doet het, neem het van me aan :)

En kun je het even uitleggen hoe juist :p
Want hier werkt em dus niet.

In je code moet je een ISR schrijven. ISR staat voor Interrupt Service Routine.
Deze moet via het ORG-statement bereikbaar gemaakt worden.

De ISR neem je net als subroutines op in je code.

In het Interrupt-register enable je interrupts in het algemeen en specifiek de RB.0-interrupt.

Lees de datasheet voor voorbeeld codes.
Tip: Vergeet niet de contextsaving op te nemen in de ISR, anders gaat het geheid mis.

Dus gewoon wat code onder het label ISR schrijven.
Maar op welke manier weet ik op welk adres deze code geplaatst wordt ?
Want dat adres moet toch in 0004h komen te staan ?

Ik wil het volgende doen:

Ik heb 4 ledjes, en 1 drukknop ( deze hangt aan de INT lijn )
Als de da schakelaar bediend wordt, verhoogt de waarde bv in 0x66 ( kan waarschijnlijk nie op die plaats, maar soit :p )
Dan moet het programma weer op 0 starten, maar 0x66 mag niet gereset worden.
Want dan moet het programma 0x66 inlezen indien dit 1 is moeten die ledjes links lopen, indien 2 dan naar rechts.

Of is dit anders op te lossen? Liefst wel gebruik maken van INT ( is om deze lijn te leren dat ik dit maak )

Heb je het datasheet gelezen? Alles staat er namelijk in.
Maar goed, ik noem het INTCON-register "Interrupts":

In het begin van je code:

ORG 0x004 ;interrupt vektor
goto ISR ;On Interrupt go to ISR

De service routine:

ISR movwf w_temp ;save w-contents
swapf status,w ;
movwf status_temp ;save status-contents
;
bcf Interrupts,7 ;Global Interrupt Disable

---
Hier komt je Interrupt code
---

bsf Interrupts,7 ;Global Interrupt Enable
swapf status_temp,w ;
movwf status ;restore status-contents
swapf w_temp,f ;
swapf w_temp,w ;restore w-contents
;
retfie ;return from interrupt

En effe niet vergeten in het begin van je programma de portB.0-interrupt enablen.

Bedankt, alles stond idd in de datasheet, op dees na :p

ORG 0x004 ;interrupt vektor
goto ISR ;On Interrupt go to ISR

Nu werkt het :D
Had ik moeten weten