Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Interrupción externa de un pic18, Apuntes de Microcontroladores

se explica la interrupción externa para un pic 18f45k22

Tipo: Apuntes

2019/2020

Subido el 15/08/2020

cervantes-mejia-gabriel
cervantes-mejia-gabriel 🇲🇽

4.8

(11)

14 documentos

1 / 6

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Interrupción externa en microcontroladores pic
Los dispositivos PIC18 tienen múltiples fuentes de interrupción y una función de prioridad de
interrupción que permite asignar a las fuentes de interrupción más frecuentes un nivel de
prioridad alto o bajo (INT0 no tiene un bit de prioridad, siempre es de alta prioridad). El vector de
interrupción de alta prioridad está a 0008h y el vector de interrupción de baja prioridad está a
0018h. Un evento de interrupción de alta prioridad interrumpirá una interrupción de baja
prioridad que pueda estar en curso. Hay 19 registros utilizados para controlar el funcionamiento
de la interrupción.
Estos registros son:
• INTCON, INTCON2, INTCON3
• PIR1, PIR2, PIR3, PIR4, PIR5
• PIE1, PIE2, PIE3, PIE4, PIE5
• IPR1, IPR2, IPR3, IPR4, IPR5
• RCON
Se recomienda que los archivos de encabezamiento del Microchip suministrados con el IDE de
MPLAB® se utilicen para los nombres de bits simbólicos en estos registros. Esto permite que el
ensamblador/compilador se encargue automáticamente de la colocación de estos bits dentro del
registro especificado. En general, las fuentes de interrupción tienen tres bits para controlar su
funcionamiento. Lo son:
- Bit de bandera para indicar que se produjo un evento de interrupción
- Habilitar el bit que permite que la ejecución del programa se ramifique a la dirección del vector
de interrupción cuando el bit de bandera esté activado
- Bits de prioridad para seleccionar alta o baja prioridad
Compatibilidad de rango medio
Cuando se borra el bit IPEN (estado predeterminado), la función de prioridad de interrupción se
desactiva y las interrupciones son compatibles con los dispositivos de rango medio del
microcontrolador PIC. En el modo de compatibilidad, los bits de prioridad de interrupción de los
registros IPRx no tienen ningún efecto. El bit PEIE/GIEL del registro INTCON es la habilitación de
interrupción global para los periféricos. El bit PEIE/GIEL sólo desactiva las fuentes de interrupción
periféricas y activa las fuentes de interrupción periféricas cuando el bit GIE/GIEH también está
activado. El
El bit GIE/GIEH del registro INTCON es el registro global interrupción habilitar que permite a todos
los no-periféricos interrumpe las fuentes y desactiva todas las fuentes de interrupción, incluyendo
los periféricos. Todas las interrupciones se ramifican a dirección 0008h en modo de
compatibilidad.
Prioridad de interrupción
La función de prioridad de interrupción se activa al configurar el bit IPEN del registro RCON.
Cuando la prioridad de interrupción está activada, los bits de habilitación de interrupción global
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Interrupción externa de un pic18 y más Apuntes en PDF de Microcontroladores solo en Docsity!

Interrupción externa en microcontroladores pic Los dispositivos PIC18 tienen múltiples fuentes de interrupción y una función de prioridad de interrupción que permite asignar a las fuentes de interrupción más frecuentes un nivel de prioridad alto o bajo (INT0 no tiene un bit de prioridad, siempre es de alta prioridad). El vector de interrupción de alta prioridad está a 0008h y el vector de interrupción de baja prioridad está a 0018h. Un evento de interrupción de alta prioridad interrumpirá una interrupción de baja prioridad que pueda estar en curso. Hay 19 registros utilizados para controlar el funcionamiento de la interrupción. Estos registros son:

  • INTCON, INTCON2, INTCON
  • PIR1, PIR2, PIR3, PIR4, PIR
  • PIE1, PIE2, PIE3, PIE4, PIE
  • IPR1, IPR2, IPR3, IPR4, IPR
  • RCON Se recomienda que los archivos de encabezamiento del Microchip suministrados con el IDE de MPLAB® se utilicen para los nombres de bits simbólicos en estos registros. Esto permite que el ensamblador/compilador se encargue automáticamente de la colocación de estos bits dentro del registro especificado. En general, las fuentes de interrupción tienen tres bits para controlar su funcionamiento. Lo son:
  • Bit de bandera para indicar que se produjo un evento de interrupción
  • Habilitar el bit que permite que la ejecución del programa se ramifique a la dirección del vector de interrupción cuando el bit de bandera esté activado
  • Bits de prioridad para seleccionar alta o baja prioridad Compatibilidad de rango medio Cuando se borra el bit IPEN (estado predeterminado), la función de prioridad de interrupción se desactiva y las interrupciones son compatibles con los dispositivos de rango medio del microcontrolador PIC. En el modo de compatibilidad, los bits de prioridad de interrupción de los registros IPRx no tienen ningún efecto. El bit PEIE/GIEL del registro INTCON es la habilitación de interrupción global para los periféricos. El bit PEIE/GIEL sólo desactiva las fuentes de interrupción periféricas y activa las fuentes de interrupción periféricas cuando el bit GIE/GIEH también está activado. El El bit GIE/GIEH del registro INTCON es el registro global interrupción habilitar que permite a todos los no-periféricos interrumpe las fuentes y desactiva todas las fuentes de interrupción, incluyendo los periféricos. Todas las interrupciones se ramifican a dirección 0008h en modo de compatibilidad. Prioridad de interrupción La función de prioridad de interrupción se activa al configurar el bit IPEN del registro RCON. Cuando la prioridad de interrupción está activada, los bits de habilitación de interrupción global

