4. interrupciones y temporizadores

38
INTERRUPCIONES Y TEMPORIZADORES MICROELECTRONICA

Transcript of 4. interrupciones y temporizadores

Page 1: 4. interrupciones y temporizadores

INTERRUPCIONES YTEMPORIZADORES

MICROELECTRONICA

Page 2: 4. interrupciones y temporizadores

GENERALIDADES

Las interrupciones son desviaciones del flujo decontrol del programa originadas asíncronamente pordiversos sucesos que no se hallan bajo la supervisiónde las instrucciones.

Dichos sucesos pueden ser externos al sistema,como la generación 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 asíncronamente pordiversos sucesos que no se hallan bajo la supervisiónde las instrucciones.

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

Page 3: 4. interrupciones y temporizadores

GENERALIDADES

Se detiene la ejecución del programa en curso, sesalva la dirección actual del PC en la Pila y se cargael PC con una dirección, en el caso de unainterrupción es una dirección “reservada” de lamemoria de código, llamada Vector deinterrupción, 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 ejecución del programa en curso, sesalva la dirección actual del PC en la Pila y se cargael PC con una dirección, en el caso de unainterrupción es una dirección “reservada” de lamemoria de código, llamada Vector deinterrupción, 0x04 para los microcontroladores dela gama baja y media; mientras que en la gama altaexisten dos direcciones: 0x08 prioridad alta y 0x18prioridad baja.

Page 4: 4. interrupciones y temporizadores

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

Page 5: 4. interrupciones y temporizadores

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

Page 6: 4. interrupciones y temporizadores

DEFAULT - GLOBAL

Luis David Narváez

Page 7: 4. interrupciones y temporizadores

VENTAJAS

Page 8: 4. interrupciones y temporizadores

INTERRUPCION EXTERNARB0/INT

INTERRUPCION EXTERNARB0/INT

REGISTRO INTCONGIE PEIE T0IE INTE RBIE T0IF INTF RBIF

Page 9: 4. interrupciones y temporizadores

DESCRIPCIÓN Esta fuente de interrupción es sumamente importante

para atender acontecimientos externos en tiempo real.

Cuando ocurre alguno de ellos activa el pin RB0/INT yse hace una petición de interrupción, en formaautomática.

Este método es más eficaz que la técnica de sondeo yaque el microcontrolador no perderá tiempo preguntandoa la línea de entrada para leer su estado, sino queúnicamente atenderá al periférico cuando éste se lo pidamediante la solicitud de interrupción.

Esta fuente de interrupción es sumamente importantepara atender acontecimientos externos en tiempo real.

Cuando ocurre alguno de ellos activa el pin RB0/INT yse hace una petición de interrupción, en formaautomática.

Este método es más eficaz que la técnica de sondeo yaque el microcontrolador no perderá tiempo preguntandoa la línea de entrada para leer su estado, sino queúnicamente atenderá al periférico cuando éste se lo pidamediante la solicitud de interrupción.

Page 10: 4. interrupciones y temporizadores

RB0/INT - PICC En el caso de la interrupción externa RB0/INT de los

PIC18FXXX se tiene la siguiente directiva.

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

La directiva #INT_Global indica que la función que va acontinuación sustituye todas las acciones que inserta elcompilador al aceptarse una interrupción. Sólo se ejecuta loque vaya en dicha función.

En el caso de la interrupción 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 función que va acontinuación sustituye todas las acciones que inserta elcompilador al aceptarse una interrupción. Sólo se ejecuta loque vaya en dicha función.

Page 11: 4. interrupciones y temporizadores

RB0/INT - PICC Si se utilizan las directivas de interrupción, el

compilador genera el código necesario para saltar a lafunción que va tras esta directiva en el momento dela interrupción.

Además, genera el código para salvar al principio yrestituir al final el contexto, y también borrará labandera que se activó con la interrupción. Elprogramador, solo debe encargarse de habilitarlas interrupciones.

Si se utilizan las directivas de interrupción, elcompilador genera el código necesario para saltar a lafunción que va tras esta directiva en el momento dela interrupción.

Además, genera el código para salvar al principio yrestituir al final el contexto, y también borrará labandera que se activó con la interrupción. Elprogramador, solo debe encargarse de habilitarlas interrupciones.

Page 12: 4. interrupciones y temporizadores

RB0/INT - PICC Existe también otra función adicional destinada a

