Está en la página 1de 22

Automatización industrial:

Sistemas de control basados en


microcontroladores.

Profesor: Dr. René J. Díaz Martínez


E-mail: renejdm@tec.mx
Conferencia 3: Temporizador TMR0 de la familia 16FXXX.
Sumario:
- Características generales del temporizador TMR0 de la familia 16FXXX.
- Arquitectura del Preescalador y del Timer0/WDT. Registros asociados.
- Programación general del temporizador.
- Empleo del temporizador como contador y como temporizador.
- Ejemplos resueltos y ejercicios propuestos.
Bibliografía:
1. Angulo, J. M. y otros. Microcontroladores PIC. Diseño práctico de aplicaciones. 2ª
parte. 2da edición. McGraw-Hill, 2006.
2. Manual del PIC 16F887.
3. García Breijo, Eduardo. Compilador C CSS y simulador Proteus para
Microcontroladores PIC. MARCOMBO S.A. Barcelona, España. 2008.
4. Reinoso, Sixto y otros. Programación de microcontroladores PIC con lenguaje C
(2 tomos). Primera edición electrónica. Octubre de 2018. ISBN: 978-9942-765-
36-9
- Características generales del temporizador TMR0 de la
familia 16FXXX.
Entre los recursos más importantes de cualquier
microcontrolador se encuentran los de temporización y
conteo. En el caso del temporizador TMR0 del PIC 16FXXX se
pueden plantear las siguientes características:
1. Posee un registro de conteo de 8 bits denominado TMR0,
ubicado en las direcciones 01h y 101h de los bancos 0 y 2
del PIC, respectivamente. Además tiene los
temporizadores 1 y 2, los cuales serán estudiados más
adelante.
2. El conteo de TMR0 es ascendente, y puede lograrse
su incremento mediante una señal externa aplicada
al terminal RA4/T0CKI o a través de una señal
interna proveniente del reloj de instrucciones del
PIC.
3. Al pasar del valor FFh a 00h se activa una
interrupción indicada por la puesta en “1” de la
bandera T0IF. La IT es atendida a través de un salto
a la dirección 04h, que es compartida con las otras
fuentes de IT del PIC.
4.Dispone de un pre-escalador o divisor de
frecuencia de 3 bits ubicado en el registro
OPTION, con el que se puede afectar el tiempo
de incremento del temporizador de forma
discreta; se puede apreciar que el pre-
escalador es compartido con el perro guardián
(WDT). La escritura en TMR0 limpia el pre-
escalador.
5.No se requiere control del disparo.
- Arquitectura del Preescalador y del Timer0/WDT. Registros asociados.

Asignado al WDT
con MCLEAR

(flanco de (fuente de
conteo) conteo) (asignación del
(localización 2007) (asignación del preescalador) Nota: Si el
preescalador) preescalador
es asignado al
(registro WDTCON) WDT, pero el
(selecciona valor switch WDTEN
del preescalador) está en OFF, el
TMR0 puede
contar hasta
(asignación del 256 si los bits
(registro WDTCON) preescalador) PS0-2 tienen la
combinación
000.
Arquitectura del WDT.

Reset interno TO*= 0


Registro OPTION
7 6 5 4 3 2 1 0
RBPU* INTEDG T0CS TOSE PSA PS2 PS1 PS0

6. Con el registro OPTION (81h, 181h) se pueden seleccionar


además: la fuente y el flanco de la señal TMR0 (bits T0CS y Valor TMR0 WDT
T0SE). 000 1:2 1:1
a) T0CS= 0, ciclo de instrucciones interno (temporizador).
001 1:4 1:2
T0CS= 1, transición en el pin RA4/T0CKI (contador).
b) T0SE= 0, incremento con flanco de subida. 010 1:8 1:4
T0SE= 1, incremento con flanco de caída. 011 1:16 1:8
c) El bit PSA de OPTION indica a quién fue asignado el pre- 100 1:32 1:16
escalador, esto es:
101 1:64 1:32
PSA= 0, asignado al TMR0.
PSA= 1, asignado al WDT. 110 1:128 1:64

