Documente Academic
Documente Profesional
Documente Cultură
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?
RETFIE cumple exactamente la funcin de lo comnmente conocemos como RETURN.
Tambin establece la interrupcin de habilitacin global. Por ello, cuando se da una
interrupcin en el hardware, limpia la interrupcin de habilitacin global y ejecuta una
instruccin CALL. De esta forma, la accin de habilitar las instrucciones y regresar al
programa principal, se puede hacer en un solo paso.
RETFIE es fundamental en primer lugar porque es necesario regresar al programa
principal, y, en segundo lugar, porque realiza sta accin en un solo paso.
Para el programa es fundamental porque sino, el puntero no regresa al programa
principal.
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?
La rutina de parpadeo se ejecuta una sla vez.
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.
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 P=16F877A ; Tipo de Procesador
INCLUDE "p16f877A.inc" ; librera del PIC16F877A
cblock 20h
CONT_DES ; Contador de desbordes
endc
org 0x00
goto INICIO
org 0x04
goto 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 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 TMR1L,W ; Leer el valor de la parte baja
movwf PORTD ; de TMR1 y lo despliega en PORTD
movlw .20 ; 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 ; Act. int. 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 ; 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
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 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.
Valo r de los puertos
Binario 1001010101011
Del generador
Decimal 100
11.Cmo son entre si?
son directamente proporcional ya que van aumentado respectivament, tienen una relacion
equivalente
Existe mucha diferencia entre los valores mostrados en los leds y el mostrado por el
generador de funciones?
Si, ya que le valor que nos dan los leds mayor que el 100% que ns brinda los generadores
El valor dado por los leds es de b'1001010101011', y en cambio de los generadores es de
b'1100100'
A qu se debe esto?
Se debe a las interrupciones de TMR0,mientras 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
Cul fue el rango obtenido? Escriba el valor mximo y mnimo.
El rango es entre 1Hz a 10hz
A que se debe que el rango de medicin sea limitado?
Al cambio de frecuencia y al valor dado a los registros (TMR1H y TMR1L)
12Cmo se puede incrementar el rango de medicin? Justifique su respuesta.
Aumentando el divisor de voltaje asi al ingresar mayor voltaje sera mayor el rango de la
medicin
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?
Si debido a que mayor se la frecuencia el valor que se genera es menor (valor inicial
d'4779' reduce de una forma
realmente drastica D'111'
Binario 1101111
Decimal 100
el rango es entre 1Hz a 10hz
cambiando a movlw b'00000010' ; Configura TMR1 en modo
La lnea de cdigo hizo que cambie dos bits
El valor en binario es 100011101011
En decimal es 100
Para variar el valor y aproximarse al del generador se necesita entre 0.1 a 1 Hz
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?
Es el comando que apaga la bandera, cuando se compilo y se carg no se produjo
respuesta en los leds