Pagina 1 di 1

pic16f628 interrupt solo su una porta

MessaggioInviato: 4 mag 2010, 14:25
da cryptos
E' possibile abilitare l'interrupt solo su una porta di ingresso ? Per ora sono riuscito ad abilitarlo solo su l'intero gruppo di PortA. Sembrerebbe, leggendo la documentazione relativa al pic16f628 messa a disposizione dal compilatore PIC-C che non sia possibile. Qualcuno ha notizie in merito ?

Questo è il codice che utilizzo per gesitre l'interrupt su un qualsiasi cambio di stato delle porte B.
Codice: Seleziona tutto
#INT_RB
isr(){
... routine di interrupt
}

void main()
{
   enable_interrupts (INT_RB);
   while(1);
}

Re: pic16f628 interrupt solo su una porta

MessaggioInviato: 4 mag 2010, 14:43
da Paolino
Andiamo con ordine.
cryptos ha scritto:E' possibile abilitare l'interrupt solo su una porta di ingresso ?

Dipende dal tipo di PIC, con il PIC16F628 non si può.
cryptos ha scritto:Sembrerebbe, leggendo la documentazione relativa al pic16f628 messa a disposizione dal compilatore PIC-C che non sia possibile.

Ma non puoi leggerti la documentazione ufficiale di Microchip? Sul datasheet avresti trovato la risposta! E poi: lo sai che puoi sempre modificare i valori dei registri a tuo piacimento, anche se lavori in C e senza usare funzioni di libreria preconfezione, come questa
Codice: Seleziona tutto
enable_interrupts (INT_RB);

:?:

Se alcuni bit di PORTB (e non PORTA, come hai scritto tu all'inizio) relativi all'interrupt-on-change (=IOC) vengono impostati come output, la gestione IOC non avviene su quei bit.
Viceversa, qualora fossero tutti INPUT e hai bisogno dell'IOC solo su un bit, allora la cosa è semplice: nella routine di interrupt ignori gli eventi accaduti a causa degli input che non ti interessano!

In più: se hai bisogno di un solo INPUT con interrupt esterno, usa RB0/INT0.

Prova a buttare giù due righe di codice, così lo si vede tutti insieme.

Ciao.

Paolo.