Sunteți pe pagina 1din 9

ESCUELA SUPERIOR POLITCNICA DEL LITORAL

(ESPOL)

FACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACIN

(FIEC)
LABORATORIO DE

MICROPROCESADORES
Prctica 8:

Temporizadores
Profesor:

Ing. Hugo Villavicencio


Integrantes:

Marco Valdivieso Javier Suarez


Paralelo:

Objetivos:
Familiarizarse con el manejo de los temporizadores TIMER0 y TIMER1 del microcontrolador AT89C52 y su programacin en lenguaje ensamblador.

Introduccin
En esta prctica se hizo uso de los temporizadores que vienen incorporados en el microprocesador AT89C52, los cuales son el TMR0 y el TMR1, ambos tienen caractersticas similares a la hora de funcionar, generan interrupciones y trabajan con banderas especiales, pueden trabajar como contadores de eventos o como temporizadores dependiendo de cmo se los seleccione, adems de esto pueden realizar varios tipos de conteos como son hasta 8 bits, 16 bits. En esta prctica utilizaremos ambos temporizadores como modo1, y como modo3 (SPLIT). Diagrama de bloques

AT89C52

LED S PARTE A: Considere el programa T0.ASM listado abajo que usa el temporizador TIMER 0 (TH0: TL0) en Modo 1.

Cada vez que TIMER 0 desborda genera una interrupcin. El programa principal se mantiene en un lazo infinito implementando el parpadeo de P2.0. La subrutina de servicio rota el puerto P1. Edite T0.ASM, ensamble, corra y verifique velocidad del parpadeo de pin P2.0.

Descripcin de los algoritmos utilizados :


Ejercicio 1 El timer0 opera en modo 1. El programa PRINCIPAL permanece en un lazo infinito parpadeando P2.0. Con cada desborde de T0 se genera una interrupcin. La subrutina de servicio TMR0_ISR desplaza un logico"0" a la derecha en P1. El vector de interrupcin asociado con el timer T0 es la localidad 00BH en la memoria de programa. Ejercicio 2 Se disea una subrutina programada con el TMR1 en modo 1 para obtener una frecuencia de parpadeo de 30 hz, en el pin P2.0. Esto se logra primero habilitando el uso del TMR 1 en nuestro programa, luego de esto se realiza el retardo para que el TMR 1 trabaje y realice su funcin en la patita P2.0 del microprocesador. Ejercicio 3 Programacin de TIMER0 en modo Split (SPLIT.ASM). Cuando el TIMER0 se configura en modo split, es decir en MODO 3, se convierte en dos temporizadores de 8 bits independientes: TH0 y TL0. Los bits de control de TL0 son los mismos de T0, y los bits de control de TH0 son los mismos de T1 y pueden funcionar simultneamente con reloj interno. As mismo el vector de interrupcin de TL0 es 000BH y el de TH0 es 001BH.

Programa fuente:
Ejercicio #1
;******************************************************************************** ;* PROGRAMACION DE TIMER T0. ;*NOMBRE DEL PROGRAMA: T0.ASM ;*DESCRIPCION: El timer0 opera en MODO 1. El programa PRINCIPAL permanece en un ;*lazo infinito parpadeando P2.0. Con cada desborde de T0 se genera una interrupcin. ;*La subrutina de servicio TMR0_ISR desplaza un logico"0" a la derecha en P1. ;*El vector de interrupcin asociado con el timer T0 es la localidad 00BH en ;*la memoria de programa. ;* ;*MICC AT89S52 ;*XTAL=12 MHZ ;******************************************************************************** ;DECLARACION DE VARIABLES ;STACK DSEG INIC_STACK: DS AT 02FH 030H

;VECTOR RESET CSEG JMP

AT 0 XRST

; Vector RST

