Sie sind auf Seite 1von 10

PRCTICA 5 LOS TEMPORIZADORES PROGRAMABLES DEL PIC16F877

OBJETIVO:

Identificar los diferentes temporizadores disponibles en el MCU PIC16F877, sus modos de operacin, preescaladores (pre-divisores de frecuencia) y postescaladores (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.

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).

MATERIAL Y EQUIPO EMPLEADO


Laboratorio equipado con computadoras que tengan instalado el MPLAB versin v7.40 o superior y el WinPic800 v3.55 g. Cantidad 1 1 1 5 5 1 1 1 1 Descripcin Programador compatible con WinPic800. Microcontrolador PIC16F877 Push-button Leds Resistencias de 330 Resistencia de 10 k Diodo 1N4148 Tableta experimental Generador de funciones

Prcticas con el PIC16F877

1 1

Osciloscopio Fuente de alimentacin de CD

Pre-reporte:

Leer previamente toda la prctica. Investigar en la hoja de datos del PIC16F877, los diagramas a bloques de la arquitectura interna del Timer0, Timer1 y Timer2. Llevar implementado en un protoboard los circuitos de la figura 8.1 y 8.2.

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). 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 RADIX INCLUDE cblock CONT_DES ST_TEMP endc org goto P=16F877 HEX "p16f877a.inc" 20h ; Contador de desbordes de TMR0 ; Copia del registro STATUS

0 INICIO

Prcticas con el PIC16F877

org goto

4 ISR_T0IF

;----- Subrutina que configura al puerto B como salida-----CONF_PUERTOS bsf STATUS,RP0 ; conmuta a banco 1 clrf TRISB ; Puerto B = salida bcf STATUS,RP0 ; conmuta a banco 0 movlw b'0001000' movwf PORTB ; Puerto B = 0001 0000 movf STATUS,w ; Guarda el estado del ; registro STATUS movwf ST_TEMP return ;----- Subrutina que configura al Timer0 -------------------CONF_TIMER0 bsf STATUS,RP0 ; Banco 1 movlw b'11010101' ; Timer0 en modo temporizador movwf OPTION_REG ; configura preesc. para el timer0 bcf STATUS,RP0 ; Banco 0 bsf INTCON,T0IE ; Activa int. por desbordes en TMR0 return ; ---- Programa principal ----------------------------------INICIO call call movlw movwf movlw movwf bcf bsf goto CONF_PUERTOS CONF_TIMER0 .62 CONT_DES ; 0xF7 ; TMR0 ; INTCON,T0IF ; INTCON,GIE ; $ ;

CONT_DES <- 62 Establece valor inicial para TMR0 Borra bandera Activa mascara global Espera interrupcin ------------------------Decrementa desbordes Desbordes = 0? No Si Recupera STATUS Rota Puerto B Guarda STATUS Reinicia contador de desbordes CONT_DES <- 62 Establece valor inicial para TMR0 Apaga bandera

;----- ISR debido a desborde en TMR0 ISR_T0IF CONT_DES ; decfsz goto AUN_NO ; movf ST_TEMP,w ; movwf STATUS ; ; rrf PORTB,f movf STATUS,w ; movwf ST_TEMP movlw .62 ; movwf CONT_DES ; movlw 0xF7 ; movwf TMR0 ; AUN_NO bcf INTCON,T0IF ; retfie END

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

Prcticas con el PIC16F877

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.

Figura 8.1: Circuito de experimentacin para el Timer0.

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? ________________________________________________________________________ ________________________________________________________________________ Exactamente qu fue lo que hizo la nueva lnea de cdigo? ________________________________________________________________________

Prcticas con el PIC16F877


De qu manera influye en el programa? ________________________________________________________________________ Cul es el tiempo que permanecern encendidos los leds con este cambio? ________________________________________________________________________ Escriba la frmula mediante la cual es posible calcular el tiempo que dura el retardo. ________________________________________________________________________ 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? ________________________________________________________________________ ________________________________________________________________________ 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? ________________________________________________________________________ ________________________________________________________________________

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.

Prcticas con el PIC16F877


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. 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 ; Contador de desbordes ; Tipo de Procesador ; librera del PIC16F877A

0x00 INICIO 0x04 ISR_TMR0

; Servicio de interrupcin