GIE/GIEH y PEIE/GIEL del modo de compatibilidad son reemplazados por la alta prioridad GIEH, y la baja prioridad GIEL, habilita la interrupción global. Cuando se establece, el bit GIEH del registro INTCON habilita todas las interrupciones que tienen su registro IPRx asociado o el bit de prioridad del registro INTCONx establecido (alta prioridad). Cuando está desactivado, el bit GIEH desactiva todas las fuentes de interrupción, incluidas las seleccionadas como de baja prioridad. Cuando está despejado, el bit GIEL del registro INTCON desactiva sólo las interrupciones que tienen su bit de prioridad asociado despejado (prioridad baja). Cuando está activado, el bit GIEL habilita las fuentes de baja prioridad cuando el bit GIEH también está activado. Cuando el indicador de interrupción, habilite el bit y el apropiado Los bits de la Habilitación de Interrupción Global (GIE) están listos, el La interrupción se dirigirá inmediatamente a la dirección 0008h para alta prioridad, o 0018h para la baja prioridad, dependiendo de el nivel del bit de prioridad de la fuente de interrupción. Individual las interrupciones pueden ser desactivadas a través de sus correspondientes interrumpir habilitar bits. Respuesta de interrupción Cuando se responde a una interrupción, el bit de Habilitación de Interrupción Global se despeja para deshabilitar más interrupciones. El bit GIE/GIEH es la Habilitación de Interrupción Global cuando el bit IPEN se borra. Cuando el bit IPEN está activado, habilitando los niveles de prioridad de interrupción, el bit GIEH es la habilitación de interrupción global de alta prioridad y el bit GIEL es la habilitación de interrupción global de baja prioridad. Las fuentes de interrupción de alta prioridad pueden interrumpir una interrupción de baja prioridad. Las interrupciones de baja prioridad no se procesan mientras las de alta prioridad están en curso. La dirección de retorno se empuja en la pila y el PC se carga con la dirección del vector de la interrupción (0008h o 0018h). Una vez en la Rutina de Servicio de Interrupción, la(s) fuente(s) de la interrupción puede(n) ser determinada(s) mediante el sondeo de los bits de bandera de interrupción en los registros INTCONx y PIRx. Los bits de bandera de interrupción deben ser borrados por el software antes de volver a habilitar las interrupciones para evitar que se repita la misma interrupción. La instrucción "return from interrupt", RETFIE, sale de la rutina de interrupción y establece el bit GIE/GIEH (GIEH o GIEL si se utilizan niveles de prioridad), que vuelve a habilitar las interrupciones. Para los eventos de interrupción externos, como los pines INT o la interrupción-en-cambio PORTB, la latencia de la interrupción será de tres a cuatro ciclos de instrucción. La latencia exacta es la misma para las instrucciones de uno o dos ciclos. Se establecen bits de marca de interrupción individuales, independientemente del estado de sus correspondientes bits de habilitación o del bit de habilitación de interrupción global.

Para usar las interrupciones de forma fácil hay que poner en 0 el bit IPEN para no tener prioridades de interrupción.

Luego se tiene que habilitar el bit GIE para habilitar la interrupción globales. INTxIE es el bit que hablita la interrupción externa INTxIF es le bit de la bandera de la interrupción INTEDGx Es el bit que indica si la interrupción es por flanco de subida o de bajada Cuando se esta trabajando con prioridades también es necesario colocar el bit de prioridad a las interrupciones este es el INT2IP Un ejemplo de las interrupciones externas: void main(void) { //CONFIGURACION BASAICA DE PUERTOS TRISA=0x00; TRISB=0xff; ANSELA=0x00; ANSELB=0x00; LATA=0x00; RCONbits.IPEN=0;//DESABILITA LAS PRIORIDADES DE INTERRUPCION INTCONbits.GIE=1;//HABILITA LAS INTERRUPCIONES GLOBALES INTCONbits.INT0F=0;//LIMPIA LA BANDERA DE LA INTERRUPCION EXTERNA INTCON3bits.INT1F=0; INTCON3bits.INT2F=0; INTCONbits.INT0E=1;//HABILITA LA INTERRUPCION EXTERNA INTCON3bits.INT1E=1; INTCON3bits.INT2E=1; INTCON2bits.INTEDG0=0;//LA INTERRUPCION EXTERNA SE COLOCA COMO FLANCO DE BAJADA INTCON2bits.INTEDG1=0; INTCON2bits.INTEDG2=0; while(1); } void __interrupt() isr(void) { if(INTCONbits.INT0F==1) { LATAbits.LA0=~LATAbits.LA0; INTCONbits.INT0F=0; } if(INTCON3bits.INT1F==1) { LATAbits.LA1=~LATAbits.LA1; INTCON3bits.INT1F=0; } if(INTCON3bits.INT2F==1) { LATAbits.LA2=~LATAbits.LA2; INTCON3bits.INT2F=0; }