Вы находитесь на странице: 1из 13

Introducción

En esta práctica se llevar a cabo una secuencia de prendido de manera consecutiva 8 leds por los
puertos RBO al RB7, después de prender 8 leds de manera consecutiva con un retardo de 500 ms,
estos volverán aprender de manera descendente con el mismo retardo establecido

Objetivos

 Poder generar un programa que ejecute un retardo de 500 ms entre cada pulso de cada
led.
 Cargar y hacer funcionar la programación generada.
 Poder visualizar con ayuda del osciloscopio el retardo por lo menos entre dos leds.

Marco teórico

Osciloscopio

Un osciloscopio es un instrumento de medición para la electrónica. Representa una gráfica de


amplitud en el eje vertical y tiempo en el eje horizontal, el osciloscopio presenta los valores de las
señales eléctricas en forma de coordenadas en una pantalla, en la que normalmente el eje X
(horizontal) representa tiempos y el eje Y (vertical) representa tensiones. La imagen así obtenida
se denomina oscilograma.

PIC16F887 (Características Básicas)

 arquitectura RISC
 El microcontrolador cuenta con solo 35 instrucciones diferentes
 Todas las instrucciones son uni-ciclo excepto por las de ramificación
 Frecuencia de operación 0-20 MHz
 Oscilador interno de alta precisión
 Calibrado de fábrica
 Rango de frecuencia de 8MHz a 31KHz seleccionado por software
 Voltaje de la fuente de alimentación de 2.0V a 5.5V
 Consumo: 220uA (2.0V, 4MHz), 11uA (2.0 V, 32 KHz) 50nA (en modo de espera)
 Ahorro de energía en el Modo de suspensión
 Brown-out Reset (BOR) con opción para controlar por software
 35 pines de entrada/salida
 alta corriente de fuente y de drenador para manejo de LED
 resistencias pull-up programables individualmente por software
 interrupción al cambiar el estado del pin
 memoria ROM de 8K con tecnología FLASH
 El chip se puede re-programar hasta 100.000 veces
 Opción de programación serial en el circuito
 El chip se puede programar incluso incorporado en el dispositivo destino.
 256 bytes de memoria EEPROM
 Los datos se pueden grabar más de 1.000.000 veces
 368 bytes de memoria RAM
 Convertidor A/D:
 14 canales
 resolución de 10 bits
 3 temporizadores/contadores independientes
 Temporizador perro guardián
 Módulo comparador analógico con
 Dos comparadores analógicos
 Referencia de voltaje fija (0.6V)
 Referencia de voltaje programable en el chip
 Módulo PWM incorporado
 Módulo USART mejorado
 Soporta las comunicaciones seriales RS-485, RS-232 y LIN2.0
 Auto detección de baudios
 Puerto Serie Síncrono Maestro (MSSP)
 Soporta los modos SPI e I2C
Sistema mínimo:

Un sistema mínimo es la expresión mínima de circuitería necesaria para "Hechar a andar" un


microcontrolador o microprocesador. En lo general, el sistema mínimo depende de las
características del microcontrolador, familia lógica, marca, etc...

Diagrama eléctrico:
Diagrama de flujo
Inicialización

MOVLW 0X00
Colocamos variables en RAM “Z1” MOVFW TrisB

Banco 3 “Movernos”
Banco 0 “Z1” BCF, RP0, BCF, RP1

MOVLW 0X00
Banco 1 “Z1” BSF, RP0, BCF, RP1
MOVFW ANSELH

Banco 3 “Z1” BSF, RP0, BCF, RP1 Banco 0 “movernos”

Limpiar PortB
ORG 0X00 (Reinicio del pic)
Limpiar TMR0

MOVLW 0XF0
MOVFW TMR0
INICIO

MOVLW 0XA0
MOVFW INTCON

Banco 1 “movernos”

Limpiamos variables “Z1”

MOVLW 0X47
MOVWF OPTION_RES
Main

MOVLW 0X10
MOVLW 0X20 MOVFW PORTB
MOVFW PORTB

Subrutina TMR0

Subrutina TMR0

MOVLW 0X20
MOVLW 0X02 MOVFW PORTB
MOVFW PORTB

Subrutina TMR0

Subrutina TMR0

MOVLW 0X40
MOVFW PORTB
MOVLW 0X04
MOVFW PORTB

MOVLW 0X80
Subrutina TMR0 MOVFW PORTB

Regreso
MOVLW 0X08
MOVFW PORTB

Subrutina TMR0
Programación
;EQUIPO 2
;INTERMITENCIA DE LEDS
;FECHA: 25-09-2018 HORA:00:54
;INTERMITENCIA DE LEDS DE LA SIGUIENTE MANERA:1,2,3,4,5,6,7,8. Y
POSTERIORMENTE DE MANERA ACENDENTE CON DELAY DE 500MS.
;CORRECCIONES POSTERIORES A LA ELABORACION DEL PROGRAMA

LIST P=16F887 ;DETERMINAMOS AL PROGRAMA QUE PROCESADOR UTILIZAREMOS


#INCLUDE <P16F887.INC> ;DETERMINAMOS EL PIC QUE UTILIZAREMOS

__CONFIG _CONFIG1, _WDT_OFF & _CP_OFF &_BOR_OFF & _LVP_OFF & _XT_OSC &
_MCLRE_ON & _CPD_OFF & _BOR_OFF & _PWRTE_OFF

;INICIALIZACION
;---------------------------------------------------------
CBLOCK 0X20 ;COLOCAMOS LAS VARIABLES EN RAM
Z1
ENDC ;TERMINAMOS EL CBLOCK

