Reporte De Práctica 8.docx

  • Uploaded by: asdasd asdasd
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Reporte De Práctica 8.docx as PDF for free.

More details

  • Words: 1,375
  • Pages: 9
Reporte Práctica #8 “LOS TEMPORIZADORES PROGRAMABLES DEL PIC16F887”

Laboratorio de Microcontroladores Horario: Jueves 8:00-10:00a.m. Profesor: Francisco Javier Armenta Luna Integrantes: José Rafael Ochoa Parra José Honorio Zermeño Aguirre Luis Rafael Reyes Vega 12 de Abril del 2018

ID: 00000133085 ID: 00000133756 ID: 00000117476 Cd. Obregón, Sonora.

RESULTADOS Codigo ensamblador ; 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 org 4 goto 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' movwfPORTB ; Puerto B = 0001 0000 movf STATUS,w ; Guarda el estado del movwfST_TEMP ; registro STATUS return ;----- Subrutina que configura al Timer0 -------------------CONF_TIMER0 bsf STATUS,RP0 ; Banco 1 movlw b'11010101' ; Timer0 en modo temporizador movwfOPTION_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 CONF_PUERTOS call CONF_TIMER0 movlw .62 movwfCONT_DES ; CONT_DES <- 62 movlw 0xF7 ; Establece valor movwfTMR0 ; inicial para TMR0 bcf INTCON,T0IF ; Borra bandera bsf INTCON,GIE; Activa mascara global goto $ ; Espera interrupción ;----- ISR debido a desborde en TMR0 ------------------------ISR_T0IF

decfszCONT_DES ; Decrementa desbordes goto AUN_NO ; Desbordes = 0? No movf ST_TEMP,w ; Si movwfSTATUS ; Recupera STATUS rrf PORTB,f ; Rota Puerto B movf STATUS,w ; Guarda STATUS movwfST_TEMP movlw .62 ; Reinicia contador de desbordes movwfCONT_DES ; CONT_DES <- 62 movlw 0xF7 ; Establece valor inicial movwfTMR0 ; para TMR0 AUN_NO bcf INTCON,T0IF ; Apaga bandera retfie END

2. EIabore eI proyecto correspondiente y proceda a ensambIar eI programa en Ia forma acostumbrada.

II. El Timer1 en modo contador 9. Edite un archivo con eI programa fuente que aparece a continuación y reaIice Ias modificaciones necesarias para que funciones con eI PIC16F887.

Codigo ensamblador ; Programa que mide la frecuencia de una señal ; introducida por el pin RC0 como base de tiempo de TMR1. LIST

P=16F887

radix

hex

; Tipo de Procesador

INCLUDE

"p16f887.inc" ;librería del PIC16F877A

__CONFIG

_CONFIG1,0x20F4

__CONFIG

_CONFIG2,0x3FFF

cblock 20h CONT_DES ; Contador de desbordes endc org

0x00

goto

INICIO

org

0x04

goto

ISR_TMR0

; Servicio de interrupción

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

INTCON,T0IF

goto

AUN_NO

UN_SEG decfsz CONT_DES,F ; Decrementa desbordes goto

AUN_NO

; Desbordes = 0? No

Valor_TMR1 bcf

T1CON,TMR1ON

movf

TMR1H,W

; Leer el valor de la parte alta

movwf PORTB

; de TMR1 y lo despliega en PORTB

movf

; Leer el valor de la parte baja

TMR1L,W

movwf PORTD movlw .20

; de TMR1 y lo despliega en PORTD

; Reinicia contador de desbordes

movwf CONT_DES ; CONT_DES <- 20

movlw .61

; Establece valor inicial

movwf TMR0 ; para TMR0 clrf

TMR1L

; Borrar los registros

clrf

TMR1H

; implicados en las mediciones

bsf

T1CON,TMR1ON

bcf

INTCON,T0IF

retfie 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-----;----- 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 ; Banco 1

movlw b'11000111'

; Timer0 en modo temporizador

movwf OPTION_REG

; configura preesc. para el ; timer0

bcf

STATUS,RP0 ; Banco 0

bcf

INTCON,T0IF ; Desactiva bandera del TMR0

bsf

INTCON,T0IE ; Activa interrupción ; por desbordes en TMR0

