Você está na página 1de 13

TEMPORIZADORES

UNIVERSIDAD CATLICA DE SANTA MARA


FACULTAD DE CIENCIAS E
INGENIERAS FSICAS Y FORMALES
ESCUELA PROFESIONAL DE INGENIERA
MECNICA, MECNICA-ELCTRICA Y MECATRNICA

Alumno:
Christian Alexander Pinto Vizcarra
Docente:
Ing. Sergio Orlando Mestas Ramos
Curso:
Microcontroladores y Microprocesadores

Horario:
Jueves 8:00 a 10:00 a.m.
Tema:
Prctica 04
Arequipa Per

Jefe de Prcticas: Ing. Sergio Mestas 1

TEMPORIZADORES
UNIVERSIDAD CATLICA DE SANTA MARA FACULTAD DE
CIENCIAS FSICAS Y FORMALES PROGRAMA PROFESIONAL DE
INGENIERA
MECNICA, MECNICA ELCTRICA Y MECATRNICA
PRCTICA 4
LOS TEMPORIZADORES PROGRAMABLES DEL PIC16F877

I. OBJETIVO:

Identificar los diferentes temporizadores disponibles en el MCU PIC16F877,


sus modos de operacin, preescaladores (pre-divisores de frecuencia) y
post-escaladores (post-divisores de frecuencia).

Configurar adecuadamente los registros de control asociados al Timer0 para


que funcione en modo temporizador.

Configurar adecuadamente los registros de control asociados al Timer1 para


que funcione en modo contador.

II. INTRODUCCIN:
El microcontrolador PIC16F877 tiene implementado un sofisticado mdulo
de temporizadores. Estos estn disponibles para aquellos usuarios que
manejen aplicaciones que requieran que decisiones de control sean hechas
en tiempo real. Este mdulo est conformado por:
Timer0.
Timer1.
Timer2.
De los tres, el Timer0 es el ms empleado, ya que los dos ltimos suelen
ser usados en forma individual o como perifrico de apoyo para el mdulo
CCP (Capture/Compare/PWM).

III. MATERIAL Y EQUIPO EMPLEADO

Laboratorio equipado con computadoras que tengan instalado el MPLAB


versin v7.40 o superior y el Pickit v2.0.

Cantidad
1
1

Descripcin
Programador compatible con Pickit
2.0
Microcontrolador PIC 16F877

Jefe de Prcticas: Ing. Sergio Mestas 2

TEMPORIZADORES
1

Push-button

Leds

Resistencias de 330

Resistencias de 10 k

Diodo 1N4148

Protoboard

Generador de funciones

Osciloscopio

Fuente de alimentacin de CD

IV. TIMERS EN EL PIC16F877:

Jefe de Prcticas: Ing. Sergio Mestas 3

TEMPORIZADORES

V. DESARROLLO:
I. El Timer0
El Timer0 es un temporizador/contador que consta de un registro de 8 bits
(TMR0) que puede ser escrito o ledo en cualquier instante. Puede ser
programado (con el bit T0CS) para incrementar su conteo ya sea con
impulsos externos en la terminal RA4/T0CKI (modo contador) o por medio de
la seal interna Fosc/4 (modo temporizador). De igual forma, con la ayuda
del bit T0SE es posible configurar el flanco con el que el conteo se
incrementar en el caso que la seal sea externa.
Asimismo, cuando el conteo del TMR0 pasa del valor FFh al 00h, se activa
la bandera T0IF en el registro INTCON. Con ella es posible programar una
interrupcin cada vez que se presente este evento por medio del bit T0IE.
Cabe sealar que cada vez que se ejecuta una instruccin de escritura que
modifica el valor en el registro TMR0, se producir un retardo de dos ciclos
de instruccin durante los cuales se inhibe tanto el predivisor como el TMR0.
Ser necesario tener en cuenta esa inhibicin temporal a la hora de realizar
una precarga (compensar sumando los ciclos de instruccin que se
pierden).

Jefe de Prcticas: Ing. Sergio Mestas 4

TEMPORIZADORES
1. Edite un archivo con el programa fuente que aparece a continuacin.
; Programa que rota cada segundo un led a la derecha en el
; puerto B, usando interrupciones por desborde del Timer0
LIST
P=16F877
RADIX
HEX
INCLUDE
"p16f877a.inc"
cblock
20h
CONT_DES
; Contador de desbordes de TMR0
ST_TEMP
; Copia del registro STATUS
endc
org
0
goto
INICIO
goto
ISR_T0IF
;----- Subrutina que configura al puerto B como salida-----CONF_PUERTOS
bsf
clrf
bcf
movlw
movwf
movf
movwf
return

STATUS,RP0 ; conmuta a banco 1