;VECTOR DE INTERRUPCION DE TIMER T0. ORG 00BH JMP TMR0_ISR ; Salta a subrutina TMR0_ISR ORG MOV MOV MOV MOV MOV MOV SETB MOV CLR CLR 100H SP, #INIC_STACK ; Define puntero de pila TMOD, #01H ; Selecciona TIMER0 MODO 1 TH0, #63H ;PARA 20 HZ TH1:TL1=63C0H TL0, #0C0H A, #0FFH P1, #0FFH TR0 ; Habilita TMR0 IE, #082H ; Habilita su interrupcion C P2.0 ;P2.0 salida

XRST:

LOOP1:

LCALL FLIP SJMP LOOP1

; Lazo infinito PARPADEA P2.0

;************************************************************************** ; SUBRUTINA PARPADEA P2.0 FLIP: CPL P2.0 ;complementa P2.0 LCALL DELAY RET ;************************************************************************** ;SUBRUTINE DELAY 0.20 SEGUNDOS DELAY: MOV R2,#20 ;RETARDO=0.20 SEGUNDOS F02: MOV R1,#50 ; F01: MOV R0,#100 DJNZ R0,$ DJNZ R1,F01 DJNZ R2,F02 RET ;********************************************************************** ;*SUBRUTINA DE SERVICIO DE INTERRUPCION DE TIMER 0. TMR0_ISR: RRC A ; Rota registro A a travs de bandera CY MOV P1, A ; Contenido de A se transfiere a P1 MOV TH0, #63H ; RECARGA T1 PARA 20 HZ TH1:TL1=63C0H MOV TL0, #0C0H RETI ; Regresa a lazo infinito parpadea P2.0 ;************************************************************************* END ; Fin del programa fuente parte A. ***********************************************************

Ejercicio #2
******************************************************************************** ;* PROGRAMACION DE TIMER T0. ;*NOMBRE DEL PROGRAMA: T0.ASM ;*DESCRIPCION: El timer0 opera en MODO 1. El programa PRINCIPAL permanece en un ;*lazo infinito parpadeando P2.0. Con cada desborde de T0 se genera una interrupcin. ;*La subrutina de servicio TMR0_ISR desplaza un logico"0" a la derecha en P1. ;*El vector de interrupcin asociado con el timer T0 es la localidad 00BH en ;*la memoria de programa. ;* ;*MICC AT89S52 ;*XTAL=12 MHZ

;******************************************************************************** ;DECLARACION DE VARIABLES ;STACK DSEG INIC_STACK: DS AT 02FH 030H

;VECTOR RESET CSEG JMP

AT 0 XRST

; Vector RST

;VECTOR DE INTERRUPCION DE TIMER T0. ORG 00BH JMP TMR0_ISR ; Salta a subrutina TMR0_ISR ORG 100H MOV SP, #INIC_STACK ; Define puntero de pila MOV TMOD, #11H ; Selecciona TIMER1 MODO 1 MOV TH0, #63H ;PARA 20 HZ TH1:TL1=63C0H MOV TL0, #0C0H MOV TH1, #0BEH MOV TL1, #0C4H MOV A, #0FFH MOV P1, #0FFH SETB TR0 ; Habilita TMR0 SETB TR1 ;HABILITA MOV CLR CLR LOOP1: IE, #082H C P2.0 ; Habilita su interrupcion

XRST:

TMR1

;P2.0 salida

LCALL FLIP SJMP LOOP1

; Lazo infinito PARPADEA P2.0

;************************************************************************** ; SUBRUTINA PARPADEA P2.0 FLIP: CPL P2.0 ;complementa P2.0 LCALL DELAY RET ;************************************************************************** ;SUBRUTINE DELAY 0.20 SEGUNDOS DELAY: CLR TR1 MOV TH1, #0BEH MOV TL1, #0C4H SETB TR1 RET ;********************************************************************** ;SUBRUTINA DELAY 1

