You are on page 1of 3

PROCESSOR P16F887

INCLUDE <P16F887.INC>

__CONFIG _CONFIG1, (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &


_MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF &
_DEBUG_OFF)
__CONFIG _CONFIG2, (_WRT_OFF & _BOR40V)

PDEL0 EQU 0x21


PDEL1 EQU 0x22
DECENAS EQU 0x23
UNIDADES EQU 0x24
CENTENAS EQU 0x25
UMIL EQU 0x26

ORG 0x00

BANKSEL ANSEL ;paso al banco 3


CLRF ANSEL
CLRF ANSELH
BANKSEL TRISA
MOVLW B'01111100' ; CONFIGURACION DEL OSCILADOR A 8 MHZ
MOVWF OSCCON ; REGISTRO INTERNO DEL OSCILADOR
MOVLW B'00000000' ; MUESTRA LOS SEGMENTOS DEL DISPLAY
MOVWF TRISB ; PUERTO B SALIDA
MOVLW B'00000000'
MOVWF TRISC ; PUERTO C SALIDA
BANKSEL PORTA

; LIMPIA LOS REGISTROS

CLRF PORTB
CLRF PORTC
CLRF UMIL
CLRF CENTENAS
CLRF DECENAS
CLRF UNIDADES

C_P1
CALL VER
INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSS STATUS,Z
GOTO C_P1

CLRF UNIDADES
INCF DECENAS,F
MOVLW .10
XORWF DECENAS,W
BTFSS STATUS,Z
GOTO C_P1

CLRF DECENAS
INCF CENTENAS,F
MOVLW .10
XORWF CENTENAS,W
BTFSS STATUS,Z
GOTO C_P1
CLRF CENTENAS
INCF UMIL,F
MOVLW .10
XORWF UMIL,W
BTFSS STATUS,Z
GOTO C_P1

CLRF UMIL
GOTO C_P1

VER CALL MOSTRAR


CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR ;LOGRO UN RETARDO DE 160ms

RETURN

MOSTRAR CLRF PORTC


MOVF UNIDADES,W ; CARGA EL VALOR DE LAS UNIDADES
CALL TABLA
BSF PORTC,0 ; ACTIVA EL DISPLAY UNIDAD
MOVWF PORTB
CALL RET_10MS
BCF PORTC,0 ; BORRA EL REGISTRO DE UNIDAD
MOVF DECENAS,W ; CARGA EL VALOR DE LAS DECENAS
CALL TABLA
BSF PORTC,1 ; ACTIVA EL DISPLAY DECENAS
MOVWF PORTB
CALL RET_10MS
BCF PORTC,1 ; BORRA EL REGISTRO DE DECENAS
MOVF CENTENAS,W ; CARGA EL VALOR DE LAS CENTENAS
CALL TABLA
BSF PORTC,2 ; ACTIVA EL DISPLAY CENTENAS
MOVWF PORTB
CALL RET_10MS
BCF PORTC,2 ; BORRA EL REGISTRO DE CENTENAS
MOVF UMIL,W ; CARGA EL VALOR DE LOS MILLARES
CALL TABLA
MOVWF PORTB
BSF PORTC,3 ; ACTIVA EL DISPLAY MILLARES
CALL RET_10MS
BCF PORTC,3 ; BORRA EL REGISTRO DE MILLARES
RETURN

TABLA ADDWF PCL,F


RETLW B'00111111' ; VALOR 0
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111101'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01100111'

RET_10MS
MOVLW .8 ; 1 set number of repetitions (B)
MOVWF PDEL0 ; |1
PLOOP1 MOVLW .249 ; 1
set number of repetitions (A)
MOVWF PDEL1 ; |1
PLOOP2 CLRWDT ; 1
clear watchdog
CLRWDT ; 1
cycle delay
DECFSZ PDEL1,1 ; 1 + (1) is the time over? (A)
GOTO PLOOP2 ; 2 no, loop
DECFSZ PDEL0,1 ; 1 + (1) is the time over? (B)
GOTO PLOOP1 ; 2 no, loop
PDELL1 GOTO PDELL2 ; 2 cycles delay
PDELL2 CLRWDT ; 1 cycle delay
RETURN ; 2+2 Done

END

You might also like