interrupciones

29
INTERRUPCIONES CONCEPTOS BÁSICOS MICROCONTROLADORES PIC PROGRAMACIÓN EN COMPILADOR C Ing. Junior Figueroa Olmedo

Upload: jonathan-daniel

Post on 29-Sep-2015

3 views

Category:

Documents


0 download

DESCRIPTION

microcontroladores 16f887

TRANSCRIPT

  • INTERRUPCIONES

    CONCEPTOS BSICOS MICROCONTROLADORES PIC

    PROGRAMACIN EN COMPILADOR C

    Ing. Junior Figueroa Olmedo

  • DEFINICIN

    Una solicitud de interrupcin (o simplemente interrupcin)es un evento de origen interno o externo que, si es atendido,hace que el microcontrolador interrumpa la ejecucin delprograma en curso y en su lugar ejecute las instrucciones deotro programa.

    Una solicitud de interrupcin se puede producir en cualquiermomento mientras se ejecuta cualquier instruccin de unprograma. Por ello, no es posible prever durante quinstruccin ocurrir una interrupcin.

    El manejo de interrupciones permite realizar programas que notienen que estar continuamente consultando sucesos internoso externos mediante tcnicas de consultas, las cuales provocanretardos o paradas en la ejecucin del programa principal.

  • FUNCIONAMIENTO

    Cuando se produce una solicitud de interrupcin y sta es atendidapor el microcontrolador, se termina la ejecucin de la instruccin encurso y se salta al programa de atencin (rutina de atencin) a dichasolicitud de interrupcin, previamente definida por el programador.

    Cuando se termina de ejecutar dicha rutina, el microcontroladorretorna a la ejecucin del programa principal en la misma posicin dela memoria del programa donde se produjo la interrupcin

  • FUENTES DE INTERRUPCIONES

    INTERRUPCIONES INTERNAS: se originan en losmdulos de entrada y salida del microcontrolador, la memoriao la CPU. Por ejemplo: desbordamiento de temporizadores,fin de escritura en la memoria EEPRON de datos, eventos quetengan lugar en la CPU (una divisin por cero), etc.

    INTERRUPCIONES EXTERNAS: se originan en unperifrico y llegan al microcontrolador por alguno de susterminales.

  • INTERRUPCIONES Y RECURSOS ASOCIADOS

  • INTERRUPCIONES Y RECURSOS ASOCIADOS

    Los bits de control utilizados para permitir o no el paso de lassolicitudes de interrupcin hacia la CPU se denominan mscaras.

    INTERRUPCIONES ENMASCARABLES: se pueden habilitar oinhabilitar por programa.

    INTERRUPCIONES NO ENMASCARABLES: no se puedeninhabilitar por programa, es decir, que estn siempre habilitadas.

    Cuando una solicitud de interrupcin es atendida, el sistema deinterrupcin queda inhabilitado (el bit de control global es puesto a 0).Entonces no llegar a la CPU ninguna nueva solicitud de interrupcinque se produzca.

    Para poder atender otras solicitudes de interrupcin, el programadordebe habilitar nuevamente el sistema; esto suele hacerlo el propioprograma que atiende la interrupcin.

  • ATENCIN A LOS SOLICITUDES DE INTERRUPCIN

    La solicitud de interrupcin que llega a la CPU, se atiende cuandotermina la ejecucin de la instruccin en curso.

    Como en general no se conoce de antemano cul es esta instruccin,hay que recordar la direccin de la instruccin que le sigue, pararegresar a ella cuando termine el programa que atiende a lainterrupcin.

    Esa direccin est en el contador del programa (PC). La forma derecordarla es guardar el contenido del PC en la pila, tal como lo hacenlas instrucciones de llamada a una subrutina.

    El programa de atencin a una interrupcin es una subrutina que sellama por interrupcin.

    Una solicitud de interrupcin equivale a insertar una instruccin dellamada a una subrutina (la que atiende la interrupcin) en un lugar noprevisible del programa.

  • ATENCIN A LOS SOLICITUDES DE INTERRUPCIN

  • ATENCIN A LOS SOLICITUDES DE INTERRUPCIN

    Las etapas que transcurren al atender una solicitud de interrupcinson las siguientes:

    1. El microcontrolador completa la ejecucin de la instruccin encurso.

    2. El valor del PC se guarda en la pila, para recordar la direccin dela instruccin a la que hay que regresar cuando termine laatencin a la interrupcin.

    3. La direccin de la subrutina de atencin a la interrupcin se poneen el PC, con lo cual se salta a esa direccin y comienza laejecucin de la subrutina.

    4. Se ejecuta la subrutina de atencin a la interrupcin. Como todasubrutina, termina (su ejecucin) con una instruccin de retorno.

    5. Con la ejecucin de la instruccin de retorno, se regresa alprograma interrumpido.

  • INTERRUPCIONES FIJAS Y VECTORIZADAS

    INTERRUPCIONES FIJAS: La subrutina que atiende lainterrupcin se coloca en un lugar fijo de la memoria de programa,conocido de antemano por la CPU. En esa direccin debe estar laprimera instruccin de la subrutina de atencin a la interrupcin.

    Puede haber una direccin de memoria diferente para cada fuente deinterrupcin o puede haber una direccin nica para todas lassolicitudes, como en los PIC; pero siempre son direcciones fijas..

    INTERRUPCIONES VECTORIZADAS: En esta solucin, junto ala solicitud de interrupcin, se le proporciona a la CPU la direccin dela subrutina de atencin a la interrupcin, o alguna informacin que lepermita construirla.

    Este dato que se le suministra a la CPU se conoce como vector deinterrupcin. Esta solucin, aunque es ms flexible que la primera, estcnicamente mucho ms compleja de implementar.

  • INTERRUPCIONES EN EL PIC16F877A

    Maneja interrupciones enmascarables y fijas.

    Tiene 14 fuentes de interrupcin.

    El sistema se habilita o inhabilita globalmente mediante el bit GIE delregistro de funciones especiales INTCON.

    Las interrupciones se habilitan o inhabilitan individualmente mediante bitsde los registros INTCON, PIE1 y PIE2.

    Al ser todas las interrupciones fijas, todas las solicitudes, si estnhabilitadas, hacen que el microcontrolador pase a ejecutarautomticamente la instruccin que est en la direccin 0X04h de lamemoria de programa.

    Dentro de la subrutina de atencin a la interrupcin, el programador debeaveriguar la fuente de la interrupcin consultando los bits apropiados enlos registros de funciones especiales (INTCON, PIR1 y PIR2) asociados alsistema de interrupcin del PIC.

  • INTERRUPCIONES EN EL PIC16F877A

  • INTERRUPCIONES EN EL PIC16F877A

    Entre las posibles fuentes de interrupcin estn las siguientes:

    Interrupcin externa por el terminal RB0/INT.

    Interrupcin por cambio en el nivel lgico de las entradas RB4:RB7 del puerto B.

    Interrupcin por el desbordamiento de los temporizadores Timer0, Timer1 y Timer2.

    Interrupcin por algn evento en el mdulo CCP.

    Interrupcin por el puerto serie USART.

    Interrupcin por el convertidor A/D.

    Interrupcin por escritura en la memoria interna EEPRON de datos.

  • INTERRUPCIONES EN EL PIC16F877A

    Cuando se produce una solicitud de interrupcin, si el sistema en suconjunto y la fuente particular estn habilitados, el microcontroladortermina la instruccin en curso, guarda en la pila el valor del contador deprograma y salta a la direccin 04h de la memoria de programa.

    El PIC16F877A tiene un nicovector de interrupcin situado en ladireccin 04h del programa.

    Al poseer un nico vector deinterrupcin, el PIC posee unosregistros de control dondemediante la utilizacin de banderaso flags, el usuario puede determinarque es lo que ha producido lainterrupcin. Adems en estosregistros se puede habilitar o no lasdistintas fuentes de interrupcin eincluso permite la habilitacingeneral.

  • REGISTROS ASOCIADOS AL MANEJO DE INTERRUPCIONES

    GIE (Global Interrupt Enable): con este se habilita (con GIE=1) o inhabilita (conGIE=0) el sistema global de interrupciones.

    PEIE (Peripheral Interrupt Enable): con este bit se habilitan (PEIE=1) lasinterrupciones de otras fuentes que no estn presentes en el registro INTCON sinoen los registros PIE.

    TMR0IE, TMR0IF: Bits relacionados con la interrupcin del Timer0. Con elTMR0IE puesto a 1 se habilita la interrupcin del Timer0. TMR0IF es el indicador dedesbordamiento del Timer0.

    INTE, INTF: Bits relacionados con la interrupcin externa RB0/INT.INTE=1habilita la interrupcin externa RB0/INT y INTF=1 informa que se haproducido esta interrupcin.

    RBIE, RBIF: Bits relacionados con la interrupcin por cambio de nivel en los bitsRB4 a RB7. El bit RBIE puesto a 1 habilita esta interrupcin. RBIF es el bit indicador.

  • REGISTROS ASOCIADOS AL MANEJO DE INTERRUPCIONES

    En los registros PIE (PIE1, PIE2) estn los bits para habilitar o inhabilitar lasinterrupciones de los perifricos.

    En los registros PIR (PIR1, PIR2) estn los bits indicadores de que ha sidosolicitada una interrupcin por los diferentes perifricos.

  • ATENCIN A UNA SOLICITUD DE INTERRUPCIN EN EL PIC16F877A

    a. En primer lugar, el sistema de interrupcin del PIC debe estar habilitado,es decir, el bit GIE del registro INTCON debe ser 1.

    b. En segundo lugar, la fuente de la interrupcin debe estar tambinhabilitada. Por ejemplo, si se trata de una interrupcin externa, el bitINTE del registro INTCON debe ser 1.

    c. Si se dan estas condiciones, la solicitud progresa y el microcontroladorguarda en la pila la direccin almacenada en el contador de programa ysalta a la direccin 04h de la memoria de programa. El bit GIE pasaautomticamente a 0, con lo cual se inhabilita el sistema de interrupcin yno se atendern nuevas solicitudes.

    d. El sistema se habilita de nuevo cuando se ejecuta la instruccin retfie deretorno al programa interrumpido desde la subrutina de atencin a lainterrupcin. La instruccin retfie pone el bit GIE a 1 y as el sistema deinterrupcin queda nuevamente habilitado, y con ello el PIC est listopara atender nuevas solicitudes de interrupcin.

  • MANEJO DE INTERRUPCIONES MEDIANTE EL COMPILADOR C

    La directiva habitual en el manejo de las interrupciones es #INT_xxxx,y especifica que la funcin que le sigue es una funcin de interrupcin;adems, no se necesita ms parmetros.

    Para los microcontroladores PIC16F877A hay 14 posibles directivasque se muestran en la siguiente tabla.

  • MANEJO DE INTERRUPCIONES MEDIANTE EL COMPILADOR C

    Existe una directiva #INT_DEFAULT que implica que se utilizar lafuncin que le acompaa si se activa una interrupcin y ninguno de losflags est activo.

    La directica #INT_GLOBAL indica que la funcin que va acontinuacin sustituye todas las acciones que inserta el compilador alaceptarse una interrupcin. Slo se ejecuta lo que vaya en dichafuncin. GLOBAL equivale a GIE = PEIE = 1 y debe activarse de formaindependiente.

    Si se utilizan las directivas de interrupcin, el compilador genera elcdigo necesario para ejecutar la subrutina que sigue a lainterrupcin.

    Adems genera el cdigo necesario para dejar intactos los valores delos registros con los que el programa principal estaba trabajando ypara guardar el valor del PC en la pila y restituir al final el contexto;tambin borrar el bit indicador que se activ con la interrupcin.

  • MANEJO DE INTERRUPCIONES MEDIANTE EL COMPILADOR C

    El programador debe encargarse nicamente de habilitar lasinterrupciones y establecer las sentencias que se ejecutarn en cadasubrutina de las interrupciones que sern atendidas.

    El formato para definir y declarar cada una de las subrutinas de atencin alas interrupciones es el siguiente:

    void xxxx_isr(void)

    {

    Instrucciones;

    }

    Donde xxxx puede ser cualquiera de las 14 posibles interrupciones(constantes). El tipo de datos void puede o no tomarse en consideracin(escribirse) segn este formato.

    Si el programador no se acuerda de este formato, puede utilizar la opcinProject Wizard para generar de forma automtica estas funciones cuandose han realizado las configuraciones correspondientes, segn lainterrupcin a utilizar.

  • MANEJO DE INTERRUPCIONES MEDIANTE EL COMPILADOR C

    enable_interrupts (nivel);

    nivel es una constante definida en el fichero de cabecera 16F877A.h y genera el cdigonecesario para activar las mscaras correspondientes, afectando a los registros ITCON,PIE1 y PIE2.

    disable_interrupts(nivel);

    Realiza la accin contraria a la funcin anterior, poniendo a 0 las mscaras relacionadascon la interrupcin indicada.

  • INTERRUPCIN EXTERIOR POR EL PIN RB0/INT

    La solicitud de interrupcin externa se hace a travs del terminal INT, quecomparte funciones con el terminal RB0 del puerto B.

    Esta interrupcin se produce con los flancos de la seal en el terminalRB0/INT. El flanco que produce la interrupcin puede ser de subida o debajada, lo cual se programa mediante el bit INTEDG del registro OPTION.

    La interrupcin externa queda reportada mediante el bit INTF del registroINTCON y se habilita mediante el bit INTE de ese mismo registro.

  • INTERRUPCIN EXTERIOR POR EL PIN RB0/INT

    La directiva que se utiliza el compilador C es #INT_EXT y se debeacompaar de las siguientes funciones (afectan al bit 6 del registroOPTION_REG):

    ext_int_edge(H_TO_L);

    La interrupcin es activada por flanco de bajada (activa el bit indicador INTF).

    ext_int_edge(L_TO_H);

    La interrupcin es activada por flanco de subida (activa el bit indicador INTF).

  • INTERRUPCIN EXTERIOR POR EL PIN RB0/INT - EJEMPLO

    Ejemplo 1: Encender y apagar, consecutivamente, un LED conectado en las patillaRB7 cuando se produzca un cambio de nivel en la patilla RB0 (ver figura).

  • INTERRUPCIN EXTERIOR POR EL PIN RB0/INT - EJEMPLO

    Ejemplo 1: Encender y apagar, consecutivamente, un LED conectado en las patillaRB7 cuando se produzca un cambio de nivel en la patilla RB0 (ver figura).

  • INTERRUPCIN POR CAMBIO EN EL NIVEL LGICO DE LAS ENTRADAS RB4 A RB7

    Si los terminales RB4 a RB7 estn programados como entradas y seproduce un cambio en el nivel lgico de la seal en cualquiera de estasentradas, es decir, de 0 a 1 o viceversa, habr una solicitud deinterrupcin.

    Al producirse la interrupcin por cambios en RB4 a RB7, el bit RBIFdel registro INTCON se pone a 1. La interrupcin puede habilitarseo inhabilitarse mediante el bit RBIE de ese mismo registro.

    Esta interrupcin se puede utilizar para despertar almicrocontrolador si se halla en el modo de bajo consumo (modosleep). Adems este recurso hardware es muy utilizado para el controlde teclados.

    La directiva utilizada pr el compilador C es #INT_RB.

  • INTERRUPCIN POR CAMBIO EN EL NIVEL LGICO DE LAS ENTRADAS RB4:RB7 - EJEMPLO

    Ejemplo 2: Realizar la gestin de un mini teclado haciendo uso deinterrupciones por cambio en el nivel lgico de las entradas RB4 a RB7. El miniteclado est formado por cuatro teclas (del 1 al 4) representadas por cuatropulsadores y que estn conectados a los pines RB4:RB7 respectivamente (verfigura). El valor en decimal de la tecla pulsada se mostrar en un display de 7segmentos de ctodo comn.

  • INTERRUPCIN POR CAMBIO EN EL NIVEL LGICO DE LAS ENTRADAS RB4:RB7 - EJEMPLO

    Ejemplo 2: PROGRAMA

  • INTERRUPCIN POR CAMBIO EN EL NIVEL LGICO DE LAS ENTRADAS RB4:RB7 - EJEMPLO

    Ejemplo 2: PROGRAMA