;----- ISR debido a desborde en TMR0 ------------------------;------ cada 50 mS aproximadamente --------------------------ISR_TMR0 btfss INTCON,T0IF goto AUN_NO UN_SEG decfsz goto Valor_TMR1 bcf movf movwf movf movwf movlw movwf movlw movwf clrf clrf bsf bcf retfie AUN_NO movlw movwf bcf retfie .61 TMR0 INTCON,T0IF ; Establece valor inicial ; Apaga bandera T1CON,TMR1ON TMR1H,W ; PORTB ; TMR1L,W ; PORTD ; .20 CONT_DES .61 TMR0 TMR1L TMR1H T1CON,TMR1ON INTCON,T0IF Leer el de TMR1 Leer el de TMR1 ; ; ; ; ; ; valor de la parte y lo despliega en valor de la parte y lo despliega en alta PORTB baja PORTD CONT_DES,F AUN_NO ; Decrementa desbordes ; Desbordes = 0? No

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

;----- Subrutina que configura al puerto B y D como salida------

Prcticas con el PIC16F877


;----- y al pin T1CKI como entrada para TMR1 -----------------CONF_PUERTOS bsf STATUS,RP0 ; conmuta a banco 1 clrf TRISB ; Puerto B como salida clrf TRISD ; Puerto D como salida bsf TRISC,0 ; RC0/T1CKI como entrada ; Pin T1CKI como entrada bcf STATUS,RP0 ; conmuta a banco 0 clrf PORTB clrf PORTD return ;----- Subrutina que configura al TMR1 en modo contador ---------;----- eventos externos por T1CKI -------------------------------CONF_TMR1 movlw b'00000110' ; Configura TMR1 en modo movwf T1CON ; contador de eventos no sinc. clrf TMR1L ; Borrar registro de TMR1 clrf TMR1H return ;----- Subrutina que configura al Timer0 CONF_TIMER0 bsf STATUS,RP0 movlw b'11000111' movwf OPTION_REG timer0 bcf STATUS,RP0 bcf INTCON,T0IF bsf INTCON,T0IE TMR0 movlw .20 movwf CONT_DES movlw .61 movwf TMR0 return -------------------; Banco 1 ; Timer0 en modo temporizador ; configura preesc. para el ; Banco 0 ; Desactiva bandera del TMR0 ; Act. int. por desbordes

en

; CONT_DES <- 20 ; Establece valor inicial ; para TMR0. Temp = 50 mS

; ---- Programa principal ----------------------------------INICIO call CONF_PUERTOS call CONF_TMR1 call CONF_TIMER0 bsf T1CON,TMR1ON ; Enciende TMR1 bsf INTCON,GIE ; Habilita int. de TMR0 goto $ ; Espera interrupcin END

9. Elabore el proyecto correspondiente y proceda a ensamblar el programa en la forma acostumbrada. 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

Prcticas con el PIC16F877

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

Figura 8.2: Circuito de experimentacin para el Timer1.

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 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. Valor de los puertos: _______________________________________________________

Prcticas con el PIC16F877

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: _______________________ Valor mostrado en el generador: ______________________ Cmo son entre si? ________________________________________________________________________ Existe mucha diferencia entre los valores mostrados en los leds y el mostrado por el generador de funciones?____________________________________________________ A qu se debe esto? ________________________________________________________________________ ________________________________________________________________________

Vare el valor de frecuencias de entrada al pin RC0, encuentre el rango de frecuencias en el que los valores mostrados en los leds son aproximados a los mostrados en la cartula del generador de funciones. Cul fue el rango obtenido? Escriba el valor mximo y mnimo. _______________________________________________________________________ A que se debe que el rango de medicin sea limitado? ________________________________________________________________________ Cmo se puede incrementar el rango de medicin? Justifique su respuesta. ________________________________________________________________________ ________________________________________________________________________

Si incrementa mucho el valor de frecuencia es posible que el resultado mostrado sea mucho menor al valor real, Cul es la razn de esto?, Cmo se puede evitar este efecto? ________________________________________________________________________ ________________________________________________________________________ 12. Del archivo fuente anterior, dentro de la subrutina que configura al Timer1, localice la lnea de cdigo
movlw b'00000110' ; Configura TMR1 en modo

Prcticas con el PIC16F877


sustityala ahora por la siguiente:
movlw b'00000010' ; Configura TMR1 en modo

Almacene el archivo, reensamble el proyecto, descargue el programa al PIC y ejectelo. Cul es el comportamiento de los leds ahora? Vari la exactitud del resultado mostrado en los leds? ________________________________________________________________________ ________________________________________________________________________ Exactamente qu fue lo que hizo la nueva lnea de cdigo? ________________________________________________________________________ De qu manera influye en el programa? ________________________________________________________________________

Vare el rango de frecuencia de entrada en el pin RC0, cmo es en comparacin con el punto 11? ________________________________________________________________________

A qu se debe esto? Justifique su respuesta. ________________________________________________________________________ ________________________________________________________________________

13. 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? ________________________________________________________________________ ________________________________________________________________________

14. 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? ________________________________________________________________________ ________________________________________________________________________

Das könnte Ihnen auch gefallen