Il pin RA2/INT può essere utilizzato per generare interrupt dall'esterno. A tal fine occorre abilitare i pin GIE e INTE di INTCON come visto nella lezione precedente. Quando INTE oppure GIE sono a 0, il piedino RA2/INT viene usato come pin di PORTA (RA2). Questo è il comportamento di default. Quando però si attiva l'interrupt, il pin non può più essere usato come linea della porta A ma esclusivamente come linea per ricevere le interruzioni dall'esterno.
Gli interrupt su RA2/INT possono essere innescati sul fronte di salita (rising edge, cioè dalla transizione da 0 a 5V) o sul fronte di discesa (falling edge, da 5 a 0V) del segnale applicato sul piedino. La modalità (rising/falling edge) viene impostata settando opportunamente il bit INTEDG del registro OPTION_REG.
La sequenza di operazioni necessarie per abilitare gli interrupt su RA2/INT è la seguente:
Una volta che il microcontrollore ha lanciato l'interruzione viene automaticamente settato ad 1 il bit INTF del registro INTCON. Questo bit, come si è visto, può essere controllato dalla routine di gestione dell'interrupt per sapere se si è verificato l'interrupt associato alla linea INT oppure qualche altra interruzione.
Lo schema in figura mostra l'uso di un pulsante per attivare l'interrupt:
Quando il contatore TIMER0 va in overflow (cioè passa dal valore 0xFF a 0x00) viene lanciata una interruzione. L'interruzione deve essere prima abilitata settando ad 1 il bit T0IE del registro INTCON. Inoltre, al verificarsi della interruzione, viene automaticamente settato ad 1 il bit T0IF del registro INTCON (che, come già visto, deve essere riportato a 0 dalla routine di gestione dell'interrupt). Per maggiori dettagli sul funzionamento di Timer0 vedi questa lezione.
In questo caso viene avviato un interrupt quando avviene un cambio di stato qualsiasi (cioè un cambio nei valori 0 e 1) tra uno o più dei piedini delle porte PORTA e PORTB.
Questo tipo di interrupt può essere abilitato o disabilitato settando opportunamente il bit RBIE del registro INTCON. Al lancio della interruzione viene automaticamente settato ad 1 il bit RBIF del registro INTCON (che dev'essere quindi azzerato dal programmatore).
I singoli bit delle due porte PORTA e PORTB possono essere abilitati o disabilitati come sorgenti di interrupt agendo sui bit corrispondenti dei registri IOCA e IOCB:
Se il bit di IOCx è a 1 il corrispondente pin di PORTx è abilitato a generare un interrupt per il cambio di stato; viceversa il pin è disabilitato.
Sito realizzato in base al
template offerto da
http://www.graphixmania.it