;********************** Header ***************************************
;********************************************************************

LIST P=16F887
#include <p16F887.inc>

ERRORLEVEL    -302, -306

__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V


CBLOCK 0x20

uni_seg
dec_seg
tmp_s
uni_hora
dec_hora
tmp_h
uni_min
dec_min
tmp_m

var1
var2
contador

ENDC


#define led_on_y 	PORTE,1
#define led_on_b 	PORTE,0
#define buzzer 	PORTE,2
#define boton_inicio 	PORTA,0
#define puerto_hora PORTD
#define puerto_min PORTC
#define puerto_seg PORTB


org 0;inicio del programa
;******************************************************
;********programa principal de seteos de segundos**
;******************************************************
principal
		;goto ejecutar
		call PIC_SET
		clrf  puerto_hora; se limpia el puerto B
		clrf puerto_min;se limpia el puerto C
		clrf puerto_seg;se limpia el puerto D
		
		clrf tmp_h
		clrf tmp_m
		clrf tmp_s
        clrf contador

		movlw d'0'
		movwf tmp_m
		call presentar_min
		
		movlw d'0'
		movwf tmp_h
		call presentar_hora


		bcf led_on_y
		bcf led_on_b
		bcf buzzer
	
menu_inicio
		btfsc boton_inicio
		goto menu_inicio
		;antirebote del boton inicio/arranque
		call Retardo_10ms
		bsf led_on_y
	soltar1
		btfss boton_inicio
		goto soltar1

		clrf var1
		clrf var2
		;call presentar_leds
  cuenta_5seg
		call presentar_leds
		call Retardo_1s
        incf contador
		movfw contador
		sublw d'5'
	   	btfss STATUS,Z
		goto cuenta_5seg



	sonidos_5
		clrf contador
      sonido_1
		bsf buzzer
		call Retardo_200micros
		bcf buzzer
		call Retardo_200micros
		incf var1
		movfw var1
		sublw d'255'
		btfss STATUS,Z
		goto sonido_1
		incf var2
		clrf var1
		movfw var2
		sublw d'1'
		btfss STATUS,Z
		goto sonido_1
		clrf var1
		clrf var2
		;goto cuenta_5seg
	sonido_2
		bsf buzzer
		call Retardo_500micros
		bcf buzzer
		call Retardo_500micros
		incf var1
		movfw var1
		sublw d'255'
		btfss STATUS,Z
		goto sonido_2
		incf var2
		clrf var1
		movfw var2
		sublw d'1'
		btfss STATUS,Z
		goto sonido_2
		clrf var1
		clrf var2

sonido_3
		bsf buzzer
		call Retardo_50micros
		bcf buzzer
		call Retardo_50micros
		incf var1
		movfw var1
		sublw d'255'
		btfss STATUS,Z
		goto sonido_3
		incf var2
		clrf var1
		movfw var2
		sublw d'1'
		btfss STATUS,Z
		goto sonido_3
		clrf var1
		clrf var2
sonido_4
		bsf buzzer
		call Retardo_100micros
		bcf buzzer
		call Retardo_100micros
		incf var1
		movfw var1
		sublw d'255'
		btfss STATUS,Z
		goto sonido_4
		incf var2
		clrf var1
		movfw var2
		sublw d'1'
		btfss STATUS,Z
		goto sonido_4
		clrf var1
		clrf var2

sonido_5
		bsf buzzer
		call Retardo_1ms
		bcf buzzer
		call Retardo_1ms
		incf var1
		movfw var1
		sublw d'255'
		btfss STATUS,Z
		goto sonido_5
		incf var2
		clrf var1
		movfw var2
		sublw d'1'
		btfss STATUS,Z
		goto sonido_5
		clrf var1
		clrf var2

        goto cuenta_5seg

		goto principal




;;;;;;;;;;;;;;;;;;;;;;;;
		;funciones
;;;;;;;;;;;;;;;;;;;;;;;;;

PIC_SET
		banksel ANSELH
		clrf ANSELH
		clrf ANSEL
	
		banksel TRISB
		bsf boton_inicio


		bcf led_on_y
		bcf led_on_b
		bcf buzzer
		clrf  puerto_hora ;salidas de leds al puerto B
		clrf puerto_min;salidas de leds al puerto C
		clrf puerto_seg;salidas de leds al puerto D
		
		banksel PORTA
		
return

presentar_leds

		incf tmp_s
		movfw tmp_s
		sublw d'60'
		btfss STATUS,Z
        goto no_59
	encero_seg
        clrf tmp_s
        incf tmp_s
		clrf contador
		incf tmp_m
        call presentar_min
      
     no_59
		movfw tmp_s
	    call BIN_a_BCD
		movfw BCD_Unidades
		call	bin_hex
		movwf	uni_seg
		movfw BCD_Decenas 
		call	bin_hex
		movwf	dec_seg
		swapf   dec_seg,f
		movf    dec_seg,w
		addwf   uni_seg,w
		movwf   puerto_seg
		return

presentar_min
		movfw tmp_m
	    call BIN_a_BCD
		movfw BCD_Unidades
		call	bin_hex
		movwf	uni_seg
		movfw BCD_Decenas 
		call	bin_hex
		movwf	dec_seg
		swapf   dec_seg,f
		movf    dec_seg,w
		addwf   uni_seg,w
		movwf   puerto_min
	return

presentar_hora
		movfw tmp_h
	    call BIN_a_BCD
		movfw BCD_Unidades
		call	bin_hex
		movwf	uni_seg
		movfw BCD_Decenas 
		call	bin_hex
		movwf	dec_seg
		swapf   dec_seg,f
		movf    dec_seg,w
		addwf   uni_seg,w
		movwf   puerto_hora
	return
	

bin_hex		; Tabla para display hex
	addwf	PCL,F	
Tabla
	;binarios invertidos para adpatarse a la salida dindicada por la tarjeta del pic
	RETLW   b'00000000'             ; Retorna con el código del 0
;	RETLW	b'00000001'		; Retorna con el código del 1
	RETLW	b'10000000'		; Retorna con el código del 1
	RETLW	b'01000000'		; Retorna con el código del 2
	RETLW	b'11000000'	        ; Retorna con el código del 3
	RETLW	b'00100000'		; Retorna con el código del 4
	RETLW	b'10100000'		; Retorna con el código del 5
	RETLW	b'01100000'		; Retorna con el código del 6
	RETLW	b'11100000'		; Retorna con el código del 7
	RETLW	b'00010000'		; Retorna con el código del 8
	RETLW	b'10010000'		; Retorna con el código del 9	



include <RETARDOS.INC>
include <BIN_BCD.INC>
include <DISPLAY_7S.INC>	
end;finalizacion del programa