d) Con MCLR el registro OPTION se pone en FFh. 111 1:256 1:128


e) PS0-2: Valor asignado al pre-escalador.
Registro INTCON
7 6 5 4 3 2 1 0
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

7. El registro INTCON (0Bh, 8Bh, 10Bh y 18Bh) está ligado con el TMR0
a través de los siguientes bits:
• T0IF= 1 cuando el temporizador pasa de 0FFh a 00h. Debe ser puesta a
“0” por programa para que se puedan volver a solicitar.
• T0IE= 1 habilita la fuente de IT asociada al desbordamiento del
temporizador.
• GIE= 1 es la habilitación general de las interrupciones.
Registro WDTCON
7 6 5 4 3 2 1 0
WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN

8. El registro WDTCON (105h, WDTPS03-0 Razón Pre-Esc WDTPS3-0 Razón Pre-Esc


banco 2) permite escoger, a 0000 1:32 1000 1:8192
través de los bits WDTPS0-3,
0001 1:64 1001 1:16384
un valor binario asociado a la
razón de variación del Watch 0010 1:128 1010 1:32768
Dog Timer (WDT), por cada 0011 1:256 1011 1:65536
pulso de reloj que recibe. El 0100 1:512* 1100 Reservado
WDT tiene un oscilador 0101 1:1024 1101 Reservado
interno RC de 31 kHz.
0110 1:2048 1110 Reservado
9. Tras un RESET WDTCON queda
con el valor ---0 0100 0111 1:4096 1111 Reservado
equivalente aproximadamente
* Valor que toma tras un RESET
a 17 ms.
Registro Palabra de Configuración (localización 2007h).
- Programación general del temporizador.
La programación del temporizador dependerá de la función que se
quiere que realice, esto es, como contador o como temporizador. Se
pueden seguir los siguientes pasos:
1. Determinar la constante de tiempo o el valor de conteo que se le
quiere cargar al registroTMR0.
2. Programar los bits correspondientes al temporizador del registro
OPTION.
3. Habilitar el bit de solicitud de IT por desbordamiento del
temporizador (T0IE) y el bit de habilitación general de las ITs (GIE).
4. Si en lugar de la IT el timer se atiende por encuesta entonces se
debe vigilar la bandera T0IF.
- Empleo del temporizador como contador y como
temporizador
Las dos formas básicas de operación del temporizador TMR0 son:
1. Contador: para ello se dispone del registro TMR0 (8 bits), el
cual guardará la base de conteo que se necesita. Por ejemplo
en caso de querer contar 50 eventos, a 256 se le restará dicho
valor y el resultado es lo que se carga en TMR0. Para valores
mayores a 256 es necesario disponer de un contador externo,
combinado con el valor cargado en TMR0. La acción de conteo
se completa mediante la activación del pin RA4/T0CKI.
2. Temporizador: para ello se dispone del registro
TMR0 (8 bits), y del pre-escalador. Combinando
ambos se puede llegar a demorar 256 μs cada
estado contado por el registro TMR0, lo que da una
demora máxima de 65536 μs. Se deduce que para
demoras inferiores a 256 μs no es necesario el pre-
escalador, y para demoras mayores a 65536 μs,
habrá que emplear un registro externo.
- Ejemplos resueltos y ejercicios
propuestos.
Ejemplo resuelto 1: cada 200 eventos contados por el TMR0 del PIC
16F887 encender un LED. Atender al timer por IT.
Elementos a considerar:
- RA4/T0CKI
- Cargar base de conteo en TRMR0: 56 decimal
- Cargar 0B8h en OPTION
- Cargar 0A0h en INTCON
- Conectar LED en RA0
- Diseñar subrutina de atención a la IT del temporizador
- Trabajar PA como E/S digitales
- Inicializar los registros
- Esperar por el fin de IT del temporizador como contador
- GOTO $
- END
; Programa Principal
Inicio BANKSEL ANSEL ;se ubica en banco 1 de RAM
MOVLW 0x06h ;configura todos los pines como entradas digitales
MOVWF ANSEL ;y carga el valor en el registro ADCON1
BANKSEL TRISB ;se ubica en banco 1 de RAM
CLRF TRISA ;programa los pines del puerto A como salidas
BSF TRISA,4
MOVLW 0B8h ;RBPU*=1, INTEDG=0, TOCS=1, TOSE=0, PSA=1 Y PS0-2=000
MOVWF OPTION
BANKSEL PORTA ;se ubica en el banco 0 de RAM
MOWLW D‘56‘
MOWF TMR0
MOVLW 0A0h ;habilita IT en INTCON
MOVWF INTCON ;habilita INT por T0IE y la habilitación de IT general (GIE)
GOTO $
END
org 4 ;vector de RESET en la dirección 00h
BCF PORTA,0 ;PRENDE LED
BCF INTCON,2 ;limpia bandera de INT
RETFIE ;retorno al Programa Principal
Ejemplo resuelto 2: idem a 1 pero apagar el LED al
activar un interruptor atendido por IT.
Cambios necesarios:
- Atender a la IT del interruptor de apagado del LED
- Resolver la prioridad y dar al temporizador la
mayor atención
- Conectar ese interruptor al pin RB0
- Realizar modificaciones en el registro INTCON
; Programa Principal
Inicio BANKSEL ANSEL ;se ubica en banco 3 de RAM
MOVLW 0x06h ;configura todos los pines como entradas digitales
MOVWF ANSEL ;y carga el valor en el registro ANSEL
BANKSEL TRISA ;se ubica en banco 3 de RAM
CLRF TRISA ;programa los pines del puerto A como salidas
BSF TRISA,4
BSF TRISB,0
MOVLW 0A8h ;RBPU*=1, INTEDG=0, TOCS=1, TOSE=0, PSA=1 Y PS0-2=000
MOVWF OPTION
BANKSEL PORTA ;se ubica en el banco 0 de RAM
MOWLW D‘56‘
MOWF TMR0
MOVLW 0B0h ;habilita IT en INTCON
MOVWF INTCON ;habilita INT por T0IE y la habilitación de IT general (GIE)
GOTO $
END
org 4 ;vector de RESET en la dirección 00h
BTFSS INTCON,2
GOTO E1 ;apagar el LED
BCF PORTA,0 ;PRENDE LED
BCF INTCON,2 ;limpia bandera de interrupción del Timer

