He usado PIC16F877
( hoja de datos ) para varios proyectos. Para una sola interrupción de cambio de pin externo, puede usar PORTB0
interrupt. Pero ahora necesito soportar 8 interrupciones de cambio de pin externo independientes, en un solo circuito.
En la hoja de datos dice que hay 15 interrupciones en PIC16F877
, pero supongo que se cuentan, incluidas las interrupciones por desbordamiento del temporizador, etc. que son inútiles en este caso.
Esto es lo que dice la hoja de datos sobre INTCON
register.
¿Puedo tener 4 interrupciones independientes usando bit0, RBIF
? Representa cambio en PB7:PB4
. ¿Cómo puedo identificar qué pin ha cambiado, es leyendo el valor del puerto en la rutina de interrupción?
¿Incluso tengo respuestas positivas a las anteriores, necesito 8 interrupciones? por supuesto, todavía puedo usar INTE
, para PORTB0
cambio. Entonces 4 + 1 = 5
, pero ¿qué pasa con otros 3? (Sin embargo, como todos los 8 eventos de interrupción son del mismo tipo, la cosa 4 + 1 + 3 = 8
parece fea, ¿no?)
No se esperan otras tareas pesadas del microcontrolador que monitorean 8 pines. (Hablando de las otras tareas, tendrá que mantener un conjunto de variables de contador separadas y, con frecuencia, transmitir unos 4 bytes a la PC en serie)
Cualquier sugerencia es bienvenida. Incluso si se trata de cambiar el microcontrolador por uno más adecuado (pero eh ... no me digas que se vaya de PIC
s).