movlw .20 movwf CONT_DES ; CONT_DES <- 20 movlw .61

; Establece valor inicial

movwf TMR0 ; para TMR0. Temp = 50 mS return ; ---- Programa principal ----------------------------------INICIO call

CONF_PUERTOS

call

CONF_TMR1

call

CONF_TIMER0

bsf

T1CON,TMR1ON

bsf

INTCON,GIE ; Habilita int. de TMR0

goto

$

; Enciende TMR1

; Espera interrupción

END

10. Implemente el circuito de la figura 8.2, descargue el programa al PIC y ejecútelo. 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 también un canal del osciloscopio (debidamente calibrado) y encienda ambos. A continuación elija la escala adecuada en el generador, varíe la frecuencia hasta que se observe en el osciloscopio que el periodo de la señal sea de 10 ms.

11. Observe que el programa principal está formado por 6 líneas y básicamente lo que hace es configurar los puertos, al Timer0 en modo temporizador, al Timer1 en modo contador asíncrono, encender el Timer1, habilitar la máscara global de interrupciones y entrar en un ciclo ocioso a espera de la interrupción de 50 mS de TMR0. Convierta el valor hexadecimal anterior y compárelo con el valor de las carátula del generador de funciones. ¿Cómo son entre sí?: Casi idénticos. ¿Existe alguna diferencia entre los valores mostrados en los leds y el mostrado por el generador de funciones?: Una mínima diferencia. ¿A qué se debe esto?: A la configuración del programa. Varíe 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 carátula del generador de funciones. ¿Cuál fue el rango obtenido? Escriba el valor máximo y mínimo.: Valor máximo es 65535 y el minimo es 0. ¿A que se debe que el rango de medición sea limitado?: A que el contador llega a su limite máximo.

¿Cómo se puede incrementar el rango de medición? Justifique su respuesta. Contando el valor en decimal debido a que así está programado previamente. Si incrementa mucho el valor de frecuencia es posible que el resultado mostrado sea mucho menor al valor real, ¿Cuál es la razón de esto?, ¿Cómo se puede evitar este efecto?: Esto paso por que al llegar a su valor máximo los bit no dejan de contar pero no se muestra el valor completo y se puede malinterpretar.

CONCLUSIONES (José Rafael Ochoa Parra) Por ultimo para concluir con esta práctica podemos llegar a un acuerdo en que Dependiendo del número que sea establecido en el Timer0, el contador interno será más rápido o más lento. Mientras más pequeño sea el número, más lento será el contador, y viceversa. Una desventaja del PIC de la familia 16 es que cuando está en modo de contador externo, con el prescaler se debe realizar varias pulsaciones para activar el contador. El contador interno del PIC es una buena forma para establecer tiempos internos y ejecutar acciones dependiendo de la necesidad y la programación. (José Honorio Zermeño Aguirre) En esta práctica se utilizó otro tipo de PIC, en este caso se utilizó el PIC 16F877 solo para la primera parte de la práctica, en la segunda parte se utilizó de nuevo el PIC 16F887, en ambos se observó las diferencias con las que cuentan en los diferentes temporizadores, sus prescaladores y modos de operación, también se observó en cómo cambiar la configuración de los timer, para que el timer0 sea un temporizador, y el timer1 funcione como un contador, en esta práctica no se contó con gran dificultad, lo único difícil fue cambiar la palabra de configuración del PIC 16F877ya que no estamos familiarizados con esa palabra, ya que normalmente usamos el PIC 16F887. (Luis Rafael Reyes Vega) Con la ayuda de la práctica observamos gracias al contador del programa como podemos mostrar los valores de frecuencia del osciloscopio en una secuencia de leds con una resolución bastante buena también miramos lo preciso que es este método y como utilizarlo. Los contadores son de gran utilidad siempre y cuando se ajuste bien los cálculos para tener una medición bastante precisa.

Related Documents

Reporte
June 2020 22
Reporte
December 2019 68
Reporte
May 2020 32
Reporte
August 2019 67
Reporte
May 2020 27

More Documents from ""

December 2019 7
Practica 04_e.docx
December 2019 4
November 2019 6
Capitulo 30.docx
December 2019 7
Bbj.pdf
April 2020 7