Eu usei PIC16F877( datasheet ) para vários projetos. Para uma única mudança de pino externo interrompe, você pode usar a PORTB0interrupção. Mas agora eu preciso suportar 8 interrupções externas independentes de troca de pinos, em um único circuito.
Na folha de dados, ele diz que há 15 interrupções PIC16F877, mas acho que essas são contadas, incluindo interrupções do temporizador, etc., que são inúteis nesse caso.
É o que dizem os dados sobre o INTCONregistro.

Posso ter 4 interrupções independentes usando o bit0 RBIF? Representa mudança em PB7:PB4. Como posso identificar qual pino foi alterado lendo o valor da porta na rotina de interrupção?
Até eu recebo respostas positivas acima, preciso de 8 interrupções? é claro que ainda posso usar INTE, para PORTB0mudar. Então 4 + 1 = 5, mas e os outros 3? (No entanto, todos os 8 eventos de interrupção são do mesmo tipo, a 4 + 1 + 3 = 8coisa parece feia, não é?)
Não há outras tarefas pesadas esperadas do microcontrolador além do monitoramento de 8 pinos. (Falando sobre as outras tarefas, ele precisará manter um conjunto de variáveis de contador separadas e transmitir frequentemente cerca de 4 bytes para o PC em série)
Todas as sugestões são bem-vindas. Mesmo que seja sobre mudar o microcontrolador para um mais adequado (mas ... não me diga para não usar PICs).