ELEMANIA
PIC16F690 - Sorgenti di interrupt
Interrupt esterno dal pin RA2/INT

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:

  1. il pin RA2 deve essere inizializzato come input programmando TRISA;
  2. bisogna scegliere la modalità rising/falling edge settando il bit INTDEG di OPTION_REG;
  3. bisogna azzerare inizialmente il bit di flag INTF di INTCON;
  4. bisogna abilitare gli interrupt settando il bit GIE di INTCON;
  5. bisogna abilitare gli interrupt da RA2/INT settando il bit INTE di INTCON

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:

Interrupt dal timer 0

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.

 

Interrupt per cambio di stato dei pin di PORTA/PORTB

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:

IOCA

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.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it