Sie sind auf Seite 1von 13

InterrupcionesInterrupciones -- Timer0Timer0

PIC16F877PIC16F877

EC3188EC3188

Prof.Prof. CeciliaCecilia MurrugarraMurrugarra Q.Q. SepSep--DicDic 20112011

InterrupcionesInterrupciones

DefiniciDefinicióónn:: Es el rompimiento de la secuencia de un programa para ejecutar una función especial, llamada rutina de servicio de interrupción, una vez finalizada esta rutina el programa retorna al punto donde se interrumpió el programa principal.

TiposTipos dede InterrupciInterrupcióónn::

PorPor Hardware:Hardware: Son asíncronas a la ejecución del procesador, se producen en cualquier momento, independientemente de lo que esté haciendo el CPU. Son señales externas al procesador y suelen estar asociadas a dispositivos de E/S

PorPor Software:Software: Son generadas por el programa en ejecución. Para generarla existen distintas instrucciones en el código que permiten al programador producirla.

InterrupcionesInterrupciones

Interrupciones Interrupciones
Interrupciones Interrupciones

InterrupcionesInterrupciones

QueQue

ocurreocurre

InterrupciInterrupcióónn::

cuandocuando

sese

activaactiva

unauna

1. El CPU suspende lo que estaba realizando. El HW transfiere el control al sistema operativo.

una

interrupción no se puede atender otra que llegue. 3. Algunas arquitecturas con manejo de interrupciones permiten, mediante un esquema de prioridades, interrumpir un servicio de interrupción 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 ejecución a una dirección fija. Esta dirección por lo general contiene la dirección de comienzo de la rutina de servicio de la interrupción.

2. Deshabilita

las

interrupciones.

Mientras

se

atiende

InterrupcionesInterrupciones

6. Cada computador tiene su propio mecanismo de interrupciones. Una forma de manejar las interrupciones es invocando una rutina general que examine la información de la interrupción y determine el tipo de interrupción ocurrida, y de allí llama a la rutina que se encarga de atender dicha interrupción. Por lo general se maneja mediante un vector de interrupciones, indexado por el tipo de interrupción. En este vector se encuentra la dirección de comienzo de la rutina que da servicio . Se le conoce como vector de interrupción. 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 interrupción

8. Se restaura el estado anterior

9. Se habilitan las interrupciones.

también almacenar la

interrupciones debe

10.La

arquitectura de

dirección de la instrucción interrumpida.

InterrupcionesInterrupciones Timer0Timer0

ElEl mmóódulodulo Timer0Timer0 caractercaracteríísticas:sticas:

tienetiene laslas siguientessiguientes

1. Temporizador/contador de 8-Bits

2. Capacidad de lectura/escritura.

3. Prescaler

(circuito

divisor

de

software) de 8-Bits

frecuencias

programable

por

4. Se puede seleccionar reloj interno o externo

5. Interrupción opcional por desbordamiento de FFh a 00h.

6. Selección de flanco ascendente o descendente para el flaco del reloj externo.

7. Vector de Interrupción (04h) retfie (para retornar de la rutina de Interrupción)

InterrupcionesInterrupciones Timer0Timer0

DiagramaDiagrama dede bloquesbloques deldel Timer0Timer0 concon elel PrePre--escaldorescaldor

Programmable Prescaler PosiblesPosibles deFuentes Fuentes de externoReloj Reloj externo
Programmable
Prescaler
PosiblesPosibles
deFuentes
Fuentes de
externoReloj
Reloj externo

OPTION_REG (81h)

escaldor Programmable Prescaler PosiblesPosibles deFuentes Fuentes de externoReloj Reloj externo OPTION_REG (81h)

InterrupcionesInterrupciones Timer0Timer0

RegistrosRegistros utilizadosutilizados parapara configuraciconfiguracióónn yy estatusestatus deldel Timer0Timer0

utilizados utilizados para para configuraci configuraci ó ó n n y y estatus estatus del del

InterrupcionesInterrupciones Timer0Timer0

Interrupciones Interrupciones – – Timer0 Timer0

deFuentes

Fuentes de

PosiblesPosibles

InterrupcionesInterrupciones Timer0Timer0

externoReloj Reloj externo
externoReloj
Reloj externo

InterrupcionesInterrupciones Timer0Timer0

ConfiguraciConfiguracióónn enen modomodo temporizadortemporizador

1. TOCS en “0” - > OPTION_REG(bit5).

2. Si se va a utilizar el Prescaler:

a. PSA en “0”

b. PS2,PS1,PS0 ->

->

