MICROCONTROLADORES
Práctica de Laboratorio
RETARDOS
Esquema:
Materiales e instrumentos:
Multímetro
Fuente de alimentación 12Vdc
1 Resistencia 10K , 1/4 W
8 Resistencia 470 , 1/4 W
8 Diodos leds
1 Regulador 7805
1 Pulsador
2 Condensadores electrolíticos 10uF / 16Vdc
1 Condesador de 100nF / 50Vdc
2 Condensadores 27pF
1 cristal de 4MHz
1 PIC16F877A
Protoboard
Cables para protoboard
Grabador de PICs
TECNICOS INDUSTRIALES - ELECTRÓNICA ING. WESTER PANIURA
1
MICROCONTROLADORES
Proceso de ejecución:
1. Escriba y compile el programa para el pic16F877A en el compilador MPLAB X 6.05.
2. Una vez obtenido el archivo hexadecimal *.hex, grábelo en el PIC16F877A
3. Montar circuito según esquema.
4. Conectar circuito a la fuente DC y medir con el multímetro el valor a la salida del
7805
5. La salida de 5 voltios del regulador 7805 alimente el circuito del pic16F877A
6. Observe el desplazamiento de los leds
Conclusiones:
…………………………………………………………………………………………… ………
………………………………………………………………………………………….. … …. ..
Complementos:
1. Describir el concepto y las especificaciones técnicas del regulador 7805.
2. Que funcion cumple el comando DECFSZ
3. Que funcion cumple el comando CALL
4. Que funcion cumple el comando RETURN
5. Que función tiene el retardo
6. Con que valores se podría tener aprox 1 seg
OBTENCIÓN DEL RETARDO POR SOFTWARE
Tretardo = (3)*(CI)*(CONTAD1*CONTAD2*CONTAD3)
Tretardo = (3)*(0.000001)*(16*96*112)
El número 3 se debe a la suma de los ciclos de máquina de:
DECFSZ = 1 ciclo de maquina
GOTO = 2 ciclos de maquina
CI(ciclo de instruccion) o ciclo de maquina = 4 pulsos de reloj
Asi para Xtal = 4MHz entonces:
1 pulso de reloj = 1/4000000 = 250ns
1 CI = 4 * 1 pulso de reloj = 1us = 0.000001
Tretardo = (3)*(0.000001)*(16*96*112)
Tretardo = 0.516096 seg aprox
TECNICOS INDUSTRIALES - ELECTRÓNICA ING. WESTER PANIURA
2
MICROCONTROLADORES
Nota: En la formula aplicada no se considera el retardo en las instrucciones DECFSZ del
2do y 3er bucle y las instrucciones MOVLW Y MOVWF
TECNICOS INDUSTRIALES - ELECTRÓNICA ING. WESTER PANIURA
3
MICROCONTROLADORES
;**********************************************************************
;PROGRAMA DE ENCENDIDO DE LEDS DE DERECHA A IZQUIERDA Y VICEVERSA POR
;EL PUERTO PB USANDO UN RETARDO de 0.5seg PARA APRECIAR LA SECUENCIA
;**********************************************************************
PROCESSOR 16F877A
; PIC16F877A Configuration Bit Settings
; Assembly source line config statements
; CONFIG
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = ON ; Power-up Timer Enable bit (PWRT enabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = ON ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit
;(RB3/PGM pin has PGM function; low-voltage programming enabled)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
;protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all program
;memory may be written to by EECON control)
CONFIG CP = ON ; Flash Program Memory Code Protection bit (All program memory code-
;protected)
// config statements should precede project file includes.
#include <[Link]>
CONTAD1 EQU 20h ; creo variable CONTAD1 en la direccion 20H de la RAM
CONTAD2 EQU 21h ; creo variable CONTAD2 en la direccion 21H de la RAM
CONTAD3 EQU 22h ; creo variable CONTAD3 en la direccion 22H de la RAM
;---------------------------------------------------------------------
PSECT principal, class=code, delta=2, abs
ORG 0 ; posiciono en direccion de programa 00h
GOTO INICIO ; salto a etiqueta INICIO
ORG 5 ; posiciono en direccion de programa 05h
INICIO:
BSF STATUS,0X5 ; pongo a 1 el bit RP0 del STATUS para ir al banco 1
CLRF TRISB ; pongo a cero el valor del registro TRISB sean de salida
BCF STATUS,0X5 ; pongo a 0 el bit RP0 del STATUS para ir al banco 0
CLRF PORTB ; pongo a cero el valor del PORTB
IZQUIERDA:
BSF STATUS,0X0 ; poner a 1 el bit CARRY del STATUS
RLF PORTB,F ; desplaza a la izquierda el PORTB, F=1 guardar en PORTB
CALL RETARDO ; llamo rutina RETARDO
BTFSS PORTB,7 ; senso el bit 7 del PORTB y salto si es 1
GOTO IZQUIERDA ; si es 0 el bit 7 del PORTB, salto a IZQUIERDA para seguir desplazando
MOVLW 0 ; si es 1 el bit 7 del PORTB, cargo W = 0
MOVWF PORTB ; cargo el PORTB con el valor de W=0
DERECHA:
BSF STATUS,0X0 ; poner a 1 el bit CARRY del STATUS
RRF PORTB,F ; desplaza a la derecha el PORTB, F=1 guardar en PORTB
CALL RETARDO ; llamo rutina RETARDO
BTFSS PORTB,0 ; senso el bit 0 del PORTB y salto si es 1
GOTO DERECHA ; si es 0 el bit 0 del PORTB, salto a DERECHA para seguir desplazando
MOVLW 0 ; si es 1 el bit 0 del PORTB, cargo W = 0
MOVWF PORTB ; cargo el PORTB con el valor de W=0
GOTO IZQUIERDA ; salto a IZQUIERDA para empezar de nuevo
;**********************************************************************
; RUTINA DE RETARDO
;**********************************************************************
TECNICOS INDUSTRIALES - ELECTRÓNICA ING. WESTER PANIURA
4
MICROCONTROLADORES
RETARDO:
MOVLW 70h ; cargo W con el valor 70H = 112
MOVWF CONTAD3 ; cargo la variable CONTAD3 con el valor almacenado en W
BUCLE3:
MOVLW 60h ; cargo W con el valor 60H = 96
MOVWF CONTAD2 ; cargo la variable CONTAD2 con el valor almacenado en W
BUCLE2:
MOVLW 10h ; cargo W con el valor 10H = 16
MOVWF CONTAD1 ; cargo la variable CONTAD1 con el valor almacenado en W
BUCLE1:
DECFSZ CONTAD1,1 ; decrementa CONTAD1 y salta si es cero, 1 almacenar en CONTAD1
GOTO BUCLE1 ; salto a BUCLE1
DECFSZ CONTAD2,1 ; decrementa CONTAD2 y salta si es cero, 1 almacenar en CONTAD2
GOTO BUCLE2 ; salto a BUCLE2
DECFSZ CONTAD3,1 ; decrementa CONTAD3 y salta si es cero, 1 almacenar en CONTAD3
GOTO BUCLE3 ; salto a BUCLE3
RETURN ; retorno de la subrutina RETARDO
END
TECNICOS INDUSTRIALES - ELECTRÓNICA ING. WESTER PANIURA
5