viernes, 25 de abril de 2014

ENCENDIDO CONSECUTIVO DE 8 LEDS

INFORME DE LABORATORIO 2
ENCENDIDO CONSECUTIVO DE 8 LEDS 


INTEGRANTES :   - ANDRES FELIPE LEON SALDAÑA        19266
                               - EDWIN RICARDO QUINTERO LEON      19251  
 


FOTOS AVALADAS POR EL DOCENTE










DESCRIPCIÓN DEL CASO  

Se requiere encender 8 leds de forma consecutiva y que el ciclo en total dure 44,4 HZ  o 1,44 Segundos, esto equivale a 5,55 HZ o cada 0.18 Segundos por led.
La oscilación debe ser producida por un  micro controlador PIC16F877A, el cual sera programado en un lenguaje de programación de bajo nivel, en nuestro caso usamos lenguaje ensamblador o mejor conocido como assembler, adicionalmente a esta instrucción principal, el programa deberá reiniciarse con un pulsador.

ANÁLISIS DE DISEÑO CON DEFINICIÓN DE MATERIALES Y RECURSOS PARA DARLE SOLUCIÓN AL CASO

Como primera medida en necesario saber y aplicar los pasos a seguir para poder construir y quemar el programa en nuestro micro controlador, estos se resumen en 4 importantes pasos:

1) Idea o caso problema: 

Se desea encender 8 leds consecutivamente en un ciclo infinito y a una frecuencia que se encuentre en el rango de la vision humana, a su vez este se debe reiniciar cada vez que un pulsador (P1) sea activado.

2) Algoritmo: 

* Encender 8 ledas consecutivamente a una frecuencia constante.
* Al momento en que P1 sea pulsado, el ciclo reiniciara su oscilación.

3) Diagrama de flujo: 



4) Programa o código Assembler

Hay que tener en cuenta que a la hora de construir el código es necesario tener en cuenta que su estructura se basa a partir de 4 importantes partes:

* LIBRERÍAS O HERRAMIENTAS
   (Se escoge el micro controlador que se utilizara)
* CONFIGURACIÓN DEL MICRO CONTROLADOR
* CONFIGURACIÓN DEL LOS PERIFÉRICOS 
    (Se declaran variables)
* PROGRAMA FINAL

Con estos importantes pasos y conociendo el datasheet o comandos del micro controlador es suficiente para construir el código.

#INCLUDE<p16f877A.inc> ; Definición del microcontrolador es decir la librería.

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

CONTA1 EQU 0X20 ; CONTADOR 1. Definición de registros de propósito
CONTA2 EQU 0X21 ; CONTADOR 2.

BSF STATUS,5 ; Se escoge el Banco 1 para programar Puertos.
BCF STATUS,6

CLRF TRISB ; PORT B como salida los 8 leds.
BCF STATUS,5 ; Se escoge el Banco 0 para hacer el juego de luces.
BCF STATUS,6

LUCES

                BCF STATUS,0 ; Se pone cero en el bit de carry.
                MOVLW 0X01 ; Se garantiza el primer led prendido así: 0000 0001
                MOVWF PORTB

IZQ
                CALL TIEMPO ; Se da tiempo para que el led se vea prendido.
                RLF PORTB,1 ; Se rota el PORTB a la izquierda
                BTFSS STATUS,0 ; Se pregunta si ya se roto las 8 veces.
                GOTO IZQ ; Aun no se a rotado las 8 veces a la izquierda.
    GOTO LUCES ; NOTA:Para retornar si se quiere habilitar la derecha colocarle ;(punto y coma al inicio DE GOTO LUCES) y quitarle los punto y coma a las sentencias derecha (DER) y listo
   

;DER
;              CALL TIEMPO ; Se da tiempo para que el led se vea prendido.
;              RRF PORTB,1 ; Se rota el PORTB a la derecha
;              BTFSS STATUS,0 ; Se pregunta si ya se roto las 8 veces.
;              GOTO DER ; Aun no se a rotado las 8 veces a la derecha.
;              GOTO LUCES ; Regresa a prender primer led.

TIEMPO

                MOVLW 0XFF ; Valor con que se carga el contador 1.
                MOVWF CONTA1
                NIVEL1
                MOVLW 0XFF ; Valor con que se carga el contador 2.
                MOVWF CONTA2
                NIVEL2
                DECFSZ CONTA2,1 ; Se resta en 1 el contador 2 y se pregunta si es cero.
                GOTO NIVEL2 ; Aun el contador 2 no es cero.
                DECFSZ CONTA1,1 ; Se resta en 1 el contador 1 y se pregunta si es cero.
                GOTO NIVEL1 ; Aun el contador 1 no es cero.
                RETURN ; Retorna de la subrutina.

END ; Final del programa.

Finalmente se genera el archivo .asm com MPLAB y nos disponemos a quemarlo en el micro controlador con un PICK IT 3