4-130716144650-phpapp01

38
INTERRUPCIONES Y TEMPORIZADORES MICROELECTRONICA

description

Interrupciones externas Pic c programación de micro-controladores.

Transcript of 4-130716144650-phpapp01

  • INTERRUPCIONES YTEMPORIZADORES

    MICROELECTRONICA

  • GENERALIDADES Las interrupciones son desviaciones del flujo decontrol del programa originadas asncronamente pordiversos sucesos que no se hallan bajo la supervisinde las instrucciones.

    Dichos sucesos pueden ser externos al sistema,como la generacin de un flanco o nivel activo en unpin del microcontrolador, o bien internos, como eldesbordamiento de un contador.

    Las interrupciones son desviaciones del flujo decontrol del programa originadas asncronamente pordiversos sucesos que no se hallan bajo la supervisinde las instrucciones.

    Dichos sucesos pueden ser externos al sistema,como la generacin de un flanco o nivel activo en unpin del microcontrolador, o bien internos, como eldesbordamiento de un contador.

  • GENERALIDADES Se detiene la ejecucin del programa en curso, sesalva la direccin actual del PC en la Pila y se cargael PC con una direccin, en el caso de unainterrupcin es una direccin reservada de lamemoria de cdigo, llamada Vector deinterrupcin, 0x04 para los microcontroladores dela gama baja y media; mientras que en la gama altaexisten dos direcciones: 0x08 prioridad alta y 0x18prioridad baja.

    Se detiene la ejecucin del programa en curso, sesalva la direccin actual del PC en la Pila y se cargael PC con una direccin, en el caso de unainterrupcin es una direccin reservada de lamemoria de cdigo, llamada Vector deinterrupcin, 0x04 para los microcontroladores dela gama baja y media; mientras que en la gama altaexisten dos direcciones: 0x08 prioridad alta y 0x18prioridad baja.

  • ENABLE/DISABLE_INTERRUPTS() are:#define GLOBAL 0xF2C0#define INT_RTCC 0xF220#define INT_TIMER0 0xF220#define INT_TIMER1 0x9D01#define INT_TIMER2 0x9D02#define INT_TIMER3 0xA002#define INT_EXT 0xF210#define INT_EXT1 0xF008#define INT_EXT2 0xF010#define INT_RB 0xFFF208#define INT_AD 0x9D40

    INTERRUPCIONES - DIRECTIVASENABLE/DISABLE_INTERRUPTS() are:#define GLOBAL 0xF2C0#define INT_RTCC 0xF220#define INT_TIMER0 0xF220#define INT_TIMER1 0x9D01#define INT_TIMER2 0x9D02#define INT_TIMER3 0xA002#define INT_EXT 0xF210#define INT_EXT1 0xF008#define INT_EXT2 0xF010#define INT_RB 0xFFF208#define INT_AD 0x9D40

  • ENABLE/DISABLE_INTERRUPTS() are:#define INT_RDA 0x9D20#define INT_TBE 0x9D10#define INT_SSP 0x9D08#define INT_CCP1 0x9D04#define INT_CCP2 0xA001#define INT_BUSCOL 0xA008#define INT_LOWVOLT 0xA004#define INT_COMP 0xA040#define INT_EEPROM 0xA010#define INT_OSCF 0xA080#define INT_SPP 0x9D80#define INT_USB 0xA020

    INTERRUPCIONES - DIRECTIVASENABLE/DISABLE_INTERRUPTS() are:#define INT_RDA 0x9D20#define INT_TBE 0x9D10#define INT_SSP 0x9D08#define INT_CCP1 0x9D04#define INT_CCP2 0xA001#define INT_BUSCOL 0xA008#define INT_LOWVOLT 0xA004#define INT_COMP 0xA040#define INT_EEPROM 0xA010#define INT_OSCF 0xA080#define INT_SPP 0x9D80#define INT_USB 0xA020

  • DEFAULT - GLOBAL

    Luis David Narvez

  • VENTAJAS

  • INTERRUPCION EXTERNARB0/INT

    INTERRUPCION EXTERNARB0/INT

    REGISTRO INTCONGIE PEIE T0IE INTE RBIE T0IF INTF RBIF

  • DESCRIPCIN Esta fuente de interrupcin es sumamente importantepara atender acontecimientos externos en tiempo real.

    Cuando ocurre alguno de ellos activa el pin RB0/INT yse hace una peticin de interrupcin, en formaautomtica.

    Este mtodo es ms eficaz que la tcnica de sondeo yaque el microcontrolador no perder tiempo preguntandoa la lnea de entrada para leer su estado, sino quenicamente atender al perifrico cuando ste se lo pidamediante la solicitud de interrupcin.

    Esta fuente de interrupcin es sumamente importantepara atender acontecimientos externos en tiempo real.

    Cuando ocurre alguno de ellos activa el pin RB0/INT yse hace una peticin de interrupcin, en formaautomtica.

    Este mtodo es ms eficaz que la tcnica de sondeo yaque el microcontrolador no perder tiempo preguntandoa la lnea de entrada para leer su estado, sino quenicamente atender al perifrico cuando ste se lo pidamediante la solicitud de interrupcin.

  • RB0/INT - PICC En el caso de la interrupcin externa RB0/INT de losPIC18FXXX se tiene la siguiente directiva.

    #INT_EXT flanco en el pin RB0. Se activa la bandera INTF.

    La directiva #INT_Global indica que la funcin que va acontinuacin sustituye todas las acciones que inserta elcompilador al aceptarse una interrupcin. Slo se ejecuta loque vaya en dicha funcin.

    En el caso de la interrupcin externa RB0/INT de losPIC18FXXX se tiene la siguiente directiva.

    #INT_EXT flanco en el pin RB0. Se activa la bandera INTF.

    La directiva #INT_Global indica que la funcin que va acontinuacin sustituye todas las acciones que inserta elcompilador al aceptarse una interrupcin. Slo se ejecuta loque vaya en dicha funcin.

  • RB0/INT - PICC Si se utilizan las directivas de interrupcin, elcompilador genera el cdigo necesario para saltar a lafuncin que va tras esta directiva en el momento dela interrupcin.

    Adems, genera el cdigo para salvar al principio yrestituir al final el contexto, y tambin borrar labandera que se activ con la interrupcin. Elprogramador, solo debe encargarse de habilitarlas interrupciones.

    Si se utilizan las directivas de interrupcin, elcompilador genera el cdigo necesario para saltar a lafuncin que va tras esta directiva en el momento dela interrupcin.

    Adems, genera el cdigo para salvar al principio yrestituir al final el contexto, y tambin borrar labandera que se activ con la interrupcin. Elprogramador, solo debe encargarse de habilitarlas interrupciones.

  • RB0/INT - PICC Existe tambin otra funcin adicional destinada aconfigurar el flanco activo que genera la interrupcinexterna (en RB0).

    ext_int_edge (0, H_TO_L); - equivale a INTEDG=0.Selecciona el flanco de bajada para activar la banderaINTF.

    ext_int_edge (0, L_TO_H); - equivale a INTEDG=1.Selecciona el flanco de subida para activar la banderaINTF.

    Existe tambin otra funcin adicional destinada aconfigurar el flanco activo que genera la interrupcinexterna (en RB0).

    ext_int_edge (0, H_TO_L); - equivale a INTEDG=0.Selecciona el flanco de bajada para activar la banderaINTF.

    ext_int_edge (0, L_TO_H); - equivale a INTEDG=1.Selecciona el flanco de subida para activar la banderaINTF.

  • PRCTICA Enunciado: Realizar un programa que indique entiempo real la recepcin de una seal externa recibidapor el pin INT0, INT1, INT2 del microcontrolador. Larecepcin de dicha seal se lo har a travs de tresLEDs indicadores, los cuales se apagarn mientras sepresione el pulsador correspondiente.

    Enunciado: Realizar un programa que indique entiempo real la recepcin de una seal externa recibidapor el pin INT0, INT1, INT2 del microcontrolador. Larecepcin de dicha seal se lo har a travs de tresLEDs indicadores, los cuales se apagarn mientras sepresione el pulsador correspondiente.

  • FLUJOGRAMA

  • SIMULACIN

  • INTERRUPCION RBIINTERRUPCION EXTERNA RBI

    REGISTRO INTCONGIE PEIE T0IE INTE RBIE T0IF INTF RBIF

    INTERRUPCION RBI

  • DESCRIPCIN Los pines del PORTB producen una solainterrupcin por cambio de su estado.

    Para activar la interrupcin por cambio de estado en lospines los bits RBIE y GIE del registroINTCON deben estar a 1, en estas condicionescuando se produce un cambio de nivel en cualquiera delas lneas RB7 a RB4 se activa la bandera RBIF delregistro INTCON.

    Los pines del PORTB producen una solainterrupcin por cambio de su estado.

    Para activar la interrupcin por cambio de estado en lospines los bits RBIE y GIE del registroINTCON deben estar a 1, en estas condicionescuando se produce un cambio de nivel en cualquiera delas lneas RB7 a RB4 se activa la bandera RBIF delregistro INTCON.

  • RBI CCS COMPILER Entonces en la subrutina de interrupcin se deber hacerel tratamiento respectivo para identificar cual de lospines se activ.

    En Lenguaje C, la interrupcin se activa conenable_interrupts(INT_RB) y la subrutina detratamiento de la interrupcin se llama con INT_RB.

    Entonces en la subrutina de interrupcin se deber hacerel tratamiento respectivo para identificar cual de lospines se activ.

    En Lenguaje C, la interrupcin se activa conenable_interrupts(INT_RB) y la subrutina detratamiento de la interrupcin se llama con INT_RB.

  • RBI CCS COMPILER En caso que se estn atendiendo varias interrupciones,el compilador C, tambin tiene la directiva #priority quesirve para fijar la prioridad de las interrupciones, as, lasinterrupciones ms importantes estn son listadas alprincipio.

    Por ejemplo: #priority ext, rbi; //la interrupcin RB0/INT seratendida antes de RBI.

    En caso que se estn atendiendo varias interrupciones,el compilador C, tambin tiene la directiva #priority quesirve para fijar la prioridad de las interrupciones, as, lasinterrupciones ms importantes estn son listadas alprincipio.

    Por ejemplo: #priority ext, rbi; //la interrupcin RB0/INT seratendida antes de RBI.

  • PRCTICAEnunciado: Se conectan 4 pulsadores a RB4, RB5,RB6 y RB7 y una LCD al puerto D. Se realiza uncontador automtica que dependa de la deteccin decambio de estado en cada pin RBI, de acuerdo alsiguiente detalle: +1, -1, -10, +10.

    Enunciado: Se conectan 4 pulsadores a RB4, RB5,RB6 y RB7 y una LCD al puerto D. Se realiza uncontador automtica que dependa de la deteccin decambio de estado en cada pin RBI, de acuerdo alsiguiente detalle: +1, -1, -10, +10.

  • SIMULACIN

  • TIMERSTIMERSRTCC, TIMER 1, TIMER 2, TIMER 3

    Luis David Narvez

  • TIMER 0 - RTCC Una de las labores ms habituales en los programasde control de dispositivos suele ser determinarintervalos concretos de tiempo, y recibe el nombrede temporizador (timer) el elemento encargado derealizar esta funcin.

    Tambin suele ser frecuente contar los impulsos quese producen en el exterior del sistema, y el elementodestinado a este fin se llama contador.

    Luis David Narvez

    Una de las labores ms habituales en los programasde control de dispositivos suele ser determinarintervalos concretos de tiempo, y recibe el nombrede temporizador (timer) el elemento encargado derealizar esta funcin.

    Tambin suele ser frecuente contar los impulsos quese producen en el exterior del sistema, y el elementodestinado a este fin se llama contador.

  • TIMER 0 - RTCC TMR0 es un contador/temporizador de 8/16 bits. Se puede leer y escribir. Puede trabajar con reloj interno o con seal de relojexterna.

    Seleccin del flanco en el reloj externo. Predivisor de frecuencia de reloj programable porsoftware de 8 bits.

    Interrupcin opcional en el desbordamiento.

    Luis David Narvez

    TMR0 es un contador/temporizador de 8/16 bits. Se puede leer y escribir. Puede trabajar con reloj interno o con seal de relojexterna.

    Seleccin del flanco en el reloj externo. Predivisor de frecuencia de reloj programable porsoftware de 8 bits.

    Interrupcin opcional en el desbordamiento.

  • TEMPORIZACIN TIMER 0 El tiempo empleado en una temporizacin se puedecalcular a partir de un ciclo de instruccin (es decir unainstruccin por cada microsegundo, si se trabaja conun cristal HS de 8 MHz), tambin necesitamos el valor delDivisor de Frecuencia (el que seleccionamos con losbits PS2, PS1 y PS0), y finalmente con el complementodel valor cargado en TMR0 (es decir 65536-TMR0), laecuacin que nos permite realizar el clculo es la quesigue:

    Temporizacin = Ciclo de instruccin * (65536 -TMR0) * Divisor de Frecuencia

    El tiempo empleado en una temporizacin se puedecalcular a partir de un ciclo de instruccin (es decir unainstruccin por cada microsegundo, si se trabaja conun cristal HS de 8 MHz), tambin necesitamos el valor delDivisor de Frecuencia (el que seleccionamos con losbits PS2, PS1 y PS0), y finalmente con el complementodel valor cargado en TMR0 (es decir 65536-TMR0), laecuacin que nos permite realizar el clculo es la quesigue:

    Temporizacin = Ciclo de instruccin * (65536 -TMR0) * Divisor de Frecuencia

  • TEMPORIZACIN TIMER 0 Se desea una temporizacin de 100 ms (100 milisegundos), con unHS de 8 MHz., y que adems seleccionamos como Divisor defrecuencia 256 (es decir PS2,PS1,PS0 = 1,1,1). La pregunta, seraCul es el valor que se debe cargar enTMR0?

    Despejando65536-TMR0 =Temporizacin(en microsegundos)/(1 us/cm* Div. de Frec.)

    (cm ciclos mquina) y reemplazando tendremos 65536-TMR0 = 100000 us/(0,5 us/cm * 256) 65536-TMR0 ~ 781 cm

    Se desea una temporizacin de 100 ms (100 milisegundos), con unHS de 8 MHz., y que adems seleccionamos como Divisor defrecuencia 256 (es decir PS2,PS1,PS0 = 1,1,1). La pregunta, seraCul es el valor que se debe cargar enTMR0?

    Despejando65536-TMR0 =Temporizacin(en microsegundos)/(1 us/cm* Div. de Frec.)

    (cm ciclos mquina) y reemplazando tendremos 65536-TMR0 = 100000 us/(0,5 us/cm * 256) 65536-TMR0 ~ 781 cm

  • TEMPORIZACIN TIMER 0 Eso significa que en TMR0 deberemos cargar es:

    65536-781=64755

    A partir de all el TMR0 contar los 781 ciclos quefaltan para desbordarse y producir la interrupcin, yel tiempo que tardar en hacerlo es 100msaproximadamente.

    Eso significa que en TMR0 deberemos cargar es:

    65536-781=64755

    A partir de all el TMR0 contar los 781 ciclos quefaltan para desbordarse y producir la interrupcin, yel tiempo que tardar en hacerlo es 100msaproximadamente.

  • TIMER 0 PIC C

    Luis David Narvez

  • TIMER 0 PIC C Escritura en el mdulo TMR0 Set_timer0(valor); Valor: Entero de 8/16 bits

    Lectura en el mdulo TMR0 Valor=get_timer0(); Valor: Entero de 8/16 bits

    Luis David Narvez

    Escritura en el mdulo TMR0 Set_timer0(valor); Valor: Entero de 8/16 bits

    Lectura en el mdulo TMR0 Valor=get_timer0(); Valor: Entero de 8/16 bits

  • TIMER 0 PIC C Los distintos modos se pueden agrupar mediante elempleo del smbolo |. Por ejemplo:

    Setup_timer_0(RTCC_Div_256|RTCC_Ext_L_to_H);

    Nota!!! En ocasiones se emplea RTCC en lugar detimer0, es decir, set_RTCC es lo mismo queset_timer0.

    Los distintos modos se pueden agrupar mediante elempleo del smbolo |. Por ejemplo:

    Setup_timer_0(RTCC_Div_256|RTCC_Ext_L_to_H);

    Nota!!! En ocasiones se emplea RTCC en lugar detimer0, es decir, set_RTCC es lo mismo queset_timer0.

  • PRCTICA Enunciado: Desarrollar un programa que encienda yapague secuencialmente un LED cada 300ms.Para la temporizacin se emplear lainterrupcin del TMR0.

    Enunciado: Desarrollar un programa que encienda yapague secuencialmente un LED cada 300ms.Para la temporizacin se emplear lainterrupcin del TMR0.

  • DESARROLLO Calcular la carga del TMR0 para 10 ms con undivisor de frecuencia de 256 (Prescaler de 256)

    Entonces usaremos un registro auxiliar con uncontenido de 30 para obtener los 300ms.

    Carga Registro Auxiliar con 30 para obtener los300ms de temporizacin.

    Bucle infinito en el programa principal.

    Calcular la carga del TMR0 para 10 ms con undivisor de frecuencia de 256 (Prescaler de 256)

    Entonces usaremos un registro auxiliar con uncontenido de 30 para obtener los 300ms.

    Carga Registro Auxiliar con 30 para obtener los300ms de temporizacin.

    Bucle infinito en el programa principal.

  • DESARROLLO Para la subrutina de interrupcin, tenemos: Recarga del TMR0 con su valor correspondiente paraobtener una temporizacin de 10ms.

    Disminuir (aumentar) el Contador Auxiliar hastaobtener los 300ms.

    Verificar el estado del LED. Si est apagado lo enciende yviceversa.

    Mantener en ese estado (prendido o pagado) durante300ms.

    Regresar al programa principal.

    Para la subrutina de interrupcin, tenemos: Recarga del TMR0 con su valor correspondiente paraobtener una temporizacin de 10ms.

    Disminuir (aumentar) el Contador Auxiliar hastaobtener los 300ms.

    Verificar el estado del LED. Si est apagado lo enciende yviceversa.

    Mantener en ese estado (prendido o pagado) durante300ms.

    Regresar al programa principal.

  • SIMULACIN

  • SIMULACIN

  • EL TMR0 COMO CONTADOR DEEVENTOS EXTERNOS

    Prctica: Enunciado:

    Se desea realizar un programa que cuente los pulsosprovenientes por el pin RA4 mediante el TMR0 configuradocomo contador, y el TMR1 como base de tiempo de 1s.(Frecuencmetro)

    De esta manera se visualizar la frecuencia en una LCD.

    Prctica: Enunciado:

    Se desea realizar un programa que cuente los pulsosprovenientes por el pin RA4 mediante el TMR0 configuradocomo contador, y el TMR1 como base de tiempo de 1s.(Frecuencmetro)

    De esta manera se visualizar la frecuencia en una LCD.

  • SIMULACIN