You are on page 1of 3

;LEDS

;VERSION 1.0
;PIC16F877A
;4MHZ
;FECHA 30/10/2018
;ENCENDIDO DE LEDS
#include "p16f877a.inc"

; CONFIG
; __config 0xFD32
__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_ON & _BOREN_OFF & _LVP_OFF & _CPD_OFF &
_WRT_256 & _CP_OFF
CONT EQU 0X23 ;FICHERO CONT MEMORIA 23
DEM1 EQU 0X20 ;FICHERO DEM1,DEM2,DEM3 PARA EL RELOJ
DE UN SEGUNDO
DEM2 EQU 0X21
DEM3 EQU 0X22
ORG 0 ;COMIENZA EL REINICIO
CLRF CONT ;LIMPIA EL CONT
BCF STATUS,RP0 ;NOS VAMOS AL BANK 0 CON CERO EN RP0
Y RP1
BCF STATUS,RP1
CLRF PORTB ;LIMPIAMOS EL PUERTO A,B,D
CLRF PORTA
CLRF PORTD
BSF STATUS,RP0 ;NOS VAMOS AL BANK 1 CON UNO EN RP0 Y
CERO EN RP1
CLRF TRISB ;SALIDAS EN EL PUERTO B
MOVLW B'00000111' ;ENVIAMOS UN 6 AL ADCON1 PARA QUE EL
PUERTO A TENGA SOLO ENTRADAS Y SALIDAS DIGITALES
MOVWF ADCON1
MOVLW B'00000001' ;UNA ENTRADA EN A0 EL RESTO SALIDAS
MOVWF TRISA
MOVLW B'00000000' ;TODAS SALIDAS EN EL PUERTO B
MOVWF TRISB
MOVLW B'00000111' ;DOS ENTRADAS EN EL PUERTO D EL RESTO
SALIDAS
MOVWF TRISD
CLRW ;LIMPIAMOS EL WORKING PORQUE ESTA GRABADO
CON EL ANTERIOR Y PUEDE MODIFICAR EL MAIN
BCF STATUS,RP0 ;CAMBIAMOS AL BANCO 0

MAIN BTFSS PORTD,2 ;SI EN LA ENTRADA D2 HAY CERO CAMBIA


A LA PROGRMACION DE BINARIO Y UNO EN DECIMAL
GOTO BIN2
GOTO MAIN2

MAIN2 BTFSS PORTA,0 ;SI HAY UN 1 EN A0 SALTA Y COMIENZA EL


PROGRAMA
GOTO MAIN ;REPITE LA SECUENCIA
MOVFW CONT ;LOS DATOS DEL FICHERO AL WORKING
CALL TABLA1 ; DAMOS LOS VALORES DE LOS LEDS
MOVWF PORTD ;ENVIAMOS AL PUERTO D DONDE ESTAN LOS
LEDS
CLRW ;LIMPIAMOS EL WORKING PORQUE ESTA GRABADO
LOS DATOS DEL PUERTO D
ADDWF CONT,W ;SUMAMOS AL CONT EL WORKING PARA QUE TENGA
LOS DATOS DEL CONT
CALL TABLA2 ;DAMOS LOS VALORES DEL DISPLAY
MOVWF PORTB ;ENVIAMOS AL PUERTO D DONDE ESTA EL
DISPLAY
INCF CONT ;INCREMENTAMOS EL CONT PARA SIGA LA
SIGUIENTE
CALL INICIO ;LE DAMOS UN SEGUNDO
BTFSS CONT,2 ;PREGUNTAMOS SI EL CONT LLEGO A 4 PARA QUE
REINICIE
GOTO MAIN
CLRF CONT ;LIMPIAMOS EL CONT PARA QUE COMIENZE
DE NUEVO
GOTO MAIN

TABLA1 ADDWF PCL ;VALORES DE LEDS


RETLW B'10000000' ;1
RETLW B'01000000' ;2
RETLW B'00100000' ;3
RETLW B'00010000' ;4

TABLA2 ADDWF PCL ;VALORES DEL DISPLAY


RETLW B'00000110' ;1
RETLW B'01011011' ;2
RETLW B'01001111' ;3
RETLW B'01100110' ;4

INICIO CLRF DEM1 ;TIEMPO DE UN SEGUNDO


CLRF DEM2
CLRF DEM3
MOVLW D'175'
MOVWF DEM1
MOVLW D'19'
MOVWF DEM2
MOVLW D'6'
MOVWF DEM3
DECREMENTO DECFSZ DEM1,F
GOTO DECREMENTO
DECFSZ DEM2,F
GOTO DECREMENTO
DECFSZ DEM3,F
GOTO DECREMENTO
NOP
RETURN

BIN BTFSC PORTD,2 ;SI EN LA ENTRADA D2 HAY CERO CAMBIA


A LA PROGRMACION DE BINARIO Y UNO EN DECIMAL
GOTO MAIN3
GOTO BIN2

BIN2 BTFSS PORTA,0 ;SI HAY UN 1 EN A0 SALTA Y COMIENZA EL


PROGRAMA
GOTO BIN2 ;REPITE LA SECUENCIA
MOVFW CONT ;LOS DATOS DEL FICHERO AL WORKING
CALL TABLAA ; DAMOS LOS VALORES DE LOS LEDS
MOVWF PORTD ;ENVIAMOS AL PUERTO D DONDE ESTAN LOS
LEDS
CLRW ;LIMPIAMOS EL WORKING PORQUE ESTA GRABADO
LOS DATOS DEL PUERTO D
ADDWF CONT,W ;SUMAMOS AL CONT EL WORKING PARA QUE TENGA
LOS DATOS DEL CONT
CALL TABLAB ;DAMOS LOS VALORES DEL DISPLAY
MOVWF PORTB ;ENVIAMOS AL PUERTO D DONDE ESTA EL
DISPLAY
INCF CONT ;INCREMENTAMOS EL CONT PARA SIGA LA
SIGUIENTE
CALL INICIO ;LE DAMOS UN SEGUNDO
BTFSS CONT,4 ;PREGUNTAMOS SI EL CONT LLEGO A 4 PARA QUE
REINICIE
GOTO BIN
CLRF CONT ;LIMPIAMOS EL CONT PARA QUE COMIENZE
DE NUEVO
GOTO BIN

TABLAA ADDWF PCL ;VALORES DEL LEDS


RETLW B'00010000' ;1
RETLW B'00100000' ;2
RETLW B'00110000' ;3
RETLW B'01000000' ;4
RETLW B'01010000' ;5
RETLW B'01100000' ;6
RETLW B'01110000' ;7
RETLW B'10000000' ;8
RETLW B'10010000' ;9
RETLW B'10100000' ;10
RETLW B'10110000' ;11
RETLW B'11000000' ;12
RETLW B'11010000' ;13
RETLW B'11100000' ;14
RETLW B'11110000' ;15

TABLAB ADDWF PCL ;VALORES DEL DISPLAY


RETLW B'00000110' ;1
RETLW B'01011011' ;2
RETLW B'01001111' ;3
RETLW B'01100110' ;4
RETLW B'01101101' ;5
RETLW B'01111101' ;6
RETLW B'00000111' ;7
RETLW B'01111111' ;8
RETLW B'11101111' ;9
RETLW B'11110111' ;A
RETLW B'11111100' ;B
RETLW B'00111001' ;C
RETLW B'11011110' ;D
RETLW B'11111001' ;E
RETLW B'01110001' ;F

MAIN3 CLRW
CLRF CONT
GOTO MAIN

END

You might also like