8 Interrup-Tempocontador
8 Interrup-Tempocontador
8 Interrup-Tempocontador
INTERRUPCIONES
MG. ING. JAVIER CAMILO POMA PALACIOS
PAMPAS -2017
INTERRUPCIONES
Características generales
Las interrupciones son
desviaciones del flujo de
control del programa
originadas asíncronamente por
diversos sucesos que no se
hallan bajo la supervisión de
las instrucciones.
Existen directivas más que pueden ser usadas, tanto para esta familia
como para otras. Para mayor información les sugiero revisar el
datasheet del microcontrolador.
Mg. J. Camilo Poma P.
INTERRUPCIONES
Interrupciones en C
Constantes usadas en ENABLE_ INTERRUPTS()/DISABLE_INTERRUPTS() son:
void main()
{set_tris_B(0x01); // B0 como entrada, B7 como salida
output_low(PIN_B7); // Apaga LED
port_b_pullups(TRUE); // Pull-up para RB0
enable_interrupts(int_ext); // Habilita int. RB0
ext_int_edge(L_TO_H); // por flanco de subida
enable_interrupts(GLOBAL); // Habilita int. general
WHILE (TRUE);} // Bucle infinito de espera
Mg. J. Camilo Poma P.
INTERRUPCIÓN (RB)
#INT_RB (Interrupción por cambio en RB7-RB4)
Los pines <RB7:RB4> del PORTB producen una sola
interrupción por cambio de su estado.
Por ejemplo:
#priority ext, rb; //la interrupción RB0/INT será atendida
antes de RB.
TIMERS/CONTADOR
MG. ING. JAVIER CAMILO POMA PALACIOS
PAMPAS -2017
TEMPORIZADOR/CONTADOR
Características generales
Una de las labores más habituales en los
programas de control de dispositivos es
determinar intervalos concretos de tiempo, el
encargado de realizar esta función, recibe el
nombre de temporizador (timer).
TMRO
Ejemplo 1: Generar una interrupción de 20 ms. Para evitar los rebotes de unas teclas.
Se utiliza un cristal de 4 MHz ¿Cuanto debe cargarse en TMR0 si el predivisor esta en
256? TMR0_1 Mg. J. Camilo Poma P.
TMR0 TEMPORIZADOR/CONTADOR
Como no se obtiene tiempos muy cercanos podemos cambiar por ejemplo
predivisor = 8.
Comprobar el retardo utilizando el osciloscopio del simulador Proteus o similar.
T =(4/fosc)*Divisor de Frecuencia*(65536-TMR0)
WHILE (TRUE);}
Mg. J. Camilo Poma P.
TMR 2 TEMPORIZADOR/CONTADOR
Características generales
El timer 2 es un módulo temporizador que tiene las
siguientes características:
El prescaler puede ser 1, 4 o 16 y tiene como objetivo dividir la frecuencia del oscilador.
El registro PR2 que indica el momento de desborde del timer, es un numero que varia de 0 a
255.
El postscaler indica cuantas veces se debe desbordar el timer para ejecutar la interrupción y
ejecutar el código correspondiente para posteriormente resetear la cuenta, varia entre 1 a 16.
Resumiendo las configuraciones del Timer 2:
1. Se divide la frecuencia mediante el prescaler.
2. Se establece un desborde(overflow) cuando se llena la cuenta del registro PR2.
3. El postscaler nos indica cuantas veces debe suceder el desborde para que se ejecute
la interrupción.
La formula para calcular el valor de uno de los parametros del Timer 2 es:
PR2 = [([Tiempodeseado/(4/fosc)])/(Prescaler*Postscaler)] - 1
Los valores máximos para prescaler es 16, para PR2 es 255 y para postscaler 16.
Por lo tanto el Timer 2 nos queda: setup_timer_2(T2_DIV_BY_16,255,16);
Mg. J. Camilo Poma P.
TMR 2 TEMPORIZADOR/CONTADOR
Ejemplo 2: Realizar un programa para realizar una temporización de
50ms con pre y post divisor de frecuencia de 16, por interrupción del
TMR2 . La temporización debe ser visualizado en un led conectado al
pin RB2.
Solución:
Como 50ms esta cerca de la temporización máxima que es 65.536ms
ocupamos los valores máximos permitidos para prescaler y postscaler.
Así mediante la formula calculamos PR2:
PR2 = [([50ms/(4/4E6)])/16*16)] - 1