Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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:
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).
Cantidad
1
1
Descripcin
Programador compatible con Pickit
2.0
Microcontrolador PIC 16F877
TEMPORIZADORES
1
Push-button
Leds
Resistencias de 330
Resistencias de 10 k
Diodo 1N4148
Protoboard
Generador de funciones
Osciloscopio
Fuente de alimentacin de CD
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).
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 ; 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
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
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
TEMPORIZADORES
movwf
movlw
movwf
CONT_DES
0xF7
TMR0
; CONT_DES <- 62
; Establece valor inicial
; para TMR0
AUN_NO
bcf
retfie
END
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
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.
4
64 ( 256247 )=0.000576 s
4000000
T2=
4
2 ( 256247 )=0.000018 s
4000000
TEMPORIZADORES
TEMPORIZADORES
P=16F877A
"p16f877A.inc"
20h
0x00
INICIO
0x04
ISR_TMR0
; Tipo de Procesador
; librera del PIC16F877A
; Contador de desbordes
; Servicio de interrupcin
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
PORTB
movf
movwf
TMR1L,W
PORTD
PORTD
movlw
movwf
movlw
movwf
clrf
clrf
bsf
bcf
retfie
.20
CONT_DES
.61
TMR0
TMR1L
TMR1H
T1CON,TMR1ON
INTCON,T0IF
;
;
;
;
;
;
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------
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
TMR1L
TMR1H
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
CONF_PUERTOS
CONF_TMR1
CONF_TIMER0
T1CON,TMR1ON
INTCON,GIE
$
; Enciende TMR1
; Habilita int. de TMR0
; Espera interrupcin
END
TEMPORIZADORES
la
salida
TTL,
como
tambin
un
canal
del
osciloscopio
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
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.