TRISB
; Puerto B = salida
STATUS,RP0 ; conmuta a banco 0
b'0001000' ;
PORTB
; Puerto B = 0001 0000
STATUS,w
; Guarda el estado del
ST_TEMP
; registro STATUS

;----- Subrutina que configura al Timer0 -------------------CONF_TIMER0


bsf
movlw
movwf
bcf
bsf
return

STATUS,RP0 ; Banco 1
b'11010101' ; Timer0 en modo temporizador
OPTION_REG ; configura preesc. para el timer0
STATUS,RP0 ; Banco 0
INTCON,T0IE ; Activa int. por desbordes en TMR0

; ---- Programa principal ----------------------------------INICIO


call
call
movlw
movwf

CONF_PUERTOS
CONF_TIMER0;
.62
CONT_DES

movlw
movwf
bcf
bsf
goto

0xF7
; Establece valor
TMR0
; inicial para TMR0
INTCON,T0IF ; Borra bandera
INTCON,GIE ; Activa mascara global
$
; Espera interrupcin

;
; CONT_DES <- 62

;----- ISR debido a desborde en TMR0 ------------------------ISR_T0IF


decfsz
goto
movf
movwf
rrf
movf
movwf
movlw

CONT_DES
; Decrementa desbordes
AUN_NO
; Desbordes = 0? No
ST_TEMP,w ; Si
STATUS
; Recupera STATUS
PORTB,f
; Rota Puerto B
STATUS,w
; Guarda STATUS
ST_TEMP
;
.62
; Reinicia contador de desbordes

Jefe de Prcticas: Ing. Sergio Mestas 5

TEMPORIZADORES
movwf
movlw
movwf

CONT_DES
0xF7
TMR0

; CONT_DES <- 62
; Establece valor inicial
; para TMR0

AUN_NO
bcf
retfie
END

INTCON,T0IF ; Apaga bandera

2. Elabore el proyecto correspondiente y proceda a ensamblar el programa en


la forma acostumbrada.

3. Implemente el circuito de la figura 8.1, descargue el programa al PIC y


ejectelo. Verifique el funcionamiento del circuito viendo el comportamiento
de los leds.

Jefe de Prcticas: Ing. Sergio Mestas 6

TEMPORIZADORES
4. Observe que el programa principal est formado por 9 lneas y bsicamente
lo que hace es inicializar la variable CONT_DES, configurar el Timer0,
establecer el valor inicial del registro TMR0 y permanecer en un ciclo ocioso.
Cada vez que se desborde el registro TMR0, el PIC generar una interrupcin
y realizar las tareas programadas en la rutina de servicio, las cuales en
este caso son decrementar el contenido de CONT_DES y cuando sea cero
realizar el desplazamiento a la derecha de un bit en el puerto B.
5. Del archivo fuente anterior, dentro de la subrutina que configura al Timer0,
localice la lnea de cdigo
movlw b'11010101' ; Timer0 en modo temporizador

sustityala ahora por la siguiente:

movlw b'11010000' ; Timer0 en modo temporizador

Almacene el archivo, reensamble el proyecto, descargue el programa al


PIC y ejectelo. Cul es el comportamiento de los leds ahora?
Los leds rotan ms rpido en el segundo caso, dura menos tiempo el
encendido de cada uno de los leds.
Exactamente qu fue lo que hizo la nueva lnea de cdigo?
La nueva lnea de cdigo cambi los datos de los 3 ltimos bits, los
cuales corresponden al prescaler del TIMER0. Se modific el prescaler de
64 (101) a 2 (000).
De qu manera influye en el programa?
Al cambiar el prescaler del valor 64 (101) a 2 (000), se da un menor
tiempo de desbordamiento del TIMER0, lo cual crear interrupciones ms
rpidas.

Esta

interrupciones

rotarn

el

bit

del

puerto

ms

frecuentemente.
Cul es el tiempo que permanecern encendidos los leds con este
cambio?
En el primer caso de 11010101 el encendido de los leds dura 576 s,
mientras que en el segundo caso el encendido de los leds dura 18 s.
Escriba la frmula mediante la cual es posible calcular el tiempo que dura
el retardo.

T =T CM Prescaler (256Carga TMR 0)


T CM =4/ F OSC
T1=

4
64 ( 256247 )=0.000576 s
4000000

T2=

4
2 ( 256247 )=0.000018 s
4000000

Jefe de Prcticas: Ing. Sergio Mestas 7

TEMPORIZADORES

6. Analizando la rutina de servicio de interrupcin del Timer0, puede notarse


