;(((((((((((((((((( TODO EN MINUTOS, MAS UN DEJE DE PULSAR, MAS ENCENDIDO PORTA 2))))))))))))))))))))
;((((((((((((((((((((((((((( GUARDADO Y CHEQUEO DE NUMERO INICIAL ))))))))))))))))))))))))))))
list p=16F84A
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
Contador
ENDC
ORG 0x2100 ; Corresponde a la dirección 0 de la zona EEPROM de datos..
NumeroTurno
DE 0x00 ; El contador en principio a cero.
;**** Definicion de variables ****
Pulsador equ 7 ; Definimos Pulsador como el bit 7, en este caso sera para PORTB
;**** Inicio del Micro ****
;**** Programa principal ****
;**** Configuración de puertos ****
ORG 0
Inicio bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'00001' ;RA0 como entrada
movwf TRISA
movlw b'10000000' ; RB7 como entrada y los demas como salida.-
movwf TRISB
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
movlw NumeroTurno ; Lee la posición 0x00 de memoria EEPROM de datos
call EEPROM_LeeDato ; donde se guarda el turno.
movwf Contador
movwf PORTB
bcf PORTA,1
bSf PORTA,2
;*********************** CHEQUEA SEGMENTOS ENCENDIDOS Y DETECTA NUMERO *****************************
; ******************************** CHEQUEO NUMERO **********************************************
SEG_A btfss PORTB,0 ; SI HAY A, PUEDE SER 2, 3, 5, 6
GOTO NUNO ; NO, ES 1 o 4
SEG_B btfss PORTB,1 ; HAY B, ES 2 o 3
GOTO NCINCO ; NO HAY B, ES 5 o 6
SEG_C btfss PORTB,2 ; HAY C, ES TRES
GOTO DOS ; NO, ES DOS
GOTO TRES ; SI ES TRES
NUNO ; B C
btfss PORTB,1 ; REVISA POR PRIMERA VEZ
GOTO Testeo ; NO HAY NADA VA A TESTEO
btfss PORTB,6 ; REVISA SI HAY G
GOTO UNO ; NO HAY G ES UN 1
GOTO CUATRO ; HAY G ES UN 4
NCINCO ; A C D F G
btfss PORTB,4 ; REVISA SI HAY E
GOTO CINCO ; NO, ES UN CINCO
GOTO SEIS ; SI, ES UN SEIS
;**** Testeo de Pulsador ****
Testeo btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto Testeo ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto Testeo ; Falsa Alarma, seguimos testeando.-
movlw b'0000110' ; (1)
movwf PORTB
movlw NumeroTurno ; Se escribe en la posición de memoria EEPROM de
movwf EEADR ; datos donde se guarda el turno. En este caso en
movlw b'0000110' ; (1)
call EEPROM_EscribeDato
call NOPULSO
goto UNO
UNO btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto UNOB ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto UNOB ; Falsa Alarma, seguimos testeando.-
movlw b'1011011' ; (2)
movwf PORTB
movlw NumeroTurno ; Se escribe en la posición de memoria EEPROM de
movwf EEADR ; datos donde se guarda el turno. En este caso en
movlw b'1011011' ; (2)
call EEPROM_EscribeDato
call NOPULSO
goto DOS
UNOB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto UNO ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto UNO ; Falsa Alarma, seguimos testeando.-
bcf PORTA,2 ; APAGAMOS EL LED PORTA 2
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call min1 ; ( 1 MIN )
bcf PORTA,1 ; ( APAGA )
bsf PORTA,2 ; ENCIENDE PORTA 2
goto UNO
DOS btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto DOSB ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto DOSB ; Falsa Alarma, seguimos testeando.-
movlw b'1001111' ; (3)
movwf PORTB
movlw NumeroTurno ; Se escribe en la posición de memoria EEPROM de
movwf EEADR ; datos donde se guarda el turno. En este caso en
movlw b'1001111' ; (3)
call EEPROM_EscribeDato
call NOPULSO
goto TRES
DOSB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto DOS ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto DOS ; Falsa Alarma, seguimos testeando.-
bcf PORTA,2 ; APAGAMOS EL LED PORTA 2
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call min2 ; ( 2 MIN )
bcf PORTA,1 ; ( APAGA )
bsf PORTA,2 ; ENCIENDE PORTA 2
goto DOS
TRES btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto TRESB ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto TRESB ; Falsa Alarma, seguimos testeando.-
movlw b'1100110' ; (4)
movwf PORTB
movlw NumeroTurno ; Se escribe en la posición de memoria EEPROM de
movwf EEADR ; datos donde se guarda el turno. En este caso en
movlw b'1100110' ; (4)
call EEPROM_EscribeDato
call NOPULSO
goto CUATRO
TRESB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto TRES ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto TRES ; Falsa Alarma, seguimos testeando.-
bcf PORTA,2 ; APAGAMOS EL LED PORTA 2
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call min3 ; ( 3 MIN )
bcf PORTA,1 ; ( APAGA )
bsf PORTA,2 ; ENCIENDE PORTA 2
goto TRES
CUATRO btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto CUATROB ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto CUATROB ; Falsa Alarma, seguimos testeando.-
movlw b'1101101' ; (5)
movwf PORTB
movlw NumeroTurno ; Se escribe en la posición de memoria EEPROM de
movwf EEADR ; datos donde se guarda el turno. En este caso en
movlw b'1101101' ; (5)
call EEPROM_EscribeDato
call NOPULSO
goto CINCO
CUATROB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto CUATRO ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto CUATRO ; Falsa Alarma, seguimos testeando.-
bcf PORTA,2 ; APAGAMOS EL LED PORTA 2
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call min2 ; ( 2 MIN )
call min2 ; ( 2 MIN )
bcf PORTA,1 ; ( APAGA )
bsf PORTA,2 ; ENCIENDE PORTA 2
goto CUATRO
CINCO btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto CINCOB ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto CINCOB ; Falsa Alarma, seguimos testeando.-
movlw b'1111101' ; (6)
movwf PORTB
movlw NumeroTurno ; Se escribe en la posición de memoria EEPROM de
movwf EEADR ; datos donde se guarda el turno. En este caso en
movlw b'1111101' ; (6)
call EEPROM_EscribeDato
call NOPULSO
goto SEIS
CINCOB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto CINCO ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto CINCO ; Falsa Alarma, seguimos testeando.-
bcf PORTA,2 ; APAGAMOS EL LED PORTA 2
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call min3 ; ( 3 MIN )
call min2 ; ( 2 MIN )
bcf PORTA,1 ; ( APAGA )
bsf PORTA,2 ; ENCIENDE PORTA 2
goto CINCO
SEIS btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto SEISB ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto SEISB ; Falsa Alarma, seguimos testeando.-
movlw b'0000110' ; (1)
movwf PORTB
movlw NumeroTurno ; Se escribe en la posición de memoria EEPROM de
movwf EEADR ; datos donde se guarda el turno. En este caso en
movlw b'0000110' ; (1)
call EEPROM_EscribeDato
call NOPULSO
goto UNO
SEISB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto SEIS ; No, seguimos testeando.-
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto SEIS ; Falsa Alarma, seguimos testeando.-
bcf PORTA,2 ; APAGAMOS EL LED PORTA 2
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call min3 ; ( 3 MIN )
call min3 ; ( 3 MIN )
bcf PORTA,1 ; ( APAGA )
bsf PORTA,2 ; ENCIENDE PORTA 2
goto SEIS
NOPULSO btfsc PORTB,Pulsador ; Testeamos si se solto.-
goto NOPULSO ; NO, AUN ESPERAMOS
return ; VOLVEMOS PORQUE SOLTO
INCLUDE <TIEMPOS.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <EEPROM.INC>
end