Schizo
Disce quasi semper victurus, vive quasi cras moriturus
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?
Schizo
Disce quasi semper victurus, vive quasi cras moriturus
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 
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.
Schizo
Disce quasi semper victurus, vive quasi cras moriturus
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
)
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.
Schizo
Disce quasi semper victurus, vive quasi cras moriturus
Bedankt, alles stond idd in de datasheet, op dees na 
ORG 0x004 ;interrupt vektor
goto ISR ;On Interrupt go to ISR
Nu werkt het 
Had ik moeten weten
