include "p16f84.inc"
list p=16f84
; declaracion de variables en posiciones de memoria
pc equ 02h
status equ 03h
ptoa equ 05h
ptob equ 06h
tecla equ 0ch
loop equ 0ah
loop2 equ 0eh
rota equ 0fh
tecla2 equ 10h
trisa equ 85h
trisb equ 86h
z equ 02h
c equ 00h
w equ 00h
dis1 equ 21h
dis2 equ 22h
dis3 equ 23h
dis4 equ 24h
dis5 equ 25h
dis6 equ 26h
dis7 equ 27h
dis8 equ 28h
aux equ 29h
aux1 equ 2ah
aux2 equ 2bh
aux3 equ 2ch
reset org 0
goto inicio
org 5
;rutina de retardo, tiempo de activacion de los transistores
retardo movlw d'2'
movwf loop
top2 movlw d'100'
movwf loop2
top nop
nop
nop
nop
nop
nop
decfsz loop2
goto top
decfsz loop
goto top2
retlw 0
;rutina de retardo, antirebotes en los pulsadores
retard1 movlw d'250'
movwf loop
to2 movlw d'250'
movwf loop2
to nop
nop
nop
nop
nop
nop
decfsz loop2
goto to
decfsz loop
goto to2
retlw 0
;rutia de retardo, tiempo de apagado del transistores
retard2 movlw d'1'
movwf loop
to3 movlw d'100'
movwf loop2
to4 nop
nop
nop
nop
nop
nop
decfsz loop2
goto to4
decfsz loop
goto to3
retlw 0
;rutina de decremento del reloj del jugador 1
juga1 decfsz tecla
retlw 0
movlw d'46'
movwf tecla
movf dis5,w
xorlw d'0'
btfss status,z
call array
movf dis6,w
xorlw d'0'
btfss status,z
call array1
movf dis7,w
xorlw d'0'
btfss w,z
call array2
movf dis8,w
bcf status,z
xorlw d'0'
btfss status,z
call array3
movlw d'0'
movwf rota
goto pri1
;sub rutinas "arrays", para control de tiempo jugador uno... viene de juga1
array3 movlw d'9'
movwf dis5
movwf dis7
movlw d'5'
movwf dis6
decfsz dis8
goto pri1
goto pri1
array2 movlw d'9'
movwf dis5
movlw d'5'
movwf dis6
decfsz dis7
goto pri1
goto pri1
array1 movlw d'9'
movwf dis5
decfsz dis6
goto pri1
goto pri1
array decfsz dis5
goto pri1
goto pri1
;rutina de decremento del reloj del jugador 2
juga2 decfsz tecla2
retlw 0
movlw d'46'
movwf tecla2
movf dis1,w
xorlw d'0'
btfss status,z
call array4
movf dis2,w
xorlw d'0'
btfss status,z
call array5
movf dis3,w
xorlw d'0'
btfss status,z
call array6
movf dis4,w
bcf status,z
xorlw d'0'
btfss status,z
call array7
movlw d'0'
movwf rota
goto pri1
;sub rutinas "arrays", para control de tiempo jugador dos... viene de juga2
array7 movlw d'9'
movwf dis3
movwf dis1
movlw d'5'
movwf dis2
decfsz dis4
goto pri1
goto pri1
array6 movlw d'9'
movwf dis1
movlw d'5'
movwf dis2
decfsz dis3
goto pri1
goto pri1
array5 movlw d'9'
movwf dis1
decfsz dis2
goto pri1
goto pri1
array4 decfsz dis1
goto pri1
goto pri1
cargar movlw d'0'
movwf dis3
movwf dis7
retlw 0
cargar2 movlw d'0'
movwf dis4
movwf dis8
retlw 0
; rutina manejo control de asignacion de tiempo a cada jugador al pulsar minuto unidad
salir call retard1
call retard1
movf rota,w
xorlw d'0'
btfss status,z
goto voy
incf dis3
incf dis7
movf dis3,w
xorlw d'10'
btfsc status,z
call cargar
movlw d'0'
movwf rota
voy retlw 0
;rutina manejo control de asignacion de tiempo a cada jugador al pulsar minutos decimal
salir1 call retard1
call retard1
movf rota,w
xorlw d'0'
btfss status,z
goto voy1
incf dis4
incf dis8
movf dis4,w
xorlw d'10'
btfsc status,z
call cargar2
movlw d'0'
movwf rota
voy1 retlw 0
; pulsador segundo jugador "salir2", manipulando rota detiene el reloj y pone andar el del contrario
;manipulando rota en 1
salir2 call retard1
movf rota,w
xorlw d'1'
btfsc status,z
goto vamos
movlw d'1'
movwf rota
movf dis4,w
xorlw d'0'
btfss status,z
goto vamos
movf dis3,w
xorlw d'0'
btfss status,z
goto vamos
call intre
vamos retlw 0
;subrutina del pulsador del juez, para los dos relojes.. manipulando rota en 0
salir3 call retard1
movlw d'0'
movwf rota
retlw 0
; pulsador primer jugador "salir4"
;manipulando rota en 2
salir4 call retard1
movf rota,w
xorlw d'2'
btfsc status,z
goto vamos1
movlw d'2'
movwf rota
movf dis8,w
xorlw d'0'
btfss status,z
goto vamos1
movf dis7,w
xorlw d'0'
btfss status,z
goto vamos1
call intre1
vamos1 retlw 0
;***rutina para incremento cuando va menos de 1 minuto primer jugador
intre movf dis2,w
xorlw d'0'
btfss status,z
goto ha
aja movf dis1,w
addlw d'5'
movwf aux
movlw d'10'
subwf aux,0
btfsc status,c
call corre
movf aux,w
movwf dis1
chao retlw 0
ha movf dis1,w
xorlw d'0'
btfss status,z
goto aja
goto chao
corre movwf dis1
movf dis2,w
addlw d'1'
movwf aux1
xorlw d'6'
btfss status,z
call cam
movlw d'0'
movwf dis2
movlw d'1'
movwf dis3
goto vengo
cam movf aux1,w
movwf dis2
goto vengo
;***
;**rutina para incremento cuando va menos de 1 minuto segundo jugador
intre1 movf dis6,w
xorlw d'0'
btfsc status,z
goto ha1
aja1 movf dis5,w
addlw d'5'
movwf aux2
movlw d'10'
subwf aux2,0
btfsc status,c
call corre1
movf aux2,w
movwf dis5
chao1 retlw 0
ha1 movf dis5,w
xorlw d'0'
btfss status,z
goto aja1
goto chao1
corre1 movwf dis5
movf dis6,w
addlw d'1'
movwf aux3
xorlw d'6'
btfss status,z
call cam1
movlw d'0'
movwf dis6
movlw d'1'
movwf dis7
goto vengo1
cam1 movf aux3,w
movwf dis6
goto vengo1
;**
;Programa principal ... donde se hace el barrido para el control del display
; y lectura del los pulsadores
inicio movlw d'0'
movwf dis1
movwf dis2
movwf dis3
movwf dis4
movwf dis5
movwf dis6
movwf dis7
movwf dis8
movlw d'46'
movwf tecla
movwf tecla2
bsf status,5
movlw 1f0h
movwf trisa
movlw 00h
movwf trisb
bcf status,5
;hasta aqui configurtacion del puerto
pri1 movlw 0ffh
movwf ptob
movf dis1,w
movwf ptoa
call retard2
movlw 0feh
movwf ptob
call retardo
;hasta aqui muestra el dato por display 1
movf ptoa,w
andlw d'16'
xorlw b'10000'
btfss status,z
call salir
;pregunto por pulsador 1
movlw 0ffh
movwf ptob
movf dis2,w
movwf ptoa
call retard2
movlw 0fdh
movwf ptob
call retardo
;hasta aqui muestra el dato por display 2
movf ptoa,w
andlw d'16'
xorlw b'10000'
btfss status,z
call salir1
;pregunto por pulsador 2
movlw 0ffh
movwf ptob
movf dis3,w
movwf ptoa
call retard2
movlw 0fbh
movwf ptob
call retardo
;hasta aqui muestra el dato por display 3
movf ptoa,w
andlw d'16'
xorlw b'10000'
btfss status,z
call salir2
;pregunto pulsador 3
vengo movlw 0ffh
movwf ptob
movf dis4,w
movwf ptoa
call retard2
movlw 0f7h
movwf ptob
call retardo
;hasta aqui muestra el dato por display 4
movf ptoa,w
andlw d'16'
xorlw b'10000'
btfss status,z
call salir3
;pregunto pulsador 4
movlw 0ffh
movwf ptob
movf dis5,w
movwf ptoa
call retard2
movlw 0efh
movwf ptob
call retardo
;hasta aqui muestra el dato por display 5
movf ptoa,w
andlw d'16'
xorlw b'10000'
btfss status,z
call salir4
;pregunto pulsador 5
vengo1 movlw 0ffh
movwf ptob
movf dis6,w
movwf ptoa
call retard2
movlw 0dfh
movwf ptob
call retardo
;hasta aqui muestra el dato por display 6
movlw 0ffh
movwf ptob
movf dis7,w
movwf ptoa
call retard2
movlw 0bfh
movwf ptob
call retardo
;hasta aqui muestra el dato por display 7
movlw 0ffh
movwf ptob
movf dis8,w
movwf ptoa
call retard2
movlw 07fh
movwf ptob
call retardo
;hasta aqui muestra el dato por display 8
;las siguientes lineas me pregunto por el estado del juego
;es decir, esta jugando player 1 o player 2
; ademas control el tiempo en segundos por tecla y tecla2
;rota es la variable que me controla que jugador juega, o si no ha empezado el juego.
movf rota,w
xorlw d'0'
btfsc status,z
goto pri1
movf rota,w
xorlw d'1'
btfsc status,z
call juga1
movf rota,w
xorlw d'2'
btfsc status,z
call juga2
goto pri1
end