Il registro INTCON gestisce la
configurazione degli interrupt hardware.
Nei pic più
semplici(come il 16F84) vi è un solo registro per gestire le
interruzioni, appunto l'INTCON, mentre in PIC più sofisticati,
con un maggior numero di periferiche integrate, a questo registro se
ne affiancano degli altri per gestire i vari eventi (registro PIE1,
PIR1 ecc). Vi è una leggera differenza nel significato del bit
6 nel caso in cui sia presente il solo registro INTCON o vi siano
anche gli altri. Di seguito lo schema del registro INTCON per un PIC
16F877A:
Il significato dei singoli bit è il seguente:
bit 7 - GIE: abilitazione generale degli interrupt
se
messo a 1 gli interrupt sono abilitati.
bit 6 - EEIE: abilitazione
interrupt a fine scrittura sulla eeprom
mettendo a 1 questo bit si
verificherà un interrupt alla fine di una operazione di
scrittura sulla eeprom interna del PIC.
bit 6 - PEIE: abilitazione interrupt sulle
periferiche
mettendo a 1 questo bit sono abilitati gli interrupt
sulle periferiche aggiuntive.
bit 5 - T0IE/TMR0IE: abilitazione interrupt sul timer
overflow
abilita l'interrupt quando il contatore del timer
raggiunge il massimo valore (255). La velocità con cui si
incrementa tale contatore dipende dall'impostazione del prescaler.
bit 4 - INTE: abilitazione interrupt sul piedino
RB0
abilita l'interrupt quando viene rilevato un impulso sul
piedino 0 della porta B. L' INTE controlla se l'impulso viene rilevato sul fronte di salita o sul
fronte di discesa del segnale.
bit 3 - RBIE: abilitazione interrupt sui piedini 4:7 della
porta B
una variazione di stato su uno di questi piedini (se
configurati come ingresso ovviamente) genera un interrupt.
bit 2 - T0IF/TMR0IF: flag per il timer interrupt
viene
messo a 1 dal verificarsi dell’interrupt sul timer 0
bit 1 - INTF: flag per l'interrupt su RB0
viene messo a
1 dal verificarsi dell'interrupt sul piedino RB0
bit 0 - RBIF: flag per l'interrupt su RB4:RB7
viene
messo a 1 dall'interrupt sul cambiamento di uno dei 4 pin alti della
porta B.
I bit che hanno la funzione di flag per ciascun interrupt, se tale
interrupt si verifica, vengono settati indipendentemente dallo stato
del bit GIE.
Quindi anche se gli interrupt sono globalmente
disabilitati (GIE=0), il valore dei singoli flag può variare.
Il verificarsi di un interrupt comporta il settaggio a 1 del flag corrispondente, ma l'azzeramento di tali flag deve essere eseguito a mano tramite un'apposita routine di interrupt handling
N.B.
Traduzione legenda:
W=bit scrivibile
R=bit leggibile
u=bit non implementato, letto come 0
-n=valore al power-on reset