;*****************************************************************
;contador de 8 vehiculos
; NORBERTO PELLEGRINI 01/02/2004
; UN sensor INCREMENTA
;OTRO SENSOR RESTA - SI HAY 9 VEHICULOS, ENCIENDE LUZ ROJA
; PERO NENE, PARA LA PROXIMA, ESTUDIA... ESTO SE APRENDE CONSULTANDO
; NO EXISTE AUN UN MANUAL PARA ANDAR EN BICICLETA... TE DARAN CONSEJOS...
; PERO SOLO SE APRENDE A LOS GOLPES.....
; ESTO, REVISALO, PROBALO... MAMALO.. SINO EL PROFE, TE HACE PURE CON SOLO 2 PREGUNTAS!!!
; POR LO MENOS, ANALIZALO, ASI TENES IDEA DE COMO FUNCIONA... Y CUALES SERIAN LAS MEJORAS!!!
; GRABAR EN LA EEPROM ANTE CORTES DE LUZ... ETC... E S T U D I AAAAA
;el cual controla el nº de coches que hay en el parking y un semáforo
;de ocupado cuando llega a 9.
;Por RA0 entran los impulsos de contaje ascendente
; y por RA1 descendente.
; En el puerto B conectamos un display que cuenta de 0 a 9 y
; cuando llega a 9 en
; RB7 tenemos un impulso alto para activar el semaforo
;Agradeceria que alguien me ayudara, a poder ser hoy porque mañana tengo que presentarlo.
;*****************************************************************
LIST P=16F84A
#INCLUDE "p16f84A.inc"
ERRORLEVEL -302, -307 ;(NO FIGURAN LOS ERRORES DE CAMBIO DE PAGINA)
;**********************************************************************
__CONFIG _CP_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC ;CONFIGURO
;PARA LA GRABACION, CODE PROTECT OFF, RESET DE ENCENDIDO PERRO GUARDIAN=ON,ETC
reset org 00h ;el vector de reset es la dirección 00
goto INICIO ;se salta al inicio del programa
#DEFINE RELE PORTB,7 ;RELE SEMAFORO
#DEFINE PULSUMA PORTA,0 ;PULSUMA
#DEFINE PULRESTA PORTA,1 ;PULRESTA
CBLOCK H"0C"
DELAY
MEMORIA
VEHICULO
loops2
loops
ENDC
;************* 7 SEGMENTOS DISPLAY + UNO ****************************
; SEGMENTOS BAPCDGFE
CERO EQU B"11011011" ; LOS 7 BIT SON LOS
UNO EQU B"10010000" ; SEGMENTOS
DOS EQU B"11001101" ;
TRES EQU B"11011100" ;
CUATRO EQU B"10010110" ;
CINCO EQU B"01011110" ; ***A***
SEIS EQU B"01011111" ; * *
SIETE EQU B"11010000" ; *F *B
OCHO EQU B"11011111" ; ***G***
NUEVE EQU B"11011110" ; * *
DIEZ EQU B"00000000" ; *E *C
ONCE EQU B"00000000" ; ***D***
;*****************************************************
;SUBRUTINA PARA CONVERTIR CADA CONTADOR A DIGITOS (18)
;*****************************************************
CONV_DIG MOVF VEHICULO,W
CALL NUMEROS
MOVWF PORTB ;
RETLW 0
;******************************************************
; TABLA DE LOS NUMEROS + EL UNO
;******************************************************
NUMEROS ADDWF PCL,F ;SUBRUTINA PARA MANDAR NUMERO AL DISPLAY
RETLW CERO
RETLW UNO
RETLW DOS
RETLW TRES
RETLW CUATRO
RETLW CINCO
RETLW SEIS
RETLW SIETE
RETLW OCHO
RETLW NUEVE
MOVLW .1 ;CON ESTO LIMITO EL MAXIMO
MOVWF VEHICULO ;SI SE SUPERA DE 9, SE COLOCA EN UNO
RETLW UNO
;*************************************************************************************
; RETARDO ANTIRREBOTE
;*************************************************************************************
DEMORA ; RETURN
movlw .80 ;RETARDO DE 80 MILISEGUNDOS PARA ANTIRREBOTE
movwf loops
top2 movlw .110
movwf loops2
top nop
nop
nop
nop
nop
nop
decfsz loops2,1
goto top
decfsz loops,1
goto top2
retlw 0
;**************************************************************************
; SUBRUTINA DE LECTURA DE ENTRADAS DE PULSADORES
; PULSUMA , PULRESTA
LEER
BTFSS PULSUMA ;PULSADOR A MASA
GOTO PULSA1
BTFSS PULRESTA ;PULSADOR A MASA
GOTO PULSA2
RETLW 0 ;NO SE PULSO NINGUNO
PULSA1 CALL DEMORA
BTFSC PULSUMA ;ESTA PULSADO?, SI ESTA PULSADO SALTA
RETLW 0
BTFSS PULSUMA ;ESPERAR A QUE SUELTE EL PULSADOR Y SALTA
GOTO $-1 ; NO SOLTO, SEGUIR ESPERANDO
INCF VEHICULO,F ;SUMO
call CONV_DIG ;MUESTRO CUAL ES EL VALOR CARGADO
RETLW 0
PULSA2 CALL DEMORA
BTFSC PULRESTA ;ESTA PULSADO?, SI ESTA PULSADO SALTA
RETLW 0
BTFSS PULRESTA ;ESPERAR A QUE SUELTE EL PULSADOR Y SALTA
GOTO $-1 ; NO SOLTO, SEGUIR ESPERANDO
DECF VEHICULO,F ;RESTO
call CONV_DIG ;MUESTRO CUAL ES EL VALOR CARGADO
RETLW 0
VERIFICAR BCF RELE ;SIEMPRE LO APAGO Y VERIFICO SI LLEGO AL MAXIMO
MOVLW .9
XORWF VEHICULO,W
BTFSS STATUS,Z
GOTO TIEMPO_FUNCION
BSF RELE ;SE ACTIVA EL RELE DE SALIDA
RETLW 0
;**********************************************************************
; PROGRAMA PRINCIPAL
INICIO CLRF PORTA
BSF STATUS,RP0 ;BANCO 1
MOVLW B"11111011" ;COLOCO COMO ENTRADAS Y UNA SALIDA RELE
MOVWF TRISA
MOVLW B"00000000" ; TODAS SALIDAS AL DISPLAY Y RELE
MOVWF TRISB
BCF STATUS,RP0 ;BANCO 0
;---------------------------------------------------------------
CLRF VEHICULO
call CONV_DIG ;MUESTRO CUAL ES EL VALOR CARGADO
BCF RELE
FUNCIONAMIENTO
CALL LEER
CALL VERIFICAR
GOTO $-2 ;QUEDA EN LOOP
END
Norberto