	LIST p=18F13K22
	#INCLUDE <p18f13k22.inc>
	CONFIG	FOSC 	= IRC
	CONFIG	PLLEN 	= ON	
	CONFIG	BOREN	= OFF
	CONFIG	WDTEN	= OFF
	CONFIG	MCLRE 	= OFF
	CONFIG	HFOFST	= OFF
	CONFIG	LVP 	= OFF
	CONFIG 	CP0 	= ON
	CONFIG 	CP1 	= ON
	CONFIG 	CPB 	= OFF
	CONFIG 	CPD 	= OFF
	CONFIG 	WRT0 	= OFF
	CONFIG 	WRT1 	= OFF 
	CONFIG 	WRTB 	= OFF
	CONFIG 	WRTD 	= OFF
	CONFIG 	EBTR0 	= OFF 
	CONFIG 	EBTR1 	= OFF
	CONFIG 	EBTRB 	= OFF

	CBLOCK 0x000
	VL
	VH
	VS
	W_TEMP
	STATUS_TEMP
	BSR_TEMP
	INTER
	B1
	ENDC

	ORG		0x00
	GOTO	INICIO
	ORG		0x008
;	GOTO BAJA
	RETFIE;ALTA_PRIORIDAD
	ORG		0x018
	GOTO BAJA

	;RETFIE
#DEFINE SERVO1 PORTB,6
VALORH	EQU	0XFF
VALORL	EQU	0XCF
;**************************************************************
INICIO
	BSF		OSCCON,IRCF2 	;CONFIGURO EL OSCILADOR INTERNO
	BSF		OSCCON,IRCF1 	;A 16MHZ
	BSF		OSCCON,IRCF0
; 
	CLRF	SLRCON
	CLRF	ANSEL			;CONFIGURAMOS TODOS LOS PINES
	CLRF	ANSELH			;COMO I/O DIGITAL
	
;CONFIGURACION DE LOS PUERTOS
	CLRF	PORTA					;PONGO TODAS LAS SALIDAS
	CLRF	PORTB					;EN NIVEL BAJO
	CLRF	PORTC
	CLRF	LATA
	CLRF	LATB
	CLRF	LATC
	CLRF	TRISA					;CONFGIRO LOS PUERTOS
	CLRF	TRISB					;COMO SALIDAS
	CLRF	TRISC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	BSF		RCON,7; DEFINIMOS INTERRUPCIONES COMO BAJA PRIORIDAD
	CLRF	IPR1
	CLRF	IPR2
	CLRF	INTCON
	BSF		PIE1,TMR1IE; ACTIVAMOS INTERRUPCION TMR1
	CLRF  	T1CON; CONFIGURAMOS EL TIMER 1 CON PREESCALER 1 Y DE 8 BITS
	BSF		T1CON,7
	CALL 	CONF_ADC
	CALL	INI_TMR
	CLRF	VL
	CLRF	VH
	CLRF 	VS
	CLRF 	B1; BANDERA DE AYUDA
	
	MOVLW	VALORH
	MOVWF 	TMR1H
	MOVWF	VALORL
	MOVWF 	TMR1L
	; ANTES DE ENTRAR AL LOOP ACITVAMOS LAS INTERRUPCIONES Y TMR1
	BCF		PIR1,TMR1IF; LIMPIAMOS BANDERA DE INTERRUPCION TMR1
	CALL 	SET_SERVO
	BSF 	T1CON,TMR1ON; ACTIVAMOS TMR0
	BSF 	INTCON,6
	BSF		INTCON,7; HABILITAMOS INTERRUPCIONES
	BSF 	T1CON,7
	CALL	CON_CH0
	MOVFF	VH,VS
	MOVLW	0XFF
	MOVWF 	INTER
PRINCIPAL
	CALL 	CON_CH0
	MOVFF 	VH,PORTC
	GOTO 	PRINCIPAL
CONF_ADC
	MOVLW	B'00001110'; JUSTIFICADO A LA IZQUIERDA
	MOVWF	ADCON2
	CLRF 	ADCON1
	MOVLW 	B'00000000'; VAMOS A SELECCIONAR EL ADC 0 Y HABILITAR EL PUERTO DE CONVERSIÓN
	MOVWF 	ADCON0
	BSF		TRISA,0
	BSF 	ANSEL,ANS0		;CONFIGURAMOS LA ENTRADA A0 PARA LEERLA
	RETURN
CON_CH0
	BSF 	ADCON0,ADON
	BSF 	ADCON0,GO
PROCESO
	BTFSC	ADCON0,GO
	GOTO	PROCESO
	MOVFF	ADRESH,VH
	MOVFF	ADRESL,VL
	RETURN	 	
SET_SERVO
	BSF 	SERVO1
	MOVLW	.9	
	CALL	RET_X100us
	RETURN	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ENTRA A VECTOR DE INTERRUPCION
BAJA
	MOVFF 	W,W_TEMP
	MOVFF 	BSR,BSR_TEMP
	MOVFF 	STATUS,STATUS_TEMP
	BTFSS	PIR1,TMR1IF
	RETFIE
	BTFSC	B1,0
	GOTO	INTER17
	BCF 	T1CON,TMR1ON
	BCF		PIR1,TMR1IF
	MOVLW	VALORH
	MOVWF 	TMR1H
	MOVLW	VALORL
	MOVWF 	TMR1L

;	MOVF	VS,W
;	BTFSS	STATUS,Z
;	GOTO	$+2
;	GOTO	CLEAR_SERVO1

	DECFSZ	VS,F
	GOTO	KEEP_SERVO1
CLEAR_SERVO1
	BSF		B1,1
	BCF		SERVO1
KEEP_SERVO1
	MOVFF	W_TEMP,W
	MOVFF 	BSR_TEMP,BSR
	MOVFF 	STATUS_TEMP,STATUS
	BSF 	T1CON,TMR1ON
	DECFSZ	INTER,F
	RETFIE
	BSF 	PORTB,7
	;GENERAMOS AQUI LA INTERRUPCION DE 17.9ms
	MOVLW	0X74
	MOVWF 	TMR1H
	MOVLW	0X2F
	MOVWF 	TMR1L
	BSF 	T1CON,5
	BSF		T1CON,4; PRENDEMOS PREESCALER DE 8
	BSF 	B1,0
	BCF		SERVO1
	RETFIE
INTER17
	CALL 	SET_SERVO
	MOVFF	VH,VS
	BCF		B1,0
	BCF		T1CON,5
	BCF		T1CON,4
	MOVLW	VALORH
	MOVWF 	TMR1H
	MOVLW	VALORL
	MOVWF 	TMR1L
	MOVFF	W_TEMP,W
	MOVFF 	BSR_TEMP,BSR
	MOVFF 	STATUS_TEMP,STATUS
	RETFIE

	
#INCLUDE<RET.INC>

	END