Está en la página 1de 6

ESCUELA POLITECNICA NACIONAL

ESCUELA DE FORMACION DE TECNOLOGOS


LABORATORIO DE MICROPROCESADORES
PRACTICA 10
TEMA: TIMERS
OBJETIVO.- Utilizar el TMR0 del PIC 16F870 programado con lenguaje Assembly,
para medir intervalos de tiempo que deben durar ciertos eventos que se requiere sean
producidos por el microcontrolador.

TRABAJO PREPARATORIO.
- Utilizando el Proteus elabore el circuito para el 16F870 con un LED conectado al
Pórtico B pin RB0.

- Utilizando el Assembly elabore el programa para el 16F870 que presente en el pin


RB0 la señal de un oscilador de 1 Hz.
LIST P=16F870
#INCLUDE <P16F870.INC>

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

REGIS20 EQU 0X20

ORG 0x0
GOTO INICIO

ORG 0X5
INICIO CLRF PORTB ;se encera el puerto B
MOVLW b'11010110' ;se asigna el divisor de frecuencia al
TIMER0
OPTION ;se usa una frecuencia f/256 del oscilador
interno
BSF STATUS,RP0 ;se cambia al banco 1 de la RAM
MOVLW b'11111110' ;se carga W con el número binario
MOVWF TRISB ;se configura el bit RB0 como salida
BCF STATUS,RP0 ;se regresa al banco 1 de la RAM
OTRO BCF PORTB,0x0 ;pone cero en el bit cero del puerto B
CALL RETARDO ;llama a la subrutina retardo
BSF PORTB,0X0 ;pone uno en el bit cero del puerto B
CALL RETARDO ;llama a la subrutina retardo
GOTO OTRO ;inicia un nuevo ciclo

RETARDO MOVLW d'17' ;se carga W con 17


MOVWF REGIS20 ;se lleva el contenido de W a REGIS20
;encera el bit T0IF de sobreflujo del registro
INTCON
MOVLW d'101' ;carga W con 101
MOVWF TMR0 ;pasa el contenido de W al registro TMR0
COMF TMR0 ;pone en TMR0 el complemento de 195

RETARD BCF INTCON,T0IF ;encera el bit T0IF de sobreflujo del registro


INTCON

RETARD1 BTFSS INTCON,T0IF ;chequea si aparece el bit de sobreflujo


GOTO RETARD1 ;mantiene la espera por el bit de sobreflujo
DECFSZ REGIS20,1 ;decrementa el contenido de REGIS20
GOTO RETARD ;va a contar una nueva vuelta
RETURN ;termina la subrutina retardo
END ;final del programa

- Utilizando el Proteus elabore el circuito para el 16F870 con un display de 7


segmentos de ánodo común conectado al Pórtico B.
- Elabore el programa en Assembly para el 16F870 que permita presentar en el
display conectado en el pórtico B los caracteres de la palabra ESFOT, durante 0.7
Seg cada uno, de manera secuencial y permanente.

LIST P=16F870
#INCLUDE <P16F870.INC>
__CONFIG _XT_OSC&_WDT_OFF&_PWRTE_ON&_LVP_OFF

REGIS20EQU 0X20 ;etiqueta que define un registro la la dirección 20H de la RAM

ORG 0X0
GOTO INICIO ;Debe ir a la direccion 05H
ORG 0X5

INICIO MOVLWb'11010110' ;se asigna el divisor de frecuencia al TIMER0


OPTION ;se usa una frecuencia f/256 del oscilador interno
BSF STATUS,RP0 ;Cambiamos al banco 1
MOVLW0X0 ;Se carca el acumulador con 00H
MOVWF TRISB ;Se carga en TRISB 00H, lo que configura el puerto b salida
BCF STATUS,RP0 ;Regresamos al banco 0