que la funcin de la penltima lnea de cdigo es fundamental para el buen
funcionamiento del programa. Explique: Por qu?
Es el comando RETFIE, se trata de un regreso de la instruccin de
interrupcin. Esta instruccin enviar el flujo del programa de regreso al
lugar donde se cometi la ltima interrupcin, la cual caus que el flujo
del programa se dirija al vector de interrupcin (0x04h).
7. Verifique su respuesta eliminando del programa la lnea de cdigo a la que
hace referencia el punto anterior, compile el proyecto, reprograme el PIC y
ejectelo. Qu es lo que sucede ahora?
El programa se reinicia sin fin, debido a que al no poseer RETFIE, al
producirse una interrupcin se regresa a la posicin de interrupcin
0x04h, y no contina la secuencia del programa.

II. El Timer1 en modo contador


El Timer1 es un mdulo temporizador/contador ascendente de 16 bits que
puede ser escrito o ledo en cualquier instante, est implementado en dos
registros especficos TMR1H y TMR1L, que contienen el valor de las cuentas
a cada momento. El valor del registro TMR1H-TMR1L incrementa desde
0000h hasta FFFFh, el cual al reanudar la cuenta activa el sealizador
TMR1IF.
Como fuente de impulsos de reloj existen tres alternativas:
Generacin interna (4*Tosc).
Generacin mediante un oscilador externo controlado por cristal que se
conecta a la pin RB6/T1OSO/T1CKI/PGC y RB7/T1OSI/PGD. El oscilador se
activa poniendo a 1 el bit T1OSCEN del registro T1CON. El bit del TMR1CS
del registro T1CON selecciona entre reloj interno y externo
Trabajar en modo contador de eventos, cuando los impulsos externos a
contar se introducen al pin RB6/T1OSO/T1CKI/PGC. La fuente de los
impulsos de reloj se aplica al divisor de frecuencias (Preescaler) que los
divide por 1, 2, 4 y 8, segn el valor de los bits T1CKPS0 y T1CKPS1 del
registro T1CON.
Tomando en cuenta estas caractersticas se pueden realizar retardos
mayores sin utilizar los desbordes hasta cierto lmite, dependiendo de la
base de tiempo del microcontrolador.
Jefe de Prcticas: Ing. Sergio Mestas 8

TEMPORIZADORES

8. Edite un archivo con el programa fuente que aparece a continuacin.


; Programa que mide la frecuencia de una seal
; introducida por el pin RC0 como base de tiempo de TMR1.
LIST
INCLUDE
cblock
CONT_DES
endc
org
goto
org
goto

P=16F877A
"p16f877A.inc"
20h
0x00
INICIO
0x04
ISR_TMR0

; Tipo de Procesador
; librera del PIC16F877A
; Contador de desbordes

; Servicio de interrupcin

;----- ISR debido a desborde en TMR0 ------------------------;------ cada 50 mS aproximadamente --------------------------ISR_TMR0


btfss
goto

INTCON,T0IF
AUN_NO

UN_SEG
decfsz
goto

CONT_DES,F
; Decrementa desbordes
AUN_NO
; Desbordes = 0? No

Valor_TMR1
bcf
movf
movwf

T1CON,TMR1ON
TMR1H,W
PORTB

; Leer el valor de la parte alta


; de TMR1 y lo despliega en

PORTB
movf
movwf

TMR1L,W
PORTD

; Leer el valor de la parte baja


; de TMR1 y lo despliega en

PORTD
movlw
movwf
movlw
movwf
clrf
clrf
bsf
bcf
retfie

.20
CONT_DES
.61
TMR0

TMR1L
TMR1H
T1CON,TMR1ON
INTCON,T0IF

;
;
;
;
;
;

Reinicia contador de desbordes


CONT_DES <- 20
Establece valor inicial
para TMR0
Borrar los registros
implicados en las mediciones

AUN_NO
movlw
.61
; Establece valor inicial
movwf
TMR0
bcf
INTCON,T0IF
; Apaga bandera
retfie
;----- Subrutina que configura al puerto B y D como salida------

Jefe de Prcticas: Ing. Sergio Mestas 9

TEMPORIZADORES
;----- y al pin T1CKI como entrada para TMR1 -----------------CONF_PUERTOS
bsf
clrf
clrf
bsf

STATUS,RP0
TRISB
TRISD
TRISC,0

bcf

STATUS,RP0

clrf
clrf
return

PORTB
PORTD

;
;
;
;
;
;

conmuta a banco 1
Puerto B como salida
Puerto D como salida
RC0/T1CKI como entrada
Pin T1CKI como entrada
conmuta a banco 0

;----- Subrutina que configura al TMR1 en modo contador ---------;----- eventos externos por T1CKI -------------------------------CONF_TMR1
movlw
movwf
sinc.
clrf
clrf
return

b'00000110'
T1CON

; Configura TMR1 en modo


; contador de eventos no

TMR1L
TMR1H

; Borrar registro de TMR1

;----- Subrutina que configura al Timer0 -------------------CONF_TIMER0


bsf
movlw
movwf
bcf
bcf
bsf
movlw
movwf
movlw
movwf
return

