Interupt su TMR0 & RBIF con gestirli in contemporanea
Ho un piccolo mistero da capire sugli interup e specialmente il modo con cui interagire se devo gestire due tipi diversi di interup nel mio caso particolare l'interup su TMR0 e il classico RBIF
in pratica ho creato un orologio tramite interput tmr0 e fin qui ci siamo
il mio dubbio è questo,
Nel mio programma l'interput su TMR0 avviene ogni 8 millisecondi, quindi ogni 8 millisecondi viene richiamata la funzione timer, invece se premo il pulsante su PORTB AVVIO (7), mi parte una procedura di nome avvio....
Il mio dubbio è questo, se supponiamo che inizialmente schiaccio il pulsante per attivare la procedura avvio e questa procedura per completarsi necessita di un tempo superiore agli 8 millisecondi .... quando scattera il prossimo interput su TMR0, il mio programma ritorna sull' lultima istruzione che gestiva l'interput generato dal tasto avvio, oppure ritorna al main principale .....
In pratica se ho una procedura sul tasto avvio che supera gli 8 millisecondi il programma non sara mai terminato ????
o sono io che gestisco male la logica degli interput, nel mio progetto in pratica con il tmr0
ho creato una specie di orologio interno con ore minuti e secondi, invece se schiaccio il tasto invio
eseguo un delay di 2 minuti alla fine di questi 2 minuti si accende un led ....
ho provato a eseguire il codice ma il led non si accende mai invece l'orologio e l'interupt tmr0 funzionano
chi mi svela l'arcano
il problema che non posso fermare l'interupt su TMR0 perche capite bene che in questo caso avrei ogni volta che premo il tasto invio un ritardo sull'orologio di due minuti ..... qualcuno ha un idea di come poter gestire la cosa
in pratica ho creato un orologio tramite interput tmr0 e fin qui ci siamo
- Codice: Seleziona tutto
ORG 04H
btfsc INTCON,TOIF
call gestioneTOIF
btfsc INTCON, RBIF
call gestioneRBIF
retfie
- Codice: Seleziona tutto
gestioneRBIF
bcf INTCON, RBIF
btfss PORTB, AVVIO
call avvio
return
gestioneTOIF
bcf INTCON, TOIF
call timer
return
il mio dubbio è questo,
Nel mio programma l'interput su TMR0 avviene ogni 8 millisecondi, quindi ogni 8 millisecondi viene richiamata la funzione timer, invece se premo il pulsante su PORTB AVVIO (7), mi parte una procedura di nome avvio....
Il mio dubbio è questo, se supponiamo che inizialmente schiaccio il pulsante per attivare la procedura avvio e questa procedura per completarsi necessita di un tempo superiore agli 8 millisecondi .... quando scattera il prossimo interput su TMR0, il mio programma ritorna sull' lultima istruzione che gestiva l'interput generato dal tasto avvio, oppure ritorna al main principale .....
In pratica se ho una procedura sul tasto avvio che supera gli 8 millisecondi il programma non sara mai terminato ????
o sono io che gestisco male la logica degli interput, nel mio progetto in pratica con il tmr0
ho creato una specie di orologio interno con ore minuti e secondi, invece se schiaccio il tasto invio
eseguo un delay di 2 minuti alla fine di questi 2 minuti si accende un led ....
ho provato a eseguire il codice ma il led non si accende mai invece l'orologio e l'interupt tmr0 funzionano
chi mi svela l'arcano
il problema che non posso fermare l'interupt su TMR0 perche capite bene che in questo caso avrei ogni volta che premo il tasto invio un ritardo sull'orologio di due minuti ..... qualcuno ha un idea di come poter gestire la cosa
siete superrrrrr