configurar el flanco activo que genera la interrupciónexterna (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 también otra función adicional destinada aconfigurar el flanco activo que genera la interrupciónexterna (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.

Page 13: 4. interrupciones y temporizadores

PRÁCTICA

Enunciado: Realizar un programa que indique entiempo real la recepción de una señal externa recibidapor el pin INT0, INT1, INT2 del microcontrolador. Larecepción de dicha señal se lo hará a través de tresLEDs indicadores, los cuales se apagarán mientras sepresione el pulsador correspondiente.

Enunciado: Realizar un programa que indique entiempo real la recepción de una señal externa recibidapor el pin INT0, INT1, INT2 del microcontrolador. Larecepción de dicha señal se lo hará a través de tresLEDs indicadores, los cuales se apagarán mientras sepresione el pulsador correspondiente.

Page 14: 4. interrupciones y temporizadores

FLUJOGRAMA

Page 15: 4. interrupciones y temporizadores

SIMULACIÓN

Page 16: 4. interrupciones y temporizadores

INTERRUPCION RBI

INTERRUPCION EXTERNA RBIREGISTRO INTCON

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

INTERRUPCION RBI

Page 17: 4. interrupciones y temporizadores

DESCRIPCIÓN

Los pines <RB7:RB4> del PORTB producen una solainterrupción por cambio de su estado.

Para activar la interrupción por cambio de estado en lospines <RB7:RB4> los bits RBIE y GIE del registroINTCON deben estar a “1”, en estas condicionescuando se produce un cambio de nivel en cualquiera delas líneas RB7 a RB4 se activa la bandera RBIF delregistro INTCON.

Los pines <RB7:RB4> del PORTB producen una solainterrupción por cambio de su estado.

Para activar la interrupción por cambio de estado en lospines <RB7:RB4> los bits RBIE y GIE del registroINTCON deben estar a “1”, en estas condicionescuando se produce un cambio de nivel en cualquiera delas líneas RB7 a RB4 se activa la bandera RBIF delregistro INTCON.

Page 18: 4. interrupciones y temporizadores

RBI – CCS COMPILER

Entonces en la subrutina de interrupción se deberá hacerel tratamiento respectivo para identificar cual de lospines se activó.

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

Entonces en la subrutina de interrupción se deberá hacerel tratamiento respectivo para identificar cual de lospines se activó.

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

Page 19: 4. interrupciones y temporizadores

RBI – CCS COMPILER

En caso que se estén atendiendo varias interrupciones,el compilador C, también tiene la directiva #priority quesirve para fijar la prioridad de las interrupciones, así, lasinterrupciones más importantes están son listadas alprincipio.

Por ejemplo: #priority ext, rbi; //la interrupción RB0/INT será

atendida antes de RBI.

En caso que se estén atendiendo varias interrupciones,el compilador C, también tiene la directiva #priority quesirve para fijar la prioridad de las interrupciones, así, lasinterrupciones más importantes están son listadas alprincipio.

Por ejemplo: #priority ext, rbi; //la interrupción RB0/INT será

atendida antes de RBI.

Page 20: 4. interrupciones y temporizadores

PRÁCTICA

Enunciado: Se conectan 4 pulsadores a RB4, RB5,RB6 y RB7 y una LCD al puerto D. Se realiza uncontador automática que dependa de la detección 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 automática que dependa de la detección decambio de estado en cada pin RBI, de acuerdo alsiguiente detalle: +1, -1, -10, +10.

Page 21: 4. interrupciones y temporizadores

SIMULACIÓN

Page 22: 4. interrupciones y temporizadores

TIMERSTIMERSRTCC, TIMER 1, TIMER 2, TIMER 3

Luis David Narváez

Page 23: 4. interrupciones y temporizadores

TIMER 0 - RTCC

Una de las labores más habituales en los programasde control de dispositivos suele ser determinarintervalos concretos de tiempo, y recibe el nombrede temporizador (timer) el elemento encargado derealizar esta función.

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

Luis David Narváez

Una de las labores más habituales en los programasde control de dispositivos suele ser determinarintervalos concretos de tiempo, y recibe el nombrede temporizador (timer) el elemento encargado derealizar esta función.

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

Page 24: 4. interrupciones y temporizadores

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

externa. Selección del flanco en el reloj externo. Predivisor de frecuencia de reloj programable por

software de 8 bits. Interrupción opcional en el desbordamiento.

Luis David Narváez

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

externa. Selección del flanco en el reloj externo. Predivisor de frecuencia de reloj programable por

software de 8 bits. Interrupción opcional en el desbordamiento.

Page 25: 4. interrupciones y temporizadores

TEMPORIZACIÓN TIMER 0 El tiempo empleado en una temporización se puede

calcular a partir de un ciclo de instrucción (es decir unainstrucción por cada ½ microsegundo, si se trabaja conun cristal HS de 8 MHz), también 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), laecuación que nos permite realizar el cálculo es la quesigue:

Temporización = Ciclo de instrucción * (65536 -TMR0) * Divisor de Frecuencia

El tiempo empleado en una temporización se puedecalcular a partir de un ciclo de instrucción (es decir unainstrucción por cada ½ microsegundo, si se trabaja conun cristal HS de 8 MHz), también 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), laecuación que nos permite realizar el cálculo es la quesigue:

