¿Cuál es la diferencia de función entre IOC y EXT Interrupt en un PIC? Actualmente estoy usando un PIC12F1822 y, aparte de la capa adicional de verificación que tiene que ver con IOC (es decir, qué pin causó la interrupción), los dos son idénticos.
¿Cuál es la diferencia práctica si la hay? ¿Cuándo usarías uno u otro?
Mire este documento que dice: -
Interrupción por cambio
Esta función es similar a la función de interrupción externa , excepto que cualquier cambio (no solo un tipo de transición) activará una interrupción de cambio de puerto en cualquiera de los pines para los que está habilitada. Esto lo hace más flexible (estar disponible en más pines), pero también más difícil de manejar correctamente.
Es probable que esto se haga para simplificar la arquitectura de interrupción del chip al tener menos entradas en la tabla de vectores de interrupción. La interrupción por cambio se puede configurar para que se dispare cuando cambia un registro de puerto y puede ser útil para algo como una matriz de teclado en la que no desea escribir una rutina de servicio de interrupción (ISR) para cada pin. Puede escribir solo uno que pueda verificar el valor de todo el puerto, que podría ser lo que realmente le interese según la aplicación.
Las tres mayores diferencias entre el cambio de interrupción y los pines de interrupción externa:
Las interrupciones externas del PIC son más versátiles y confiables que las interrupciones de cambio de clavija de propósito general. Sugeriría usar el primero cuando sea práctico.
Básicamente, la interrupción externa se activará en un borde específico (ascendente o descendente, definido por el usuario), mientras que la interrupción por cambio se activará en cualquier borde (tanto ascendente como descendente).
La interrupción en el cambio es generalmente para medio byte de E/S, mientras que las interrupciones externas son generalmente para bits individuales. Como ya dijiste, una cosa que debes hacer en el ISR del COI es averiguar qué bit (o bits) cambió.
El COI también es un poco más difícil de usar, incluso más allá de eso. ¡Es imperativo leer el puerto poco antes de habilitar la interrupción, y aún más importante LEER EL PUERTO dentro del ISR! Si tiene una señal que cambia lentamente y cree que puede establecer una bandera dentro del ISR y hacer su lectura más tarde, fuera del ISR, ¡piénselo de nuevo! La lectura del puerto (o cualquier bit en el puerto, si no recuerdo mal), restablece el pestillo en el comparador que activa la interrupción. Si no lo borra dentro de la ISR, se reactivará inmediatamente cuando salga de la ISR. Si te acuerdas de hacer esto, todo está bien, pero si te olvidas y crees que puedes leer el puerto cuando lo hagas, te sentirás un poco frustrado hasta que te acuerdes de hacer la lectura en el ISR.
PetPaulsen