Reporte8 Imp

Descripción completa

Views 183 Downloads 10 File size 231KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL

(ESPOL)

FACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACIÓN

(FIEC) LABORATORIO DE

MICROPROCESADORES Práctica 8:

Temporizadores Profesor:

Ing. Hugo Villavicencio Integrantes:

Marco Valdivieso Javier Suarez Paralelo:

1

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

Introducción En esta práctica se hizo uso de los temporizadores que vienen incorporados en el microprocesador AT89C52, los cuales son el TMR0 y el TMR1, ambos tienen características similares a la hora de funcionar, generan interrupciones y trabajan con banderas especiales, pueden trabajar como contadores de eventos o como temporizadores dependiendo de cómo se los seleccione, además de esto pueden realizar varios tipos de conteos como son hasta 8 bits, 16 bits. En esta práctica 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 interrupción. 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.

Descripción 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 interrupción. La subrutina de servicio TMR0_ISR desplaza un logico"0" a la derecha en P1. El vector de interrupción asociado con el timer T0 es la localidad 00BH en la memoria de programa. Ejercicio 2 Se diseña 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 función en la patita P2.0 del microprocesador. Ejercicio 3 Programación 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 simultáneamente con reloj interno. Así mismo el vector de interrupción 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 interrupción. ;*La subrutina de servicio TMR0_ISR desplaza un logico"0" a la derecha en P1. ;*El vector de interrupción 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

;VECTOR RESET CSEG JMP

030H

AT 0 XRST

; Vector RST

;VECTOR DE INTERRUPCION DE TIMER T0. ORG 00BH JMP TMR0_ISR ; Salta a subrutina TMR0_ISR

XRST:

LOOP1:

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

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 través 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 interrupción. ;*La subrutina de servicio TMR0_ISR desplaza un logico"0" a la derecha en P1. ;*El vector de interrupción 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

;VECTOR RESET CSEG JMP

030H

AT 0 XRST

; Vector RST

;VECTOR DE INTERRUPCION DE TIMER T0. ORG 00BH JMP TMR0_ISR ; Salta a subrutina TMR0_ISR

XRST:

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

TMR1 MOV CLR CLR LOOP1:

IE, #082H C P2.0

LCALL FLIP SJMP LOOP1

; Habilita su interrupcion

;P2.0 salida

; 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 través 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

LAB4:

R2,LAB4 INC P2 RETI

LOOP1

P1,A

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

Circuitos en proteus: Ejercicio 1

Ejercicio 2

Ejercicio 3

Hoja de trabajo En Parte A: en el movimiento de rotación, si cualquier bit acaba de apagarse, ¿en qué tiempo se enciende nuevamente? Muestre sus cálculos. T=1us(65536-N) 1/25Hz=1us(65536-N) N=TH1:TL1=25536=63C0H En Parte A: ¿cuál es la frecuencia del parpadeo de pin P2.0? Muestre sus cálculos. F=(20*50*100)=100KHhz T=1/100khz=10us En Parte B: ¿cuál es el valor de recarga del temporizador T1 para el retardo de 16.7 milisegundos? Muestre sus cálculos. 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 interrupción? T=1us(256-N) T=1us(256)=0.256ms En Parte C: si el temporizador TL1 arranca con valor 0, y además 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 conclusión de esta práctica 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 interrupción. 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 código. Se recomienda analizar cada código antes de copiarlo en el Notepad, para que junto con la descripción del circuito, se pueda analizar la funcionalidad del código, además debemos realizar las instrucciones en orden ya que muchos de estos están relacionados por lo tanto dependeremos de la comprensión de los mismos para la resolución del ejercicio.