GOTO E2
E1 BSF PORTA,0
BCF INTCON,1 ; limpia bandera de interrupción de RB0
E2 RETFIE ;retorno al Programa Principal
Ejercicios propuestos:
1. Se quiere implementar un sistema con PIC 16F887 que permita adquirir 30
muestras, de 8 variables digitales de entrada las cuales cambian constantemente. Las
muestras serán tomadas cada 50 ms. Si la muestra es igual a 5Ch se prende un LED
rojo. Los 50 ms se deben lograr con el timer 0, el cual se atiende por IT. Cuando se
hayan tomado todas las muestras se indicará mediante el encendido de un LED
verde. Los dos LEDs se apagan al activar un interruptor atendido por interrupción.
a) Diseñe el hardware (incluidos cálculos de las componentes discretas).
Datos del PIC: VOH= 4.5 V, VOL=0.2 V, IOH= IOL= 25 mA y VDD= 5 V.
Datos de los LEDs: 1.8 V/10 mA
b) Elabore el programa que permita atender el hardware diseñado.
2. Empleando el TMR0 del PIC 16F887, diseñe un generador de reloj que permita
hacer parpadear un LED conectado al PIC, a una frecuencia de 0.5 Hz.
3. Utilice el TMR0 del PIC 16F887 para activar una bocina a una frecuencia de 2 kHz,
la cual se puede apagar al activar un interruptor atendido por IT.
2. Empleando el TMR0 del PIC 16F887, diseñe un generador de
reloj que permita hacer parpadear un LED conectado al PIC,
a una frecuencia de 0.5 Hz.
3. Utilice el TMR0 del PIC 16F887 para activar una bocina a una
frecuencia de 2 kHz, la cual se puede apagar al activar un
interruptor atendido por IT.

También podría gustarte