You are on page 1of 5

INSTITUTO TECNOLGICO DE TLHUAC

Profesor: Ing. Pichardo Cruz David Sal


Asignatura: Microcontroladores
Carrera: Ingeniera Mecatrnica
Grupo: 6M1
Practica 8. Realizar un contador binario de 0x0000 a 0xFFFF utilizando el
TIMER1 en modo contador de eventos.

Integrantes :
Cortez Guzman Silvia
Castaeda Merino Giusseph enrique
Ramirez Hernadez Romario
Valderrama Zarco Isaac

Introduccin

Los Temporizadores o "Timers" se emplean para controlar periodos de tiempo


(temporizadores) y para llevar la cuenta de acontecimientos que suceden en el
exterior (contadores). Para la medida de tiempos se carga un registro con el
valor adecuado y a continuacin dicho valor se va incrementando o
decrementando al ritmo de los impulsos de reloj o algn mltiplo, hasta que se
desborde y llegue a 0, momento en el que se produce un aviso. Cuando se
desean contar acontecimientos que se materializan por cambios de nivel o
flancos en alguna de las terminales del microcontrolador, el registro se va
incrementando o decrementando al ritmo de dichos impulsos.
El TMR1 es un Temporizador/Contador con un tamao de 16 bits, lo que
requiere el uso de dos registros de 8 bits: TMR1H : TMR1L, que son los
encargados de guardar
el valor del contaje en cada momento. Dicho valor evoluciona desde 0000h
hasta FFFFh.
Momento en el cual se activa el sealizador TMR1IF y se regresa al valor inicial
0000h.
El valor contenido en TMR1H : TMR1L puede ser ledo o escrito y los impulsos
de reloj que
originan el contaje ascendente pueden provenir del exterior o de la frecuencia
de
funcionamiento del microcontrolador (Fosc/4)
El Timer1 tiene tres formas de funcionamiento:
a) Temporizador
b) Contador Sncrono
c) Contador Asncrono
Como Temporizador el valor concatenado TMR1H : TMR1L se incrementa con
cada ciclo de instruccin (Fosc/4). Es el que vamos a utilizar en la practica.
El modulo timer 1 cuenta con dos registros TMR1H y TMR1L con un tamao de
16 bits esto es 65536 cuentas. El retraso ser de 65.536 ms.

Retardo=

41
256
4 MHz

Para alcanzar el valor de un segundo empleamos el preescaler colocndolo con


un valor de 1:8 para poder generar el retardo de medio segundo y hacemos la
igualdad para despus despejar. Pero con el contador interno de 16 bits.

41
TMR 1Preescaler
4 MHz
41
Retardo=
656368
4 MHz
Retardo=

Retardo=525.088 ms
El valor lo vamos a mostrar en el PORTC como una escalera que se incrementa
cada 524,2 ms usaremos una tabla para decodificar el valor a mostrar en el
PORTD.

Ilustracin 1 REGISTRO TICON DEL TMR1

DIAGRAMA DE FLUJO

Ilustracin 2 SIMULACIN EN
PROTEUS

list p=16f877A ;Comando que indica el Pic usado


include "p16f877A.inc" ;Etiquetas genricas para el Pic16F877
CONTA EQU 0x20 ;Variable CONTA en direccin 0x20 hexadecimal
;de memoria RAM
org 0x000 ;Inicio del programa en la posicin cero de memoria
inicio
bsf STATUS,RP0 ;Ir banco 1
clrf TRISC ;PORTC salida
movlw b'10000000' ;configuracin del registro OPTION
movwf OPTION_REG
bcf STATUS,RP0 ;Ir banco 0
bcf STATUS,RP1
movlw b'00110000' ;Contador interno de 16 bits
movwf T1CON
clrf CONTA ;CONTA = 0
clrf PORTC ;PORTC = 0
_ciclo
movf CONTA,W ;Cargar el valor de CONTA en W
call _display ;Llama a la tabla _display
movwf PORTC ;Al retornar de la subrutina el valor de W se saca
;por el PORTC
call _retardo ;Llama a la subrutina retardo
incf CONTA,F ;incrementa el valor de CONTA
movlw d'16' ;Verifica si ha llegado a 8
subwf CONTA,W
btfss STATUS,Z
goto _ciclo ;Si no es 8: ir _bucle
clrf CONTA ;Si es 8: CONTA = 0
goto _ciclo ;Ir _bucle
_retardo
Ilustracin 3 Practica 8 contador binario
bcf PIR1,TMR1IF ;Borrar la bandera de desborde
clrf TMR1L ;Limpiar los registros de conteo
clrf TMR1H
bsf T1CON,TMR1ON ;Habilita el TMR1
_espera
btfss PIR1,TMR1IF ;Verificar el desborde
goto _espera ;Si no ir _espera
bcf T1CON,TMR1ON ;Si desborda: limpiar bandera de desborde
return ;Retorno
_display
addwf PCL,F ;pcl + W >>>> W
;El PCL se incrementa con el valor de W
;proporcionando un salto
retlw b'00000000' ;retorna con valores para PORTC
retlw b'10000000'
retlw b'01000000'
retlw b'11000000'
retlw b'00100000'
retlw b'10100000'
retlw b'01100000'
retlw b'11100000'
retlw b'00010000'
retlw b'10010000'
retlw b'01010000'
retlw b'11010000'

You might also like