OTRO MOVLW 0X86 ;Se carga el acumulador con 86H, el código de la letra "E"
MOVWF PORTB ;Se transfiere hacia el portico B el contenido del Acumulador
CALL RETARDO

MOVLW0X92 ;se carga el acumulador con 92H, el código de la letra "S"


MOVWF PORTB ;se transfiere hacia el portico B el contenido del Acumulador
CALL RETARDO

MOVLW0X8E ;Se carga el acumulador con 87H, el código de la letra "F"


MOVWF PORTB ;Se transfiere hacia el portico B el contenido del Acumulador
CALL RETARDO
MOVLW0XC0 ;Se carga el acumulador con 88H, el código de la letra "O"
MOVWF PORTB ;Se transfiere hacia el portico B el contenido del Acumulador
CALL RETARDO

MOVLW0X87 ;Se carga el acumulador con A1H, el código de la letra "T"


MOVWF PORTB ;Se transfiere hacia el portico B el contenido del Acumulador
CALL RETARDO

GOTO OTRO

RETARDO MOVLWd'21' ;se carga W con 21


MOVWF REGIS20 ;se lleva el contenido de W a REGIS20
;encera el bit T0IF de sobreflujo del registro INTCON
MOVLWd'93' ;carga W con 93
MOVWF TMR0 ;pasa el contenido de W al registro TMR0
COMF TMR0 ;pone en TMR0 el complemento de 66

RETARD BCF INTCON,T0IF ;encera el bit T0IF de sobreflujo del registro INTCON
RETARD1 BTFSS INTCON,T0IF ;chequea si aparece el bit de sobreflujo
GOTO RETARD1 ;mantiene la espera por el bit de sobreflujo
DECFSZ REGIS20,1 ;decrementa el contenido de REGIS20
GOTO RETARD ;va a contar una nueva vuelta
RETURN ;termina la subrutina retardo

END ;final del programa

- Utilizando el Proteus elabore el circuito para el 16F870 con LED’s conectados al


Pórtico C de manera que simulen un semáforo que controla la circulación entre
dos vías que se cruzan en sentidos norte-sur y este-oeste.
- Usando el TMR0 elabore el programa en Assembly que controle un semáforo
conectado en el Pórtico C de PIC16F870 de manera que en el sentido Norte - Sur la
luz verde se enciende durante 2 seg. y en el sentido Este - Oeste la luz verde se
enciende durante 1.5 seg. Para los dos sentidos, la luz amarilla debe encenderse
durante 0.3 Seg.

LIST P=16F870
#INCLUDE <P16F870.INC>
__CONFIG _XT_OSC&_WDT_OFF&_PWRTE_ON&_LVP_OFF

REGIS20 EQU 0X20 ;etiqueta que define un registro la la dirección 20H de la


RAM

ORG 0X0
GOTO INICIO ;Debe ir a la direccion 05H
ORG 0X5

INICIO CLRF PORTC


BSF STATUS,RP0
MOVLW b'11000111'
MOVWF OPTION_REG
MOVLW 0X0
MOVWF TRISC
BCF STATUS,RP0

OTRO MOVLW 0X21


MOVWF PORTC
CALL RETARDO
CALL RETARDO
CALL RETARDO
CALL RETARDO
CALL RETARDO
CALL RETARDO
CALL RETARDO
MOVLW 0X22
MOVWF PORTC
CALL RETARDO
MOVLW 0X0C
MOVWF PORTC
CALL RETARDO
CALL RETARDO
CALL RETARDO
CAL RETARDO
CALL RETARDO
MOVLW 0X14
MOVWF PORTC
CALL RETARDO
GOTO OTRO

RETARDO MOVLW d'5'


MOVWF REGIS20
MOVLW d'148'
MOVWF TMR0
COMF TMR0

RETARD BCF INTCON,T0IF


RETARD1 BTFSS INTCON,T0IF
GOTO RETARD1
DECFSZ REGIS20,1
GOTO RETARD
RETURN
END

También podría gustarte