Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

Interrupciones y temporizadores




Enviado por Pablo Turmero



    Monografias.com

    Programación en C para electrónica
    Interrupciones
    1

    Monografias.com

    Interrupciones del PIC 16F876A
    Las interrupciones permiten la interrupción del programa a cualquier suceso (interno o externo).
    Al producirse una interrupción el PIC salta a la dirección del vector (0004h) de interrupción y ejecuta la rutina.
    Cuando la rutina de manejo de la interrupción finaliza (RETFIE) el programa retorna al punto donde se interrumpió el programa.
    2

    Monografias.com

    Interrupciones del PIC 16F876A
    El PIC 16F876A tiene un único vector de interrupción y todas las interrupciones provocan un salto a ese vector. (0004h)
    La rutina de manejo de la interrupción debe identificar qué evento interrumpió el programa para ejecutar la rutina correspondiente.
    El PIC posee registros con “flags” de interrupción que permiten identificar el evento.
    3

    Monografias.com

    Registros de interrupción
    4

    Monografias.com

    Registros de interrupción
    5

    Monografias.com

    Registros de interrupción
    6

    Monografias.com

    Interrupciones en CCS
    CCS dispone de directivas para el manejo de interrupciones.
    #int_XXXX.
    La directiva especifica que la función que la sigue es la función de interrupción correspondiente.
    Ejemplo:
    //interrupción timer 1
    #int_TIMER1
    void TIMER1_isr (void)
    {
    switch (ciclo)
    {
    case 0:
    ….
    7

    Monografias.com

    Interrupciones en CCS
    8

    Monografias.com

    Funciones para interrupciones
    El compilador incluye funciones para facilitar el manejo de interrupciones en C.
    enable_interrupts(level)
    Activa las interrupciones indicadas por level.
    disable_interrupts(level)
    desactiva las interrupciones indicadas por level.
    clear_interrupts(level)
    Borra el flag de interrupción indicado.
    9

    Monografias.com

    level
    Level es una constante definida en el fichero de cabecera (#include ).
    Genera el código necesario para activar las interrupciones correspondientes modificando los registros ITCON, PIE1 y PIE2.
    Cuando se activa alguna interrupción es necesario activar “globalmente” las interrupciones.
    10

    Monografias.com

    level
    11

    Monografias.com

    Ejemplos:
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
    disable_interrupts(GLOBAL);
    clear_interrupts(INT_RTCC);
    enable_interrupts(GLOBAL | INT_RTCC);
    Nota: Esta ultima solo se puede hacer con interrupciones del mismo registro.
    12

    Monografias.com

    Programación en C para electrónica
    Temporizadores
    13

    Monografias.com

    Temporizadores:
    El PIC 16F876A dispone de tres temporizadores/contadores:
    Timer 0: 8 bits.
    Timer 1: 16 bits.
    Timer 2: 16 bits.
    Pueden funcionar como contadores de flancos externos o como temporizador (contador de ciclos máquina).
    Disponen de “prescaler” para ampliar el tamaño de la cuenta (hasta x256).
    14

    Monografias.com

    Timer 1:
    Cuenta de 16 bits en dos registros de 8 bits: TMR1H (parte alta) y TMR1L (parte baja)
    Los registros de cuenta se pueden leer y escribir.
    Interrupción por desboradmiento de FFFFh a 0000h.
    Controlado por el registro T1CON.
    Funcionamiento como:
    Temporizador (incrementa cada ciclo máquina).
    Contador síncrono.
    Contador asíncrono.
    15

    Monografias.com

    Timer 1:
    16

    Monografias.com

    T1CON:
    17

    Monografias.com

    Timer 1 en C:
    CCS provee funciones de configuración de los teporizadores:
    setup_timer_X (modo)
    Programa el modo de funcionamiento del timer X
    get_timerX ()
    Lee el valor de la cuenta.
    set_timerX (valor)
    Escribe “valor” en los registros de cuenta.
    18

    Monografias.com

    setup_timer_1(mode)
    Configura el timer 1.
    El modo de funcionamiento (mode)es una constante definida en el archivo de cabecera.
    Los modos se pueden agrupar con |.
    19

    Monografias.com

    set_timer1(value) y get_timer1
    set_timer1 escribe “value” (entero de 16 bits) en los registros de cuenta del timer 1 (TMR1H yTMR1L).
    get_timer1() devuelve (16 bits) el valor de los registros TMR1H yTMR1L.
    value=get_timer1();
    20

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter