Sunteți pe pagina 1din 38

INTERRUPCIONES Y

TEMPORIZADORES
MICROELECTRONICA

GENERALIDADES

Las interrupciones son desviaciones del flujo de


control del programa originadas asncronamente por
diversos sucesos que no se hallan bajo la supervisin
de las instrucciones.

Dichos sucesos pueden ser externos al sistema,


como la generacin de un flanco o nivel activo en un
pin del microcontrolador, o bien internos, como el
desbordamiento de un contador.

GENERALIDADES

Se detiene la ejecucin del programa en curso, se


salva la direccin actual del PC en la Pila y se carga
el PC con una direccin, en el caso de una
interrupcin es una direccin reservada de la
memoria de cdigo, llamada Vector de
interrupcin, 0x04 para los microcontroladores de
la gama baja y media; mientras que en la gama alta
existen dos direcciones: 0x08 prioridad alta y 0x18
prioridad baja.

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

DEFAULT - GLOBAL

Luis David Narvez

VENTAJAS

INTERRUPCION EXTERNA
RB0/INT
REGISTRO INTCON

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

DESCRIPCIN

Esta fuente de interrupcin es sumamente importante


para atender acontecimientos externos en tiempo real.

Cuando ocurre alguno de ellos activa el pin RB0/INT y


se hace una peticin de interrupcin, en forma
automtica.

Este mtodo es ms eficaz que la tcnica de sondeo ya


que el microcontrolador no perder tiempo preguntando
a la lnea de entrada para leer su estado, sino que
nicamente atender al perifrico cuando ste se lo pida
mediante la solicitud de interrupcin.

RB0/INT - PICC

En el caso de la interrupcin 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 funcin que va a


continuacin sustituye todas las acciones que inserta el
compilador al aceptarse una interrupcin. Slo se ejecuta lo
que vaya en dicha funcin.

RB0/INT - PICC

Si se utilizan las directivas de interrupcin, el


compilador genera el cdigo necesario para saltar a la
funcin que va tras esta directiva en el momento de
la interrupcin.

Adems, genera el cdigo para salvar al principio y


restituir al final el contexto, y tambin borrar la
bandera que se activ con la interrupcin. El
programador, solo debe encargarse de habilitar
las interrupciones.

RB0/INT - PICC

Existe tambin otra funcin adicional destinada a


configurar el flanco activo que genera la interrupcin
externa (en RB0).

ext_int_edge (0, H_TO_L); - equivale a INTEDG=0.


Selecciona el flanco de bajada para activar la bandera
INTF.

ext_int_edge (0, L_TO_H); - equivale a INTEDG=1.


Selecciona el flanco de subida para activar la bandera
INTF.

PRCTICA

Enunciado: Realizar un programa que indique en


tiempo real la recepcin de una seal externa recibida
por el pin INT0, INT1, INT2 del microcontrolador. La
recepcin de dicha seal se lo har a travs de tres
LEDs indicadores, los cuales se apagarn mientras se
presione el pulsador correspondiente.

FLUJOGRAMA

SIMULACIN

INTERRUPCION RBI
INTERRUPCION EXTERNA RBI
REGISTRO INTCON

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

DESCRIPCIN

Los pines <RB7:RB4> del PORTB producen una sola


interrupcin por cambio de su estado.

Para activar la interrupcin por cambio de estado en los


pines <RB7:RB4> los bits RBIE y GIE del registro
INTCON deben estar a 1, en estas condiciones
cuando se produce un cambio de nivel en cualquiera de
las lneas RB7 a RB4 se activa la bandera RBIF del
registro INTCON.

RBI CCS COMPILER

Entonces en la subrutina de interrupcin se deber hacer


el tratamiento respectivo para identificar cual de los
pines se activ.

En Lenguaje C, la interrupcin se activa con


enable_interrupts(INT_RB) y la subrutina de
tratamiento 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 que
sirve para fijar la prioridad de las interrupciones, as, las
interrupciones ms importantes estn son listadas al
principio.

Por ejemplo:

#priority ext, rbi; //la interrupcin RB0/INT ser


atendida antes de RBI.

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

SIMULACIN

TIMERS
RTCC, TIMER 1, TIMER 2, TIMER 3

Luis David Narvez

TIMER 0 - RTCC

Una de las labores ms habituales en los programas


de control de dispositivos suele ser determinar
intervalos concretos de tiempo, y recibe el nombre
de temporizador (timer) el elemento encargado de
realizar esta funcin.

Tambin suele ser frecuente contar los impulsos que


se producen en el exterior del sistema, y el elemento
destinado a este fin se llama contador.
Luis David Narvez

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 reloj
externa.
Seleccin del flanco en el reloj externo.
Predivisor de frecuencia de reloj programable por
software de 8 bits.
Interrupcin opcional en el desbordamiento.

Luis David Narvez

TEMPORIZACIN TIMER 0

El tiempo empleado en una temporizacin se puede


calcular a partir de un ciclo de instruccin (es decir una
instruccin por cada microsegundo, si se trabaja con
un cristal HS de 8 MHz), tambin necesitamos el valor del
Divisor de Frecuencia (el que seleccionamos con los
bits PS2, PS1 y PS0), y finalmente con el complemento
del valor cargado en TMR0 (es decir 65536-TMR0), la
ecuacin que nos permite realizar el clculo es la que
sigue:

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

TEMPORIZACIN TIMER 0

Se desea una temporizacin de 100 ms (100 milisegundos), con un


HS de 8 MHz., y que adems seleccionamos como Divisor de
frecuencia 256 (es decir PS2,PS1,PS0 = 1,1,1). La pregunta, sera
Cul es el valor que se debe cargar en TMR0?

Despejando

65536-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 que


faltan para desbordarse y producir la interrupcin, y
el tiempo que tardar en hacerlo es 100ms
aproximadamente.

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

TIMER 0 PIC C

Los distintos modos se pueden agrupar mediante el


empleo del smbolo |. Por ejemplo:

Setup_timer_0(RTCC_Div_256|RTCC_Ext_L_to_H);

Nota!!! En ocasiones se emplea RTCC en lugar de


timer0, es decir, set_RTCC es lo mismo que
set_timer0.

PRCTICA

Enunciado:

Desarrollar un programa que encienda y


apague secuencialmente un LED cada 300ms.
Para la temporizacin se emplear la
interrupcin del TMR0.

DESARROLLO

Calcular la carga del TMR0 para 10 ms con un


divisor de frecuencia de 256 (Prescaler de 256)

Entonces usaremos un registro auxiliar con un


contenido de 30 para obtener los 300ms.

Carga Registro Auxiliar con 30 para obtener los


300ms de temporizacin.

Bucle infinito en el programa principal.

DESARROLLO

Para la subrutina de interrupcin, tenemos:


Recarga del TMR0 con su valor correspondiente para
obtener una temporizacin 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.

SIMULACIN

SIMULACIN

EL TMR0 COMO CONTADOR DE


EVENTOS EXTERNOS

Prctica:

Enunciado:

Se desea realizar un programa que cuente los pulsos


provenientes por el pin RA4 mediante el TMR0 configurado
como contador, y el TMR1 como base de tiempo de 1s.
(Frecuencmetro)
De esta manera se visualizar la frecuencia en una LCD.

SIMULACIN

S-ar putea să vă placă și