; Control volumen con x9c103 y pic 12f629
;                               ____________
;                         Vcc -|1   \__/  18|- GND
;                UP vol   GP5 -|2         17|- GP0 CS
;	                      GP4 -|3  12F629 16|- GP1 /INC
;                Down vol GP3 -|4_________15|- GP2 U/D
; By Gigo                 
; v1.0b
LIST P=PIC12F629
#INCLUDE <P12F629.INC>

; Fuses

		__CONFIG    _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT     

CounterA	EQU	0x25
CounterB	EQU	0x26
CounterC	EQU	0x27       

#Define		CS  	GPIO,0		; Salida chip select
#Define		INC 	GPIO,1		; Salida incrementar pot
#Define		UD  	GPIO,2		; Salida Aumentar o Disminuir pot
#Define		DOW  	GPIO,3		; Entrada Bajar volumen
#Define		UP  	GPIO,5		; Entrada Subir volumen



	
        	ORG     0               ; Vector de Reset
        	goto    INICIO

;--------------Configuracion del PIC-----------------------------------------
INICIO	bsf     STATUS,RP0
		movlw 3FFH
		movwf OSCCAL
        movlw   b'10000011'	; 
	    movwf   OPTION_REG	; 
		clrf	PIE1
	    movlw   b'00101000'
		movwf	TRISIO
	    bcf     STATUS,RP0
		movlw	07h
		movwf	CMCON		; Desactiva los comparadores

espera	bsf		CS			;potenciometro digital en Standby

		btfss	UP
		goto	subir
		btfss	DOW
		goto	bajar
		goto	espera

;-------------- Subir Potenciometro --------------------------------------------
subir	bsf		INC			;pongo a 1 salida INC
		bcf		CS			;pongo a 0 salida CS
		bsf		UD			;pongo a 1 salida UD para indicar que voy a subir el pot
		bcf		INC			;pongo a 0 salida INC para subir 1 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		bcf		INC			;pongo a 0 salida INC para subir 2 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		bcf		INC			;pongo a 0 salida INC para subir 3 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		bcf		INC			;pongo a 0 salida INC para subir 4 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		goto	espera		;vuelvo a comprobar entradas
;-------------- Bajar Potenciometro --------------------------------------------
bajar	bsf		INC			;pongo a 1 salida INC
		bcf		CS			;pongo a 0 salida CS
		bcf		UD			;pongo a 0 salida UD para indicar que voy a bajar el pot
		bcf		INC			;pongo a 0 salida INC para subir 1 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		bcf		INC			;pongo a 0 salida INC para subir 2 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		bcf		INC			;pongo a 0 salida INC para subir 3 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		bcf		INC			;pongo a 0 salida INC para subir 4 vez el pot
		call	temp		;espero 2ms
		bsf		INC			;pongo a 1 salida INC
		call	temp		;espero 2ms
		goto	espera		;vuelvo a comprobar entradas

;--------------Temporizador de 0,75s------------------------------------------
temp		movlw	D'1'
		movwf	CounterC
		movlw	D'100'
		movwf	CounterB
		movlw	D'1'
		movwf	CounterA
loop	decfsz	CounterA,1
		goto	loop
		decfsz	CounterB,1
		goto	loop
		decfsz	CounterC,1
		goto	loop
		return

		END