BANK0 MACRO ;NOMBRE SIMBOLICO PARA UNA O MAS SENTENCIAS


BCF STATUS,RP0 ;SON UTILIZADOS PARA EVITAR ACCIONES REPETITIVAS.
BCF STATUS,RP1
ENDM
BANK1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM

BANK3 MACRO
BSF STATUS,RP0
BSF STATUS,RP1
ENDM

ORG 0X00 ;REINCIO DEL PIC


GOTO INICIO
ORG 0X05
GOTO INTERRUPCION

INICIO

BANK1 ;SALTO AL BANCO 1


MOVLW 0X47 ;SE CARGO CON UN 71 DECIMAL, UN 1000111 EN BINARIO PARA
UN ESCALAMIENTO DE 1 A 256
MOVWF OPTION_REG
MOVLW 0X00 ;CARGAMOS 0 PARA ENTRADA
MOVWF TRISB
BANK3
MOVLW 0X00 ;PARA ENTRADA
MOVWF ANSELH
BANK0 ;SALTO AL BANCO 0
CLRF PORTB
CLRF TMR0
MOVLW 0XF0 ;CARGAMOS CON 240 LA MEMORIA DE TRABAJO
MOVWF TMR0 ; SE CARGO EL 240 AL TIMER0
MOVLW 0XA0 ; SE CARGO 160
MOVWF INTCON ;ACTIVO INTERRUPCIONES 11110000
CLRF Z1
CLRW

;SECUENCIA DE NUESTROS LEDS 1,3,5,7,2,4,6,8.


;INICIO DEL PROGRAMA
;------------------------------------------------------
MAIN MOVLW 0X01 ;LED 1 GUARDAMOS EL VALOR EN W
MOVWF PORTB ;MOVEMOS DE W A F PARA ACCIONAR
CALL TIMER0 ;COMO ASIGNAMOS LOS VALORES DE 50MS
CALL TIMER0 ;LO REPETIMOS 6 VECES PARA SUMAR UN TOTAL DE 500MS
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X02 ;LED2


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X04 ;LE3


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X08 ;LED4


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X10 ;LED5


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X20 ;LED6


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X40 ;LED7


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X80 ;LED8


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
MOVLW 0X80 ;LED8 DE REGRESO---------------------------------------
-------
MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X40 ;LED7


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X20 ;LED6


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X10 ;LED5


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X08 ;LED4


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X04 ;LED3


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X02 ;LED2


MOVWF PORTB
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

MOVLW 0X01 ;LED 1 GUARDAMOS EL VALOR EN W


MOVWF PORTB ;MOVEMOS DE W A F PARA ACCIONAR
CALL TIMER0 ;COMO ASIGNAMOS LOS VALORES DE 50MS
CALL TIMER0 ;LO REPETIMOS 6 VECES PARA SUMAR UN TOTAL DE 500MS
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0
CALL TIMER0

GOTO MAIN ;LA FUNCION GOTO SE TRADUCE COMO VE A, EN ESTE CASO LA


REDIRECCIONAMOS A ETIQUETA MAIN
;YA QUE SIEMPRE SE DEBE DIRECCIONAR AL FINAL DEL
PROGRAMA A SU INICIO.

;CREAMOS EL RETARDO CON TIMER0


INTERRUPCION ;REALIZAMOS LA INTERRUPCION PARA
MOVLW 0X08 ;CARGAMOS 8
MOVWF Z1
;REALIZAMOS EL CONTEO
DECFSZ Z1
GOTO $-1
NOP
MOVLW 0X01 ;CONFIGURACIONES DE LA MEMORIA
MOVWF Z1
MOVLW 0X47
MOVWF OPTION_REG ;CONFIGURACIONES DELOPTIONREG
MOVLW 0XA0
MOVWF INTCON ;CONFIGURACIONES DEL INTCON
CLRF TMR0 ;LIMPIAMOS EL TIMER 0
MOVLW D'61' ;50 MS
MOVWF TMR0
RETFIE
TIMER0
BTFSS Z1,0 ;VERIFICAMOS QUE Z1 TENGA UN 1 Y SI VALE UNO SALTA A
CLRF MEMO
GOTO TIMER0
CLRF Z1
RETURN

END

Resultados

En esta grafica podemos observar como en el led del PORTB5 llega hasta un valor de
máximo casi 5v al prender el LED, en la primera parte del programa, es una gráfica del tipo
cuadrática con flanco ascendente, como podemos ver el tiempo se cumple son los 500 mls
que se tienen programados entre cada LED. Esto es un gráfico por el canal uno.
Esta grafica nos muestra el pulso del PORTB6 el cual también tiene un flanco ascendente,
su punto máximo también está un poco debajo de los 5v, esto de acuerdo al tipo de LED
que se utilicen. El pulso es correcto dura los 500 mls que se programó.

Resultado: como resultado general podemos decir que el programa está cumpliendo con
su propósito que es generar un retardo de 500 mls entre cada pulso positivo de cada LED,
sin embargo esta incorrecto el propósito de este programa es utilizar el timer0 de forma
que la ALU no trabaje en exceso como ahora.
Conclusión:
Este programa nos ayudó mucho para poder entender el funcionamiento del timer0,
aunque es erróneo el programa hace reforzar la parte del timer0 y el prescalamiento para
en la siguiente practica poder hacer que el tiempo de retardo sea de una rutina correcta.

Вам также может понравиться