; 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

#INCLUDE <P12F629.INC>

; Fuses

		__CONFIG    _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT     

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     0x2100
        	DE      0x22,0x23
	
        	ORG     0               ; Vector de Reset
		bsf     STATUS,RP0
		movlw	0xFF
		movwf	OSCCAL
        	goto    INICIO
        	ORG     4               ; Vector de Interrupcion

;--------------Configuracion del PIC-----------------------------------------
INICIO	bsf     STATUS,RP0
        movlw   b'10000011'	; 100 Preescaler a 1:32 Re=30 F=10Khz
	    movwf   OPTION_REG	; 011 Preescaler a 1:16 Re=60 F=5Khz
		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