;********************************************************************** ;*SUBRUTINA DE SERVICIO DE INTERRUPCION DE TIMER 0. TMR0_ISR: RRC MOV MOV MOV A ; Rota registro A a travs de bandera CY P1, A ; Contenido de A se transfiere a P1 TH0, #63H ; RECARGA T1 PARA 20 HZ TH1:TL1=63C0H TL0, #0C0H

RETI ; Regresa a lazo infinito parpadea P2.0 ;************************************************************************* END ; Fin del programa fuente parte A. ***********************************************************

Ejercicio #3
;DEFINING OF VARIABLES BSEG AT 0

;DEFINING OF BIT-VARIABLES SEMAPHORE: DBIT 8 DIRECTION BIT SEMAPHORE ;STACK DSEG AT 03FH STACK_START: DS 040H ;RESET VECTORS CSEG AT 0

JMP XRST ; Vector RST ORG 00BH JMP TIM0_ISR ; Salta a subrutina TIM0_ISR ORG 01BH JMP TIM1_ISR ; Salta a subrutina TIM1_ISR ;*********************************************************** ORG 100H XRST: MOV SP,#STACK_START MOV TMOD, #00001011B ; Selecciona TIMER0 MODO 3 MOV A, #0FFH MOV P1, #0FFH MOV P2,#00H MOV R0,#250D MOV R2,#30D SETB TR0 SETB TR1 MOV IE, #082H ; Habilita su interrupcion sobreflujo timer0 MOV IE, #08AH ; Habilita su interrupcion sobreflujo timer1 CLR C LOOP1: SJMP TIM0_ISR: DJNZ R0,LAB3 RRC A MOV LAB3: RETI TIM1_ISR: DJNZ LOOP1

P1,A

R2,LAB4 INC P2 RETI

LAB4:

END ; Fin del programa fuente ;*************************************************************************

Circuitos en proteus:
Ejercicio 1

Ejercicio 2

Ejercicio 3

Hoja de trabajo
En Parte A: en el movimiento de rotacin, si cualquier bit acaba de apagarse, en qu tiempo se enciende nuevamente? Muestre sus clculos. T=1us(65536-N) 1/25Hz=1us(65536-N) N=TH1:TL1=25536=63C0H En Parte A: cul es la frecuencia del parpadeo de pin P2.0? Muestre sus clculos. F=(20*50*100)=100KHhz T=1/100khz=10us En Parte B: cul es el valor de recarga del temporizador T1 para el retardo de 16.7 milisegundos? Muestre sus clculos. Escriba aqu la subrutina DELAY1. T=1us(65536-N) 1/30Hz=1us(65536-N) N=TH1:TL1=32203=7DCBH

DELAY1: CLR TR1 MOV TH1, #7DH MOV TL1, #0CBH SETB TR1 CPL P2.0 RET En Parte C: si el temporizador TL0 arranca con valor 0, en que tiempo genera la interrupcin? T=1us(256-N) T=1us(256)=0.256ms En Parte C: si el temporizador TL1 arranca con valor 0, y adems se implementa un escalador de valor 256, con qu rapidez avanza el contador binario en puerto P2? Tpredifino=256ms Ttotal=Tpredifinido+Ttimer=256ms+0.256ms=256.26ms

Conclusiones:
Una conclusin de esta prctica en la que se hizo uso de los TMR1 y del TMR0 como contadores, dependiendo del modo que se utilice ya sea modo 1 o modo 3 con el primer modo se pudo observar con cada desborde se generaba una interrupcin. Con el valor de la recarga en T0 pudimos ver el tiempo con el q rotaba los leds que en este caso fue de 40 mseg.

Recomendaciones :
Revisar la sintaxis ya que un error al escribir provocar que haya que reescribir el cdigo. Se recomienda analizar cada cdigo antes de copiarlo en el Notepad, para que junto con la descripcin del circuito, se pueda analizar la funcionalidad del cdigo, adems debemos realizar las instrucciones en orden ya que muchos de estos estn relacionados por lo tanto dependeremos de la comprensin de los mismos para la resolucin del ejercicio.