43
INTERRUPCIONES Y TEMPORIZADORES MICROELECTRONICA

Interrupciones y Temporizadores pucesi

Embed Size (px)

Citation preview

Page 1: Interrupciones y Temporizadores   pucesi

INTERRUPCIONES YTEMPORIZADORES

MICROELECTRONICA

Page 2: Interrupciones y Temporizadores   pucesi

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.

Page 3: Interrupciones y Temporizadores   pucesi

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.

Page 4: Interrupciones y Temporizadores   pucesi

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 - DIRECTIVAS

Page 5: Interrupciones y Temporizadores   pucesi

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 - DIRECTIVAS

Page 6: Interrupciones y Temporizadores   pucesi

DEFAULT - GLOBAL

Luis David Narváez

Page 7: Interrupciones y Temporizadores   pucesi

VENTAJAS

Page 8: Interrupciones y Temporizadores   pucesi

INTERRUPCION EXTERNARB0/INT

REGISTRO INTCONGIE PEIE T0IE INTE RBIE T0IF INTF RBIF

Page 9: Interrupciones y Temporizadores   pucesi

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.

Page 10: Interrupciones y Temporizadores   pucesi

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.

Page 11: Interrupciones y Temporizadores   pucesi

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.

Page 12: Interrupciones y Temporizadores   pucesi

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.

Page 13: Interrupciones y Temporizadores   pucesi

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.

Page 14: Interrupciones y Temporizadores   pucesi

FLUJOGRAMA

Page 15: Interrupciones y Temporizadores   pucesi

SIMULACIÓN

Page 16: Interrupciones y Temporizadores   pucesi

RETO

Enunciado: Realizar un contador autónomo de 0 a9999 en cuatro displays de 7 segmentos, elincremento se realizará con una temporización de 500ms. Un pulsador sin interrupción (PIN_B3) posibilitaráel conteo de 1 en 1. La INT0 para un conteo de 10 en10, la INT1 para un conteo de 100 en 100, la INT2para un conteo de 1000 en 1000.

Page 17: Interrupciones y Temporizadores   pucesi

INTERRUPCION EXTERNA RBIREGISTRO INTCON

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

INTERRUPCION RBI

Page 18: Interrupciones y Temporizadores   pucesi

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.

Page 19: Interrupciones y Temporizadores   pucesi

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.

Page 20: Interrupciones y Temporizadores   pucesi

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.

Page 21: Interrupciones y Temporizadores   pucesi

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.

Page 22: Interrupciones y Temporizadores   pucesi

SIMULACIÓN

Page 23: Interrupciones y Temporizadores   pucesi

TIMERSRTCC, TIMER 1, TIMER 2, TIMER 3

Luis David Narváez

Page 24: Interrupciones y Temporizadores   pucesi

TIMER 0 - RTCC

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 25: Interrupciones y Temporizadores   pucesi

TIMER 0 - RTCC

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 26: Interrupciones y Temporizadores   pucesi

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

Page 27: Interrupciones y Temporizadores   pucesi

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

Page 28: Interrupciones y Temporizadores   pucesi

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.

Page 29: Interrupciones y Temporizadores   pucesi

TIMER 0 – PIC C

Luis David Narváez

Page 30: Interrupciones y Temporizadores   pucesi

TIMER 0 – PIC C

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 31: Interrupciones y Temporizadores   pucesi

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.

Page 32: Interrupciones y Temporizadores   pucesi

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.

Page 33: Interrupciones y Temporizadores   pucesi

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.

Page 34: Interrupciones y Temporizadores   pucesi

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.

Page 35: Interrupciones y Temporizadores   pucesi
Page 36: Interrupciones y Temporizadores   pucesi

SIMULACIÓN

Page 37: Interrupciones y Temporizadores   pucesi

SIMULACIÓN

Page 38: Interrupciones y Temporizadores   pucesi

PRÁCTICA

Enunciado: Desarrollar un programa que encienda y

apague secuencialmente tres LEDs cada500ms, 1 seg. y 1,5 seg. Para la temporizaciónse empleará la interrupción del TMR0, TMR1,TMR3

Page 39: Interrupciones y Temporizadores   pucesi

Luis David Narváez

SIMULACIÓN

Page 40: Interrupciones y Temporizadores   pucesi

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.

Page 41: Interrupciones y Temporizadores   pucesi

GENERADOR DE PULSOS

Luis David Narváez

( ) = .+

Page 42: Interrupciones y Temporizadores   pucesi

Luis David Narváez

GENERADOR DE PULSOS

Page 43: Interrupciones y Temporizadores   pucesi

SIMULACIÓN