OPTION_REG(bit3).

OPTION_REG(bit2, bit1, bit0). Entre (0 0 0) y

(1 1 1) divisor de frecuencias programable entre (2 y 256)

3. La temporización se observa en el registro TMR0 (01h ó 101h). Cada vez que pasa de FFh a 00h, ocurre una interrupción por software del Timer0. El tiempo que tarde en desbordarse dependerá los valores cargados inicialmente en TMR0 y de la configuración del pre-escalador.

4. Cada vez que se escribe TMR0, el incremento se inhibe durante los siguientes dos ciclos de instrucción. EL usuario puede trabajar teniendo en cuenta esto y ajustando el valor a cargar en el TMR0.

5. Cada vez que ocurre un desbordamiento de TMR0, el bit TOIF se pone en “1” TOIF -> INTCON(bit2) (0Bh).

6. La Interrupción puede enmascararse poniendo a “0” el bit TOIE ->

INTCON(bit5).

7. EL bit T0IF debe ponerse a “0” por software al finalizar la rutina de atención a la interrupción del desbordamiento de TMRO.

InterrupcionesInterrupciones Timer0Timer0

Ejemplo para la configuración del Timer0 como temporizador.

1.1. SupongamosSupongamos queque tenemostenemos unun CristalCristal dede 4Mhz4Mhz ((comocomo relojreloj externoexterno),), porpor lolo tantotanto ClkOutClkOut == Fosc/4=Fosc/4= 1Mhz.1Mhz.

2.2. 11 ciclociclo dede mmááquinaquina sonson 44 ciclosciclos dede relojreloj,, porpor lolo tantotanto sisi tenemostenemos unun PICPIC concon unun cristalcristal dede 4Mhz,4Mhz, lala velocidadvelocidad dede ejecuciejecucióónn dede unauna instrucciinstruccióónn serseráá dede 1Mhz.1Mhz.

preescalerpreescaler,, sese obtendrobtendrííanan laslas siguientessiguientes

3.3.

SiSi

sese

empleaemplea

elel

frecuenciasfrecuencias::

 

ps2

ps1

ps0

Div.

Frec. (Hz)

0

0

0

2

500.000

0

0

1

4

250.000

0

1

0

8

125.000

0

1

1

16

62.500

1

0

0

32

31.250

1

0

1

64

15.625

1

1

0

128

7.813

1

1

1

256

3.906

InterrupcionesInterrupciones Timer0Timer0

ProgramemosProgramemos unauna temporizacitemporizacióónn dede 1seg:1seg:

TOCSTOCS == 00”’”’;; PSA=PSA= 00;; (PS2,PS1,PS0)=(PS2,PS1,PS0)= (1,0,0,),(1,0,0,), div=32.div=32. LaLa FrecuenciaFrecuencia dede TMR0TMR0 serseráá de:de:

FoscFosc == 1Mhz1Mhz // 3232 == 31.25031.250 HzHz

5.5. EscribimosEscribimos enen TMR0TMR0 elel valorvalor 66 dede modomodo queque elel regisregistrotro TMR0TMR0 alcaalcanzanza elel cerocero despudespuééss dede 250250 cuentascuentas (256(256 -- 66 == 250)250) obteniendoobteniendo asasíí unauna frecuenciafrecuencia dede pasopaso porpor cerocero deldel TMR0TMR0 igualigual a:a:

31.25031.250 // 250250 == 125125 HzHz

6.6. ElEl siguientesiguiente pasopaso serseráá cargarcargar enen unun registroregistro dede 88 bitsbits elel valorvalor 125125 dede tatall modomodo que,que, decrementandodecrementando esteeste registroregistro enen 11 porpor cadacada pasopaso porpor cerocero dede TMR0,TMR0, sese obtengaobtenga unauna frecuenciafrecuencia dede pasospasos porpor cerocero ddelel registroregistro iigualgual a:a:

125/125125/125 == 1Hz1Hz (1(1 segundo).segundo).

7.7. EnEn resumen:resumen: aunqueaunque parezcaparezca complicadocomplicado sese tratatrata dede ccontrolarontrolar sisi TTMR0MR0 haha alcanzadoalcanzado elel cero,cero, luegoluego dede reiniciarloreiniciarlo aa 66 yy sese decrementadecrementa elel valorvalor contenidocontenido enen unun registroregistro concon valorvalor 125.125. CuandoCuando elel rregistroegistro alcanalcancece tambitambiéénn elel valorvalor cero,cero, entoncesentonces habrhabráá trascurridotrascurrido unun segundosegundo aprapróóxx