Você está na página 1de 13

Interrupciones - Timer0 PIC16F877

EC3188 Prof. Cecilia Murrugarra Q. Sep-Dic. 2011

Interrupciones
Definicin: Es el rompimiento de la secuencia de un programa
para ejecutar una funcin especial, llamada rutina de servicio de interrupcin, una vez finalizada esta rutina el programa retorna al punto donde se interrumpi el programa principal.

Tipos de Interrupcin:
Por Hardware: Son asncronas a la ejecucin del procesador, se
producen en cualquier momento, independientemente de lo que est haciendo el CPU. Son seales externas al procesador y suelen estar asociadas a dispositivos de E/S

Por Software: Son generadas por el programa en ejecucin. Para generarla existen distintas instrucciones en el cdigo que permiten al programador producirla.

Interrupciones

Interrupciones
Que ocurre Interrupcin: cuando se activa una
1. El CPU suspende lo que estaba realizando. El HW transfiere el control al sistema operativo. 2. Deshabilita las interrupciones. Mientras se atiende una interrupcin no se puede atender otra que llegue. 3. Algunas arquitecturas con manejo de interrupciones permiten, mediante un esquema de prioridades, interrumpir un servicio de interrupcin para atender otra de mayor prioridad. Aquellas interrupciones de menor o igual prioridad son deshabilitadas. 4. El kernel del sistema operativo salva el estado actual del proceso interrumpido, en el caso del PIC el programador debe hacerlo. 5. Transfiere su ejecucin a una direccin fija. Esta direccin por lo general contiene la direccin de comienzo de la rutina de servicio de la interrupcin.

Interrupciones
.
6. Cada computador tiene su propio mecanismo de interrupciones. Una forma de manejar las interrupciones es invocando una rutina general que examine la informacin de la interrupcin y determine el tipo de interrupcin ocurrida, y de all llama a la rutina que se encarga de atender dicha interrupcin. Por lo general se maneja mediante un vector de interrupciones, indexado por el tipo de interrupcin. En este vector se encuentra la direccin de comienzo de la rutina que da servicio . Se le conoce como vector de interrupcin. Otra forma de localizar la rutina apropiada es mediante el pooling, es decir, preguntando a cada dispositivo pare ver quien requiri el servicio. 7. Se ejecuta la rutina de interrupcin 8. Se restaura el estado anterior 9. Se habilitan las interrupciones. 10.La arquitectura de interrupciones debe tambin almacenar la direccin de la instruccin interrumpida.

Interrupciones Timer0
El mdulo Timer0 tiene las siguientes caractersticas:
1. 2. 3. 4. 5. 6. 7. Temporizador/contador de 8-Bits Capacidad de lectura/escritura. Prescaler (circuito divisor de frecuencias programable por software) de 8-Bits Se puede seleccionar reloj interno o externo Interrupcin opcional por desbordamiento de FFh a 00h. Seleccin de flanco ascendente o descendente para el flaco del reloj externo. Vector de Interrupcin (04h) retfie (para retornar de la rutina de Interrupcin)

Interrupciones Timer0
Diagrama de bloques del Timer0 con el Pre-escaldor.
Posibles Fuentes de Reloj externo

Programmable Prescaler OPTION_REG (81h)

Interrupciones Timer0
Registros utilizados para configuracin y estatus del Timer0

Interrupciones Timer0

Posibles Fuentes de Reloj externo

Interrupciones Timer0

Interrupciones Timer0
Configuracin en modo temporizador.
1. 2. TOCS en 0 - > OPTION_REG(bit5). Si se va a utilizar el Prescaler: a. PSA en 0 -> OPTION_REG(bit3). b. PS2,PS1,PS0 -> OPTION_REG(bit2, bit1, bit0). Entre (0 0 0) y (1 1 1) divisor de frecuencias programable entre (2 y 256) La temporizacin se observa en el registro TMR0 (01h 101h). Cada vez que pasa de FFh a 00h, ocurre una interrupcin por software del Timer0. El tiempo que tarde en desbordarse depender los valores cargados inicialmente en TMR0 y de la configuracin del pre-escalador. Cada vez que se escribe TMR0, el incremento se inhibe durante los siguientes dos ciclos de instruccin. EL usuario puede trabajar teniendo en cuenta esto y ajustando el valor a cargar en el TMR0. Cada vez que ocurre un desbordamiento de TMR0, el bit TOIF se pone en 1 TOIF -> INTCON(bit2) (0Bh). La Interrupcin puede enmascararse poniendo a 0 el bit TOIE -> INTCON(bit5). EL bit T0IF debe ponerse a 0 por software al finalizar la rutina de atencin a la interrupcin del desbordamiento de TMRO.

3.

4. 5. 6. 7.

Interrupciones Timer0
Ejemplo para la configuracin del Timer0 como temporizador.
1. 2. Supongamos que tenemos un Cristal de 4Mhz (como reloj externo), por lo tanto ClkOut = Fosc/4= 1Mhz. 1 ciclo de mquina son 4 ciclos de reloj, por lo tanto si tenemos un PIC con un cristal de 4Mhz, la velocidad de ejecucin de una instruccin ser de 1Mhz. Si se emplea el preescaler, se obtendran las siguientes frecuencias:

3.

ps2 ps1 ps0 Div. Frec. (Hz)


0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 2 4 8 16 32 64 128 256 500.000 250.000 125.000 62.500 31.250 15.625 7.813 3.906

Interrupciones Timer0
Programemos una temporizacin de 1seg:
TOCS = 0; PSA= 0; (PS2,PS1,PS0)= (1,0,0,), div=32. La Frecuencia de TMR0 ser de: Fosc = 1Mhz / 32 = 31.250 Hz Escribimos en TMR0 el valor 6 de modo que el registro TMR0 alcanza el cero despus de 250 cuentas (256 - 6 = 250) obteniendo as una frecuencia de paso por cero del TMR0 igual a: 31.250 / 250 = 125 Hz El siguiente paso ser cargar en un registro de 8 bits el valor 125 de tal modo que, decrementando este registro en 1 por cada paso por cero de TMR0, se obtenga una frecuencia de pasos por cero del registro igual a: 125/125 = 1Hz (1 segundo). En resumen: aunque parezca complicado se trata de controlar si TMR0 ha alcanzado el cero, luego de reiniciarlo a 6 y se decrementa el valor contenido en un registro con valor 125. Cuando el registro alcance tambin el valor cero, entonces habr trascurrido un segundo aprx.

5.

6.

7.

Você também pode gostar