List p=16F84
include "P16F84.INC"
Unidad equ 0x0C ; Guardamos conteo unidad
Decena equ 0x0D ;
Centena equ 0x0E ;
Contador equ d'4'
CONT equ 0x13
MuestroU equ 2 ; Para control del 1º Display
MuestroD equ 1 ; Para control del 2º Display
MuestroC equ 0 ; Para control del 3º Display
org 0x00
goto Init
org 0x04
goto Rsi
org 0x05
BCD7SEG addwf PCL,1 ; Se incrementa el contador del programa.-
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F
return
Init bsf STATUS,RP0
movlw b'00000111'
movwf OPTION_REG
movlw .20
movwf CONT
bcf STATUS,RP0
movlw .61
movwf TMR0
movlw b'10100000'
movwf INTCON
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
clrf TRISA ; PORTA como salida
clrf TRISB ; PORTB como salida.-
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
clrf PORTA ; Desactivo todos los Displays
clrf Unidad ; Comienza en cero --> 0 0 0.-
clrf Decena
clrf Centena
Main call RetRsi_2
goto Visualizar
RetRsi_2 movlw .61
movwf TMR0
bcf INTCON,T0IF
return
Unidades incf Unidad,1 ; Incremeto Unidad.
movlw d'10' ; Si es 10 reseteo e incremento Decena
subwf Unidad,0 ;
btfss STATUS,Z ;
goto Main ; no es 10
clrf Unidad ; Si, reseteo.-
incf Decena,1 ; Incremento Decena.-
movlw d'10' ; Si Decena = 10, reseteo e incremento Centena
subwf Decena,0 ;
btfss STATUS,Z ;
goto Main ; No es 10.-
clrf Decena ; Si, reseteo.-
incf Centena,1 ; Incremento Centena.-
movlw d'6' ; Si es 6 Reseteo.-
subwf Centena,0
btfss STATUS,Z
goto Main ; No es 6.-
clrf Centena ; Si, reseto
end
Visualizar movfw Unidad ; Obtengo codigo de 7 Segmentos para Unidad.-
call BCD7SEG ;
bcf PORTA,MuestroC ; Apago Display de Centena, Se entiende al mirar rutina.-
movwf PORTB ; Cargo unidad en PORTB.-
bsf PORTA,MuestroU ; Enciendo Display de Unidad.-
movfw Decena ; Obtengo codigo 7 Segmentos para Decena.-
call BCD7SEG
bcf PORTA,MuestroU ; Apago Display de Unidad.-
movwf PORTB ; Cargo PORTB con Decena.-
bsf PORTA,MuestroD ; Enciendo Display de Decena.-
movfw Centena ; Obtengo codigo de 7 Segmentos para Centena.-
call BCD7SEG
bcf PORTA,MuestroD ; Apago Display de Decena.-
movwf PORTB ; Cargo PORTB con Centena.-
bsf PORTA,MuestroC ; Enciendo Display Centena.-
decfsz Contador,1 ; Pregunto si ya se ha repetido 10 veces el ciclo?
goto Visualizar ; No, repito.-
Rsi decfsz CONT
goto RetRsi
goto Unidades
retfie
RetRsi movlw .61
movwf TMR0
bcf INTCON,T0IF
retfie