list p=16F877A
#include p16F877A.inc
;Entradas en el PORTA
ST equ 0x00 ;Pulsador START
P1T equ 0x01 ;Pulsador de movimiento de Izquierda
P2T equ 0x02 ;Pulsador de Movimiento Derecha
P3T equ 0x03 ;Pulsador de Incremento de Valor
P4T equ 0x04 ;Pulsador de Decremento de Valor
;PORTC: S1 S0 EQ11 EQ10 X X X X
;Entradas en el PORTC
EQ10 equ 0x04 ;Pin ACTIVAR DIGITO UNIDAD EQ1
EQ11 equ 0x05 ;Pin ACTIVAR DIGITO DECENA EQ1
S_0 equ 0x06 ;Pin ACTIVAR DIGITO UNIDAD SEGUNDO
S_1 equ 0x07 ;Pin ACTIVAR DIGITO DECENA SEGUNDO
;PORTD: X EQ2 EQ1
;Entradas en el PORTD
EQ1 equ 0x00 ;Pin de ENTRADA de GOLES EQ1
EQ2 equ 0x01 ;Pin de ENTRADA de GOLES EQ2
;PORTE: T H0 M1 M0 EQ21 EQ20 X X
;Salidas en el PORTD
EQ20 equ 0x02 ;Pin ACTIVAR DIGITO UNIDAD EQ2
EQ21 equ 0x03 ;Pin ACTIVAR DIGITO DECENA EQ2
M_0 equ 0x04 ;Pin ACTIVAR DIGITO UNIDAD MINUTO
M_1 equ 0x05 ;Pin ACTIVAR DIGITO DECENA MINUTO
H_0 equ 0x06 ;Pin ACTIVAR DIGITO HORA
TT equ 0x07 ;Pin ACTIVAR TIEMPO DE JUEGO
;BITS de TIN Registro para el Control de Flancos cuando se esta jugando
EQ1T equ 0x00 ;Bit de Entrada de EQ1
EQ2T equ 0x01 ;Bit de Entrada de EQ2
STT equ 0x02 ;Bit de Entrada del PULSADOR START
EST equ 0x20 ;Registro que Indica que Rutina debe ser LLAMADA
SEL equ 0x21 ;Registro de Seleccion de Digito de Display a modificar
SED equ 0x22 ;Registro de Seleccion de Display a encender
HT0 equ 0x2A ;GUARDA la HORA INGRESADA
MT1 equ 0x2B ;GUARDA la DECENA MINUTO INGRESADO
MT0 equ 0x2C ;GUARDA la UNIDAD MINUTO INGRESADO
T equ 0x30 ;Registro del Tiempo de Juego
H0 equ 0x31 ;Hora en el DISPLAY
M1 equ 0x32 ;Decena Minuto en el DISPLAY
M0 equ 0x33 ;Unidad Minuto en el DISPLAY
S1 equ 0x34 ;Decena Segundo en el DISPLAY
S0 equ 0x35 ;Unidad Segundo en el DISPLAY
CEQ11 equ 0x36 ;Decena de Contador de GOLES de EQ1 en el DISPLAY CEQ10 equ 0x37 ;Unidad de Contador de GOLES de EQ1 en el DISPLAY
CEQ21 equ 0x38 ;Decena de Contador de GOLES de EQ2 en el DISPLAY
CEQ20 equ 0x39 ;Unidad de Contador de GOLES de EQ2 en el DISPLAY
TEMP equ 0x40
TIN equ 0x41 ;Registro de Control de Flanco de Señales de Entrada cont equ 0x44 ;Contador de NUMERO de VECES de DESBORDE del TIMER1
org 0x00
goto inicio
org 0x05
tabla
;_ABCDEFG
addwf PCL,f
retlw b'01111110' ;0
retlw b'00110000' ;1
retlw b'01101101' ;2
retlw b'01111001' ;3
retlw b'00110011' ;4
retlw b'01011011' ;5
retlw b'01011111' ;6
retlw b'01110000' ;7
retlw b'01111111' ;8
retlw b'01111011' ;9
retlw b'01101111' ;A
retlw b'00011111' ;B
retlw b'01001110' ;C
retlw b'00111101' ;D
retlw b'01001111' ;E
retlw b'01000111' ;F
inicio
bcf STATUS,RP1
bsf STATUS,RP0 ;Banco 1
movlw b'00000110'
movwf ADCON1
movlw b'11111111'
movwf TRISA
clrf TRISB ;Configuro el PORTB como salida para los displays 7 segmentos
;PORTC: S1 S0 EQ11 EQ10 P4 P3 P2 P1
movlw b'00001111'
movwf TRISC
;PORTD: T H0 M1 M0 EQ21 EQ20 EQ2 EQ1
movlw b'00000011'
movlw b'00000000'
movwf TRISD
movlw b'00000111'
movwf TRISE
;Retardo = 4*Tosc*Preescaler*256
movlw b'00000101' ;Configuro el OPTION_REG para utilizar el TIMER0
movlw b'00000000' ;Configuro el OPTION_REG para utilizar el TIMER0
movwf OPTION_REG ;x, x, Reloj Interno, x, Prescaler para TMR0, Preescaler - 64
;Se tiene un desborde cada 16.384ms bcf STATUS,RP0 ;Banco 0
;Retardo = 4*Tosc*Preescaler*(655536-TMR1)
movlw b'00001000'
movwf T1CON
;Retardo 65.536ms
clrf PORTB
movlw b'11110000'
movlw b'00000000'
movwf PORTC
movlw b'11111111'
movlw b'00000000'
movwf PORTD
clrf EST
clrf TMR0
clrf TMR1H
clrf TMR1L
bsf T1CON, TMR1ON
movlw b'11111111'
movwf PORTE
movwf PORTA
goto bucle
bucle
movf EST, w ;Reviso si EST = 0 --> Se debe realizar la entrada del tiempo de JUEGO
btfsc STATUS, Z
call ingresotiempo ;Rutina pediente de la modificacion de los valores de los digitos del tiempo
movlw 0x01
xorwf EST,w ;Reviso si EST = 1 --> Se debe temporizar el PRIMER TIEMPO
btfsc STATUS, Z
call tempo1p ;Rutina para realizar la temporizacion de primer tiempo y el ingreso de goles
movlw 0x02
xorwf EST,w ;Reviso si EST = 2 --> Se debe temporizar el DESCANSO
btfsc STATUS, Z
call tempod ;Rutina para realizar la temporizacion del descanso y de la anulacion del mismo
movlw 0x03
xorwf EST,w ;Reviso si EST = 3 --> Se debe temporizar el SEGUNDO TIEMPO
btfsc STATUS, Z
call tempo2p ;Rutina para temporizar el segundo tiempo y el ingreso de goles de los equipos
movlw 0x04
xorwf EST,w ;Reviso si EST = 4 --> Se espera que se oprime el boton de ST para iniciar denuevo la secuencia
btfsc STATUS, Z
call detener call displays
goto bucle
#include ingreso.inc
end