STATUS,RP0
; Banco 1
b'11000111'
; Timer0 en modo temporizador
OPTION_REG
; configura preesc. para el
timer0
STATUS,RP0
; Banco 0
INTCON,T0IF
; Desactiva bandera del TMR0
INTCON,T0IE
; Act. int. por desbordes en
TMR0
.20
CONT_DES
; CONT_DES <- 20
.61
; Establece valor inicial
TMR0
; para TMR0. Temp = 50 mS

; ---- Programa principal ----------------------------------INICIO


call
call
call
bsf
bsf
goto

CONF_PUERTOS
CONF_TMR1
CONF_TIMER0
T1CON,TMR1ON
INTCON,GIE
$

; Enciende TMR1
; Habilita int. de TMR0
; Espera interrupcin

END

9. Elabore el proyecto correspondiente y proceda a ensamblar el programa en


la forma acostumbrada.

Jefe de Prcticas: Ing. Sergio Mestas 10

TEMPORIZADORES

10.Implemente el circuito de la figura 8.2, descargue el programa al PIC y


ejectelo. Verifique el funcionamiento del circuito viendo el comportamiento
de los leds. Conecte una terminal del generador de funciones al pin RC0
utilizando

la

salida

TTL,

como

tambin

un

canal

del

osciloscopio

(debidamente calibrado) y encienda ambos. A continuacin elija la escala


adecuada en el generador, vare la frecuencia hasta que se observe en el
osciloscopio que el periodo de la seal sea de 10ms.

11.Observe que el programa principal est formado por 6 lneas y bsicamente


lo que hace es configurar los puertos, al Timer0 en modo temporizador, al
Jefe de Prcticas: Ing. Sergio Mestas 11

TEMPORIZADORES
Timer1 en modo contador asncrono, encender el Timer1, habilitar la
mscara global de interrupciones y entrar en un ciclo ocioso a espera de la
interrupcin de 50 mS de TMR0.
Durante el transcurso de las interrupciones de TMR0, el temporizador
TMR1 recibe impulsos de reloj provenientes del generador de funciones, lo
cual ocasiona que la cuenta de sus registros (TMR1H y TMR1L) incremente
su valor. Se realiza un tiempo de muestreo con el TMR0 (programa
anterior), las muestras capturadas se guardan en los registros.
Cada vez que se llevan a cabo los 20 desbordes del temporizador TMR0 o
su equivalente a un segundo, el PIC generar una interrupcin y realizar
las tareas programadas en la rutina de servicio, las cual en este caso es
recargar el valor de inicio de TMR0 en caso de no haber transcurrido el
tiempo de un segundo y mostrar el valor de los registros TMR1H:TMRL, por
los puertos B y D respectivamente.
Qu valor muestran los leds conectados a los puertos B y D? Tome en
cuenta que el bit RB7 es el ms significativo y RD0 el menos significativo.
Nota: Los leds miden estos valores por un tiempo muy corto, despus de
apagan y se pierde el valor. No estoy seguro del valor leido

Valor de los puertos: 00000000 01011001

Anote el valor en decimal del dato mostrado en los leds de los puertos B y
D, y el valor de la cartula del generador de funciones.
Valor mostrado en los puertos: 89
Valor mostrado en el generador: 100 Hz
Cmo son entre s?
Jefe de Prcticas: Ing. Sergio Mestas 12

TEMPORIZADORES
El valor medido en los puertos corresponde al valor de la frecuencia muy
aproximadamente.
Existe mucha diferencia entre los valores mostrados en los leds y el
mostrado por el
generador de funciones?_Una diferencia de 11 unidades.
A qu se debe esto?
Debido a que los perodos de las interrupciones del timer0 no son
exactamente 50 ms, adems del tiempo de lectura de las instrucciones.
12.Analizando la rutina de servicio de interrupcin del Timer0, puede notarse
que la funcin de la lnea de cdigo antes de las instrucciones retfie son
fundamentales para el buen funcionamiento del programa. Explique: Por
qu?
Es el comando RETFIE, se trata de un regreso de la instruccin de
interrupcin. Esta instruccin enviar el flujo del programa de regreso al
lugar donde se cometi la ltima interrupcin, la cual caus que el flujo
del programa se dirija al vector de interrupcin (0x04h).
13.Verifique su respuesta eliminando del programa las lneas de cdigo a la que
hace referencia el punto anterior, reensamble el proyecto, reprograme el PIC
y ejectelo. Qu es lo que sucede ahora?
El programa se reinicia sin fin, debido a que al no poseer RETFIE, al
producirse una interrupcin se regresa a la posicin de interrupcin
0x04h, y no contina la secuencia del programa.

Jefe de Prcticas: Ing. Sergio Mestas 13

Você também pode gostar