Temporización = Ciclo de instrucción * (65536 -TMR0) * Divisor de Frecuencia

Page 26: 4. interrupciones y temporizadores

TEMPORIZACIÓN TIMER 0 Se desea una temporización de 100 ms (100 milisegundos), con un

HS de 8 MHz., y que además seleccionamos como Divisor defrecuencia 256 (es decir PS2,PS1,PS0 = 1,1,1). La pregunta, sería¿Cuál es el valor que se debe cargar enTMR0?

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

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

Se desea una temporización de 100 ms (100 milisegundos), con unHS de 8 MHz., y que además seleccionamos como Divisor defrecuencia 256 (es decir PS2,PS1,PS0 = 1,1,1). La pregunta, sería¿Cuál es el valor que se debe cargar enTMR0?

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

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

Page 27: 4. interrupciones y temporizadores

TEMPORIZACIÓN 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 interrupción, 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 interrupción, yel tiempo que tardará en hacerlo es 100msaproximadamente.

Page 28: 4. interrupciones y temporizadores

TIMER 0 – PIC C

Luis David Narváez

Page 29: 4. interrupciones y temporizadores

TIMER 0 – PIC C

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

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

Luis David Narváez

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

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

Page 30: 4. interrupciones y temporizadores

TIMER 0 – PIC C

Los distintos modos se pueden agrupar mediante elempleo del símbolo |. 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 símbolo |. 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.

Page 31: 4. interrupciones y temporizadores

PRÁCTICA

Enunciado: Desarrollar un programa que encienda y

apague secuencialmente un LED cada 300ms.Para la temporización se empleará lainterrupción del TMR0.

Enunciado: Desarrollar un programa que encienda y

apague secuencialmente un LED cada 300ms.Para la temporización se empleará lainterrupción del TMR0.

Page 32: 4. interrupciones y temporizadores

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 temporización.

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 temporización.

Bucle infinito en el programa principal.

Page 33: 4. interrupciones y temporizadores

DESARROLLO Para la subrutina de interrupción, tenemos: Recarga del TMR0 con su valor correspondiente para

obtener una temporización de 10ms. Disminuir (aumentar) el Contador Auxiliar hasta

obtener los 300ms. Verificar el estado del LED. Si está apagado lo enciende y

viceversa. Mantener en ese estado (prendido o pagado) durante

300ms. Regresar al programa principal.

Para la subrutina de interrupción, tenemos: Recarga del TMR0 con su valor correspondiente para

obtener una temporización de 10ms. Disminuir (aumentar) el Contador Auxiliar hasta

obtener los 300ms. Verificar el estado del LED. Si está apagado lo enciende y

viceversa. Mantener en ese estado (prendido o pagado) durante

300ms. Regresar al programa principal.

Page 34: 4. interrupciones y temporizadores
Page 35: 4. interrupciones y temporizadores

SIMULACIÓN

Page 36: 4. interrupciones y temporizadores

SIMULACIÓN

Page 37: 4. interrupciones y temporizadores

EL TMR0 COMO CONTADOR DEEVENTOS EXTERNOS

Práctica: Enunciado: Se desea realizar un programa que cuente los pulsos

provenientes por el pin RA4 mediante el TMR0 configuradocomo contador, y el TMR1 como base de tiempo de 1s.(Frecuencímetro)

De esta manera se visualizará la frecuencia en una LCD.

Práctica: Enunciado: Se desea realizar un programa que cuente los pulsos

provenientes por el pin RA4 mediante el TMR0 configuradocomo contador, y el TMR1 como base de tiempo de 1s.(Frecuencímetro)

De esta manera se visualizará la frecuencia en una LCD.

Page 38: 4. interrupciones y temporizadores

SIMULACIÓN