Aun hay otro modo añadiendo hardware. Hay un expansor de puertos de Philops (hay también de otras marcas), que te da una interrupción si hay un cambio en una entrada. Se comunica por I2C en el micro y puede tener 8 o 16 puertos de entrada. La interrupción la colocas al RB0 y cuando se produzca lees el expansor y ves las entradas que han cambiado. El expansor es el PCF8574 hay otro de 16 puertos.
Saludos,
Ricky