Anda di halaman 1dari 10

REGISTRO PARA CONTROLAR LAS INTERRUPCIONES

Los PIC 16F87X tienen muchas causas que pueden originar


una interrupcin, 13 posibles causas los de 28 patas y 14 los
de 40. Al aceptarse una interrupcin se salva el valor del PC en
la Pila y se carga aquel con el valor 0004h, que es el vector de
interrupciones.
El PIC 16F84 tena 4 causas que generaban interrupcin:
desbordamiento del TMR0, activacin de la pata de interrupcin
RB0/INT, cambio de estado de una de las cuatro patas de ms
peso de la Puerta B y finalizacin de la escritura de un byte en la
EEPROM. Los nuevos PIC, adems de las causas que producen
interrupcin en el 16F84, tienen las siguientes:

1 Desbordamiento del Timer
1 2 Desbordamiento del
Timer 2
3 Captura o comparacin del mdulo
CCP1. 4 Captura o comparacin del
mdulo CCP2. 5 Transferencia en la
Puerta serie sncrona. 6 Colisin de bus
en la Puerta serie sncrona. 7 Fin de
transmisin en el USART.
8 Fin de recepcin en el USART.
9 Fin de la conversin en el conversor A/D
10 Transferencia en la puerta paralela esclava (solo en los
de 40
patas)

















1. REGISTRO DE CONTROL DE INTERRUPCIONES (INTCON)

Se trata de un registro leble y escribible, para facilitar su acceso se ha
duplicado en los cuatro bancos. Tiene la misin de controlar las interrupciones
provocadas por TMR0, cambio de estado en las cuatro lneas de ms peso de la
Puerta B y activacin en la patilla RB0/INT. Es muy parecido al registro que con
el mismo nombre exist en el 16F84, solo cambia el bit 6 en los nuevos PIC que
es el PIE (permiso de interrupcin de lo perifricos) en lugar del EEIE que
tena de 16F84 para permitir la interrupcin cuando finalice la escritura de un
byte en la EEPROM. El bit PEIE acta como una segunda llave parcial de
permiso o prohibicin de las causas de interrupcin que no est
complementadas en INTCON y que las provocan los restantes perifricos del
microcontrolador. GIE es el bit de permiso global de todas las interrupciones.



GIE PEIE TOIE INT RBIE TOIF INTF RBIF


GIE: Bit de permiso global de interrupciones.
1 = Permitido
0 = Prohibido

PEIE: Bit de permiso de los perifricos que
no se controlan con INTCON
TOIE: Bit de permiso de interrupcin del TMR0.
INTE: Bit de permiso de la interrupcin externa
por
RB0/INT

RBIE: Bit de permiso de la interrupcin por cambio
en RB4-RB7

TOIFF: Sealizador de desbordamiento en TMR0.
INTF: Sealizador de activacin de la patilla
RB0/INT RBIF: Sealizador de cambio en RB4-RB7


TEMPORIZADOR TIMER 0
El microcontrolador PIC16F887 dispone de tres temporizadores/contadores
independientes, denominados Timer0, Timer1 y Timer2. En este captulo se
presenta una descripcin detallada de los mismos.
El temporizador Timer0 tiene una amplia gama de aplicaciones en la prctica. Slo
unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fcil
de utilizar en programas o subrutinas para generar pulsos de duracin arbitraria,
en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones.
El mdulo del temporizador Timer0 es un temporizador/contador de 8 bits con las
siguientes caractersticas:
Temporizador/contador de 8 bits;
Pre-escalador de 8 bits (lo comparte con el temporizador perro guardin);
Fuente de reloj interna o externa programable;
Generacin de interrupcin por desbordamiento; y
Seleccin del flanco de reloj externo programable.
La siguiente figura muestra el esquema del temporizador Timer0 con todos los bits
que determinan su funcionamiento. Estos bits se almacenan en el registro
OPTION_REG.

Registro OPTION_REG

RBPU - PORTB Pull-up enable bit (resistencia Pull Up del puerto PORTB)
o 0 - Resistencias pull-up del puerto PORTB estn deshabilitadas.
o 1 - Pines del puerto PORTB pueden estar conectados a las resistencias
pull-up.
INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la
interrupcin externa)
o 0 - Interrupcin por flanco ascendente en el pin INT (0-1).
o 1 - Interrupcin por flanco descendente en el pin INT (1-0).
T0CS - TMR0 Clock Select bit (bit selector de tipo de reloj para el Timer0)
o 0 - Los pulsos se llevan a la entrada del temporizador/contador Timer0
por el pin RA4.
o 1 - El temporizador utiliza los pulsos de reloj internos (Fosc/4).
T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco)
o 0 - Incrementa en flanco descendente en el pin TMR0.
o 1 - Incrementa en flanco ascendente en el pin TMR0.
PSA - Prescaler Assignment bit (bit de asignacin del pre-escalador)
o 0 - Pre-escalador se le asigna al WDT.
o 1 - Pre-escalador se le asigna al temporizador/contador Timer0.
PS2, PS1, PS0 - Prescaler Rate Select bit (bit selector del valor del divisor
de frecuencias)
o El valor del divisor de frecuencias se ajusta al combinar estos bits. Como
se muestra en la tabla a la derecha, la misma combinacin de bits
proporciona los diferentes valores del divisor de frecuencias para el
temporizador/contador Timer0 y el temporizador perro guardin,
respectivamente.










