He usado PIC16F877
( hoja de datos ) para varios proyectos. Para una interrupción de cambio de pin externo, puede usar PORTB0
interrupción. Pero ahora necesito admitir 8 interrupciones de cambio de pin externas independientes, en un solo circuito.
En la hoja de datos dice que hay 15 interrupciones PIC16F877
, pero supongo que se cuentan, incluidas las interrupciones de desbordamiento del temporizador, etc., que son inútiles en este caso.
Esto es lo que dice la hoja de datos sobre el INTCON
registro.
¿Puedo tener 4 interruptores independientes usando bit 0, RBIF
? Representa el cambio en PB7:PB4
. ¿Cómo puedo identificar qué pin cambió, es leyendo el valor del puerto en la rutina de interrupción?
Incluso si recibo respuestas positivas a las anteriores, ¿necesito 8 interrupciones? Por supuesto que todavía puedo usar INTE
, para el PORTB0
cambio. Entonces 4 + 1 = 5
, pero ¿qué pasa con los otros 3? (Sin embargo 4 + 1 + 3 = 8
, dado que los 8 eventos de interrupción son del mismo tipo, la cosa parece fea, ¿no?)
No se esperan otras tareas pesadas del microcontrolador que no sean monitorear 8 pines. (Hablando de las otras tareas, tendrá que mantener un conjunto de variables de contador separadas y con frecuencia transmitir aproximadamente 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 uh ... no me digas que me aleje de PIC
s).