PS2 PS1 PS0 TMR0 WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
Cuando el bit PSA est a 0, el pre-escalador se le asigna al temporizador/contador
Timer0, como se muestra en la siguiente figura:

Cuando el bit PSA est a 1, el pre-escalador se le asigna al temporizador perro
guardin como se muestra en la siguiente figura:



Aparte de lo dicho anteriormente, cabe destacar lo siguiente:
Al asignarle el pre-escalador al temporizador/contador, el pre-escalador se
pondr a 0 con cualquier escritura en el registro TMR0.
Al asignar el pre-escalador al temporizador perro guardin, tanto el WDT
como el pre- escalador se pondrn a 0 con la instruccin CLRWDT.
Al escribir en el registro TMR0, utilizado como un temporizador, no se inicia
el conteo de los pulsos inmediatamente, sino con retraso de dos ciclos de
instrucciones. Por consiguiente, es necesario ajustar el valor escrito en el
registro TMR0.
Al poner el microcontrolador en el modo de reposo se apaga el oscilador de
reloj. No puede ocurrir el desbordamiento ya que no hay pulsos a contar. Es
la razn por la que la interrupcin por el desbordamiento del TMR0 no
puededespertar al procesador del modo de reposo..
Si se utiliza como un contador de reloj externo sin pre-escalador, la longitud
de pulso mnima o tiempo muerto entre dos pulsos deber ser 2 Tosc + 20
nS (Tosc es el perodo de seal de reloj del oscilador).
Si se utiliza como un contador de reloj externo con pre-escalador, la
longitud de pulso mnima o tiempo muerto entre dos pulsos es slo 10nS.
El registro del pre-escalador de 8 bits no est disponible al usuario, lo que
significa que no es posible leerlo o escribir en l directamente.
Al cambiar de asignacin del pre-escalador del Timer0 al temporizador
perro guardin, es necesario ejecutar la siguiente secuencia de
instrucciones escritas en ensamblador para impedir reiniciar el
microcontrolador:






En breve
Para utilizar el Timer0 apropiadamente, es necesario:
Paso 1: Seleccionar el modo:
El modo de temporizador se selecciona por el bit TOSC del registro
OPTION_REG (TOSC: 0=temporizador, 1=contador).
Cuando se asigna el pre-escalador al temporizador/contador se debe poner
a cero el bit PSA del registro OPTION_REG. El valor del divisor de
frecuencias se configura al
utilizar los bits PS2-PS0 del mismo registro.
Al utilizar una interrupcin, los bits GIE y TMR0IE del registro INTCON
deben estar a uno.
Paso 2: Medir y contar
Para medir tiempo:
Reiniciar el registro TMR0 o escribir un valor conocido en l.
El tiempo transcurrido(en microsegundos al utilizar el oscilador de 4MHz) se
mide al leer el registro TMR0.
El bit de bandera TMR0IF del registro INTCON se pone a uno
automticamente siempre que ocurra el desbordamiento del registro TMR0.
Si est habilitada, ocurre una interrupcin.
Para contar pulsos:
La polaridad de pulsos a contar en el pin RA4 se selecciona por el bit TOSE
del registro OPTION_REG (T0SE: 0=pulsos positivos, 1=pulsos negativos).
Varios pulsos se pueden leer del registro TMR0. El pre-escalador y la
interrupcin se utilizan de la misma forma que en el modo de temporizador.















Registro OPTION_REG

Leyenda: R/W - Bit de lectura/escritura, (1) Despus del reinicio, el bit se
pone a uno
El registro OPTION_REG contiene varios bits de control para configurar el pre -
escalador del Timer0/WDT, el temporizador Timer0, la interrupcin externa y las
resistencias pull-up en el puerto PORTB.

RBPU - Port B Pull up Enable bit (resistencia Pull Up Puerto B)
o 1 - Desactivadas
o 0 - Activadas

INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la
interrupcin externa)
o 1 - Interrupcin por flanco ascendente en el RB0/INT
o 0 - Interrupcin por flanco descendente en el RB0/INT

T0CS - TMR0 Clock Source Select bit (bit selector de tipo de reloj para el
Timer0)
o 1 - Pulsos introducidos a travs del TOCKI (contador)
o 0 - Pulsos de reloj internos Fosc/4 (temporizador)

T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco en
TOCKI) selecciona el flanco (ascendente o descendente) contado por el
temporizador Timer0 por el pin RA4/T0CKI.
o 1 - Incrementa en flanco descendente en el pin TOCKI.
o 0 - Incrementa en flanco ascendente en el pin TOCKI.

PSA - Prescaler Assignment bit asigna el pre-escalador (hay slo uno) al
temporizador o al WDT.
o 1 - Pre - escalador se le asigna al WDT
o 0 - Pre - escalador se le asigna al temporizador Timer0.
PS2, PS1, PS0 Prescaler Rate Select bits (bit selector del valor del divisor de
frecuencia)
El valor del divisor de frecuencia se selecciona al combinar estos tres bits. Como
se muestra en la siguiente tabla, el valor del divisor de frecuencia se le asigna al
temporizador Timer0 o al temporizador perro guardin (WDT).



PS2 PS1 PS0 TMR0 WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
Para conseguir el valor del divisor de frecuencia 1:1 cuando el temporizador
Timer0 cuenta pulsos, el pre-escalador debe ser asignado al WDT. En
consecuencia, el temporizador Timer0 no utiliza el pre-escalador, sino que cuenta
directamente los pulsos generados por el oscilador, lo que era el objetivo.

Anda mungkin juga menyukai