;Comunicacion RS232 entree PIC y PC por RS232 a 9600bps
;Se debe Usar un cristal de 20MHz

			list 		P=16f877A
			#include	<P16F877A.INC>
			__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC&_BODEN_ON&_LVP_OFF

PC			EQU		2	
W_TEMP		EQU		0X20
STATUS_TEMP	EQU		0X21
PCLATH_TEMP	EQU		0X22
FSR_TEMP	EQU		0X23
REG_DIVISOR	EQU		0X24
REG_TABLA_POTES	EQU	0X25
N_POTE		EQU		0X26
FSR_TEMP2	EQU		0X27
REG_TEMP_N_POTE	EQU	0X28
N_DIGITOS	EQU		0X29
REG_ENV_SPI	EQU		0X2A
N_BITS		EQU		0X2B
CENT		EQU		0X2C 
MSD			EQU		0X2D
LSD			EQU		0X2F
PDel0		EQU		0X30
PDel1		EQU		0X31


	
			org		0x00	
			goto	INICIO
			ORG		0X04
			GOTO	INTERRUPCION
			ORG		0X05
;DIRECCIONES
#DEFINE		REG_MEM_DISPLAYS	0X32					;REGISTROS DE MUESTRA PARA EL DISPLAY
#DEFINE		DIRECCION_POTES		(REG_MEM_DISPLAYS + N_REG_OUT)		;+64 POSICIONES
;VARIABLES
#DEFINE		N_REG_OUT			.3					;Nº DE REGISTROS A LA SALIDA PARA SACAR DATOS
;ORDENES MIDI
#DEFINE		ESTATUS			0XB0	;ESTATUS DE CONTROL CHANGE
#DEFINE		ACTIVE_SENSING	0XFE	;ACTIVE SENSING CADA 333MSEG
#DEFINE		NOTE_ON			0X90
#DEFINE		NOTE_OFF		0X80
CONFIG_RS232
		BANKSEL	TRISC
		BSF		TRISC,6		;PUERTO C3 COMO SALIDA
		BSF		TRISC,7		;PUERTO C7 COMO ENTRADA
		BANKSEL	SPBRG
		MOVLW	.9   
		MOVWF	SPBRG		;BAUD RATE A 31250

		BANKSEL	TXSTA
		BCF		TXSTA,CSRC	;SELECCIONA RELOJ (ASINCRONO NO IMPORTA)
		BCF		TXSTA,TX9	;DATOS DE 8 BITS
		BSF		TXSTA,TXEN	;NO ENVIA DATOS POR AHORA
		BCF		TXSTA,SYNC	;MODO ASINCRONO
		BCF		TXSTA,3		;NO IMPLEMENTADO
		BCF		TXSTA,BRGH	;BAJA VELOCIDAD DE TRANSMISION
		BCF		TXSTA,TRMT	;ESTADO DEL REGISTRO DE DESPLAZAMIENTO (VACIO)
		BCF		TXSTA,TX9D	;NOVENO BIT A TRANSMITIR
	
		BANKSEL	RCSTA
		BSF		RCSTA,SPEN	;HABILITA PUERTO SERIE
		BCF		RCSTA,RX9	;BITS A RECIVIR 8
		BCF		RCSTA,SREN	;HABILITA RECEPCION UNICA (ASINCRONO NO IMPORTA)
		BSF		RCSTA,CREN	;HABILITA RECEPCION CONTINUA
		BCF		RCSTA,3
		BCF		RCSTA,FERR	;NO HAY ERROR DE EMPAQUETAMIENTO
		BCF		RCSTA,OERR	;NO HAY ERROR DE DESBORDAMIENTO
		BCF		RCSTA,RX9D	;NOVENO BIT DE RECIVIDO
		
		BANKSEL	PIE1		
		BCF		PIE1,TXIE	;DESHABILITA INTERRUPCION DE TRANSMISION
		BCF		PIE1,RCIE	;HABILITA INTERRUPCION DE RECEPCION

		BANKSEL	PIR1
		BCF		PIR1,TXIF	;APAGA BANDERA DE INTERRUPCION POR TRANSMISION
		BCF		PIR1,RCIF	;APAGA BANDERA DE INTERRUPCION POR RECEPCION
							
		BCF		STATUS,RP0	;CAMBIA AL BANCO 0
		BCF		STATUS,RP1
		RETURN
CONFIG_TMR1
		BCF		STATUS,RP0	
		MOVLW	b'110001'
		MOVWF	T1CON
		GOTO	RECARGA

		BANKSEL	T1CON			;00000111
		BSF		T1CON,T1CKPS1	;SELECCION DEL PREESCALER DEL TMR0
		BSF		T1CON,T1CKPS0 	;SELECCION DEL PREESCALER DEL TMR0
		BSF		T1CON,T1OSCEN	;ACTIVACION OSCILADOR POR CRISTAL  
		BSF		T1CON,T1SYNC	;CONTROL SINC EXTERNO
		BCF		T1CON,TMR1CS	;SELECCION DE RELOJ  INT-  EXT
		BSF		T1CON,TMR1ON 	;1-ACTIVADO 0-DESACT. TIMER0
RECARGA
		movf	b'01011101',w
		movwf	TMR1L
		movf	B'01011101',W
		movwf	TMR1H
		RETURN
;-----------------------------------------------------------------------
CONFIG_TRISA			;111011
		BSF		STATUS,RP0
		BSF		TRISA,0
		BSF		TRISA,1
		BSF		TRISA,2
		BCF		TRISA,3
		BSF		TRISA,4
		BSF		TRISA,5
		RETURN
CONFIG_TRISB			;11100001
		BSF		STATUS,RP0
		BSF		TRISB,0
		BCF		TRISB,1
		BCF		TRISB,2
		BCF		TRISB,3
		BSF		TRISB,4
		BSF		TRISB,5
		BSF		TRISB,6
		BSF		TRISB,7	
		RETURN
CONFIG_TRISC			;00000011
		BSF		STATUS,RP0
		BCF		TRISC,0	
		BCF		TRISC,1
		BCF		TRISC,2
		BCF		TRISC,3
		BCF		TRISC,4
		BCF		TRISC,5
		BSF		TRISC,6
		BSF		TRISC,7	
		RETURN
CONFIG_TRISD			;00000011
		BSF		STATUS,RP0
		BCF		TRISD,0
		BCF		TRISD,1
		BCF		TRISD,2
		BCF		TRISD,3
		BSF		TRISD,4
		BSF		TRISD,5
		BSF		TRISD,6
		BSF		TRISD,7	
		RETURN	
CONFIG_TRISE
		BSF		STATUS,RP0
		MOVLW	B'111'
		MOVWF	TRISE
		RETURN
;---------------------------------------------------------
CONFIG_ADCON1	;00000000
		BSF		STATUS,RP0
		MOVLW	B'00000000'
		MOVWF	ADCON1
		RETURN
CANAL_AD_X					;SELECCIONA CANAL X DEL CAD NO INICIA LA CONVERSION
		BCF		STATUS,RP0
		MOVWF	ADCON0
		CALL	DEMORA		;CHE QUE DICE MX QUE UNA DEMORA DE 1 A 10 MS PARA QUE HAGA 
		RETURN				;LA ADQUISICION CORRECTA DEL VALOR DEL POTENCIOMETRO ANTES DE INICIAR LA CONVERSION (ES DE 5MS)

ENCIENDE_CAD
		BCF		STATUS,RP0
		BSF		ADCON0,GO	;INICIA LA CONVERSION
ESPERA_CAD					;TESTEA HASTA QUE TERMINA LA CONVERSIÓN
		BTFSC	ADCON0,GO	;HASTA QUE SE PONE A CERO EL BIT GO/DONE
		GOTO	ESPERA_CAD	;VUELVE ATRAS HASTA QUE TERMINE
		MOVF	ADRESH,W	;MUEVE A W EL RESULTADO DEL CAD
		MOVWF	REG_DIVISOR	;AL REGISTRO
		BCF		ADCON0,ADON	;APAGA EL CAD
		BCF		STATUS,C	;PONE A CERO C
		RRF		REG_DIVISOR,F	;PARA DIVIDIR POR DOS RESULTADO A W
		MOVF	REG_DIVISOR,W
		BCF		STATUS,Z
		NOP
		NOP
		SUBWF	INDF,W		;QUE LO RESTA DE INDF Y LO DEJA EN W , F SE QUEDA COMO ESTABA
		NOP
		NOP
		BTFSS	STATUS,Z	;SI NO ES IGUAL 
		CALL	ENVIA_POTE	;ENVIA EL DATOS
		RETURN				;SI ES IGUAL AL QUE HABIA VUELVE PARA OTRO

ENVIA_POTE
		BCF		STATUS,RP0
		MOVF	REG_DIVISOR,W	;ESTA COMO SE QUEDO DESPUES DE LA RESTA ASI QUE 
		MOVWF	INDF			;GUARDA EL NUEVO DATO EN SU POSICION DE MEMORIA
;BYTE DE ESTATUS-------------------------------------------------------
		MOVLW	ESTATUS			;ESTATUS A W 
		CALL	ENVIAR_USART	;Y LO ENVIA
;BYTE Nº DE CONTROLADOR------------------------------------------------
		CALL	VALOR_DE_POTE	;LEE EN LA PAGINA 1 LA FUNCION DEL POTE
		CALL	ENVIAR_USART	;ASI ENVIA LA FUNCION DE POTE
;VALOR DEL CONTROLADOR-------------------------------------------------
		MOVF	INDF,W			;CARGA EN W EL Nº DIFERENTE QUE CONVIRTIO
		CALL	ENVIAR_USART
;----------------------------------------------------------------------
		CALL	TEXTO
		CALL	ENVIA_TEXTO
		RETURN
;---------------------------GUARDA EN LAS POSICIONES DE MEMORIA LOS DATOS EN CODE 7 SEGMENTOS------------
TEXTO
		MOVF	REG_DIVISOR,W
		CALL	B2_BCD
		MOVF	LSD,W
		CALL	S_SEGMENT
		MOVWF	REG_MEM_DISPLAYS
		MOVF	MSD,W
		CALL	S_SEGMENT
		MOVWF	(REG_MEM_DISPLAYS+.1)
		MOVF	CENT,W
		CALL	S_SEGMENT
		MOVWF	(REG_MEM_DISPLAYS+.2)
		RETURN
;------------------------------------------------------------------------------------------
S_SEGMENT	;PASA A CODE 7 SEGMENTOS
			ADDWF	PCL
			RETLW	0X3F				;------------0
			RETLW	0X06
			RETLW	0X5B
			RETLW	0X4F
			RETLW	0X66
			RETLW	0X6D
			RETLW	0X7D
			RETLW	0X07
			RETLW	0X7F
			RETLW	0X6F
;--------------------------------------------TABLA CON LOS VALORES DE LOS POTENCIOMETROS------------------------------------
VALOR_DE_POTE	
		MOVF	N_POTE,W						;MUEVE N_POTE A W
		ADDWF	PCL								;Y SE LO SUMA AL PCL, ASI INCREMENTA HASTA EL Nº DE POTE QUE CAMBIO
		DT	0XB,0XC,0XD,0XE,0XF,0X10,0X11,0X12	;EN TOTAL 109 POTES CON LAS DOS TABLAS
		DT	0X13,0X14,0X15,0X16,0X17,0X18,0X19
		DT	0X1A,0X1B,0X1C,0X1D,0X1E,0X1F,0X40
		DT	0X41,0X42,0X43,0X44,0X45,0X46,0X47
		DT	0X48,0X49,0X4A,0X4B,0X4C,0X4D,0X4E
		DT	0X4F,0X50,0X51,0X52,0X53,0X54,0X55	
		DT	0X56,0X57,0X58,0X59,0X5A,0X5B,0X5C
		DT	0X5D,0X5E,0X5F,0X60,0X61,0X62,0X63
		DT	0X64,0X65,0X66,0X67,0X68,0X69,0X6A
		DT	0X6B,0X6C,0X6D,0X6E,0X6F,0X70,0X71	
		DT	0X72,0X73,0X74,0X75,0X76,0X77,0X78		
		DT	0X79,0X7F							;96
VALOR_DE_POTE_16BIT	
		ADDWF	PCL								;TABLA PARA POTENCIOMETROS DE 16BIT DE RESOLUCION ¿?¿?¿?¿ COMO SACO DE 10 BIT 16
		DT	0X20								;CONVERSION DE UNA TABLA DE 10 BITS A DOS BYTES DE 7 BITS ?¿?¿?¿?¿
		DT	0X21,0X22,0X23,0X24,0X25,0X26,0X27
		DT	0X28,0X29,0X2A,0X2B,0X2C,0X2D,0X2E
		DT	0X2F,0X30,0X31,0X32,0X33,0X34,0X35
		DT	0X36,0X37,0X38,0X39,0X3A,0X3B,0X3C
		DT	0X3D,0X3E,0X3F
;---------------------------------------------------------------------------------------	
CONFIG_OPTION_REG
		MOVLW	B'11110111'
		MOVWF	OPTION_REG
		RETURN
CONFIG_INTERUPTS
		BSF		STATUS,RP0
		MOVLW	B'00000001'
		MOVWF	PIE1
		movlw	b'01000000'	;activation of the interrupts
		movwf	INTCON		;act. interrupt of timer 0
							;act. interrupt of pb0
							;act. interrupt of the change of state of the pb4-pb7
		RETURN
;--------------------------------------------------------------------------------------------
		
ENVIAR_USART				
		MOVWF	TXREG
		BANKSEL	TXSTA
		BSF		TXSTA,TXEN
		BANKSEL	PIR1
ESPERA_TX
		BTFSS	PIR1,TXIF
		GOTO	ESPERA_TX
		BCF		STATUS,RP0
		BCF		STATUS,RP1
		CALL	RECARGA		
		RETURN			
;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 25/11/2007 Hs 19:21:25
; Descripcion: Delay 25000 ciclos
;-------------------------------------------------------------
DEMORA  movlw     .44       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .141      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------



													             
;--------------------------------------------------------------------------------------------
;CORE J6
;--------------------------------------------------------------------------------------------
CANAL1
	BCF		STATUS,RP0
	BCF		PORTC,0
	NOP		
	NOP
	BCF		PORTC,1
	NOP
	NOP
	BCF		PORTC,2
	RETURN

CANAL2
	BCF		STATUS,RP0
	BSF		PORTC,0
	NOP		
	NOP
	BCF		PORTC,1
	NOP
	NOP
	BCF		PORTC,2
	RETURN
CANAL3
	BCF		STATUS,RP0
	BCF		PORTC,0
	NOP		
	NOP
	BSF		PORTC,1
	NOP
	NOP
	BCF		PORTC,2
	RETURN
CANAL4
	BCF		STATUS,RP0
	BSF		PORTC,0
	NOP		
	NOP
	BSF		PORTC,1
	NOP
	NOP
	BCF		PORTC,2
	RETURN
CANAL5
	BCF		STATUS,RP0
	BCF		PORTC,0
	NOP		
	NOP
	BCF		PORTC,1	
	NOP
	NOP
	BSF		PORTC,2
CANAL6
	BCF		STATUS,RP0
	BSF		PORTC,0
	NOP		
	NOP
	BCF		PORTC,1
	NOP
	NOP
	BSF		PORTC,2
	RETURN

CANAL7
	BCF		STATUS,RP0
	BCF		PORTC,0
	NOP		
	NOP
	BSF		PORTC,1
	NOP
	NOP
	BSF		PORTC,2
	RETURN
	
CANAL8
	BCF		STATUS,RP0
	BSF		PORTC,0
	NOP		
	NOP
	BSF		PORTC,1
	NOP
	NOP
	BSF		PORTC,2
	RETURN	
;-------------------------------------------------------------------------------------------------	
;20 22 21  PATITAS DE SALIDA DISPLAYS MODULO DOUT CORE J8
;-------------------------------------------------------------------------------------------------
;20--> SERIAL OUT FOR MULTIPLEXERS IN PIN14 74595 
;22--> SIGNAL CLOCK 			   IN PIN11 74595
;21--> LATCH					   IN PIN12 74595

		;------------------------------------------------------------
LATCH		BSF		PORTD,2
			NOP
			NOP
			BCF		PORTD,2
			NOP
			NOP
			MOVF	FSR_TEMP2,W
			MOVWF	FSR
			RETURN
;--------------------CONFIGURACION DEL SPI 8BITS CON LAS PATILLAS RA0 Y RA1 ---------------------------------------------

;------------------------------------------------------------------------------------------------------------------------

	;---------------------------------------------------------
ENVIA_TEXTO
		BCF		STATUS,RP0			;PAGE 0
		MOVF	FSR,W
		MOVWF	FSR_TEMP2
		MOVLW	N_REG_OUT					;Nº DE REGISTROS A LA SALIDA
		MOVWF	N_DIGITOS
		MOVLW	REG_MEM_DISPLAYS			;DONDE ESTA EL PRIMER BYTE A SACAR EN SERIE
		MOVWF	FSR
		
ENVIAR_SPI
		MOVF	INDF,W
		MOVWF	REG_ENV_SPI			;DE W A REG_ENV_SPI
		MOVLW	.9					;Nº DE BITS DEL REGISTRO A W 
		MOVWF	N_BITS				;DE W A N_BITS
REMONT		
		DECFSZ	N_BITS				;DECREMENTA Nº DE BITS 8-0
		GOTO	ENVIA_BIT			;SALTA A ENVIA_BIT
   		GOTO	COMPLETA						;RETORNA, NO QUEDAN MAS BITS A ENVIAR

ENVIA_BIT
		RLF		REG_ENV_SPI,F			;ROTA A LA IZQUIERDA Y EL BIT DE MAS PESO VA AL CARRY, A LA SIGUIENTE 
								;ESTE VUELVE A ENTRAR POR EL CARRY;Y CUANDO PASAN 8 BITS VUELVE A DEJAR EL QUE ESTABA
		BTFSC	STATUS,C			;TESTEA SI ES CERO O UNO
		GOTO	ENVIA_UNO			;SI FUE CERO NO SALTA Y VA A ENVIA _UNO
			;--------------ENVIA CERO Y ESPERA NUEVO BIT------------------------------------
ENVIA_CERO							;SI FUE CERO SALTA PARA ENVIAR CERO POR EL SPI
		BCF		PORTD,1				;PONE A CERO RA0
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		BSF		PORTD,3				;CLOCK EN ALTO RA1 PARA ENVIAR DATO
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		BCF		PORTD,1				;PONE A CERO RA0
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		BCF		PORTD,3				;PONE A CERO CLOCK PARA ESPERAR NUEVO DATO
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		GOTO	REMONT						;RETORNA PARA ENVIAR NUEVO BIT
			;--------------ENVIA UNO Y ESPERA NUEVO BIT-----------------------------------
ENVIA_UNO							;SI EL CARRY ESTABA A UNO, NO SALTÓ 
		BSF		PORTD,1				;1 EN DATO
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		BSF		PORTD,3				;CLOCK A UNO PARA ENVIAR DATO
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		BCF		PORTD,1				;PONE A CERO PARA ESPERAR NUEVO DATO
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		BCF		PORTD,3				;PONE A CERO PARA ESPERAR NUEVO DATO
		NOP							;ESPERA PARA ESTABILIZAR
		NOP							;ESPERA PARA ESTABILIZAR
		GOTO	REMONT						;RETORNA PARA ENVIAR NUEVO BIT
COMPLETA
		DECFSZ	N_DIGITOS
		GOTO	OTRO_MAS
		GOTO	LATCH
OTRO_MAS
		INCF	FSR
		GOTO	ENVIAR_SPI 
;-------------------------------------------------------------------------------------------------
;CONVERSION DE BINARIO A BCD
;DECLARACIONES---------CENT , MSD , LSD --------------------------------------------------------------------------- 
B2_BCD 
  		CLRF CENT       ;CENTENAS 
 	 	clrf MSD        ;DECENAS 
  		movwf LSD       ;UNIDADES 
gtenth 
		movlw .10 
  		subwf LSD,W 
  		BTFSS STATUS,C 
  		goto OVERHAUL 
  		movwf LSD 
  		incf MSD, F 
  		goto gtenth 
OVERHAUL 
  		MOVLW .10 
  		SUBWF MSD,W 
  		BTFSS STATUS,C 
  		GOTO OVER 
  		MOVWF MSD 
  		INCF CENT,F 
  		GOTO OVERHAUL 
OVER 
  		RETLW 0


;-------------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------------
INTERRUPCION
			MOVWF	W_TEMP
			SWAPF	STATUS,W
			CLRF	STATUS
			MOVWF	STATUS_TEMP
			MOVF	PCLATH,W
			MOVWF	PCLATH_TEMP
			CLRF	PCLATH
			MOVF	FSR,W
			MOVWF	FSR_TEMP



			BTFSC	PIR1,RCIF
			CALL	INT_RX_USART
			BTFSC	PIR1,TXIF
			GOTO	INT_TX_USART
			BTFSC	INTCON,T0IF
			GOTO	INT_TMR0
			BTFSC	INTCON,INTF
			GOTO	INT_RB0
			BTFSC	INTCON,RBIF
			GOTO	INT_TECLA
			BTFSC	PIR1,PSPIF
			GOTO	INT_P_PARALELO	
			BTFSC	PIR1,ADIF
			GOTO	INT_ADC
			BTFSC	PIR1,SSPIF
			GOTO	INT_SSP
			BTFSC	PIR1,CCP1IF
			GOTO	INT_CCP1
			BTFSC	PIR1,TMR2IF
			GOTO	INT_TMR2
			BTFSC	PIR1,TMR1IF
			CALL	INT_TMR1
			BTFSC	PIR2,EEIF
			GOTO	INT_EEPROM
			BTFSC	PIR2,BCLIF
			GOTO	INT_COL_BUS
			BTFSC	PIR2,CCP2IF
			GOTO	INT_CCP2
			GOTO	FIN_INT
			
INT_TMR0	
			
			GOTO	FIN_INT

INT_RB0	
			GOTO	FIN_INT

INT_TECLA	
			GOTO	FIN_INT		
			
INT_P_PARALELO	
			GOTO	FIN_INT
			
INT_ADC	
			GOTO	FIN_INT			
			
INT_RX_USART
			RETURN			
			
			
INT_TX_USART
			GOTO	FIN_INT	
			
INT_SSP
			GOTO	FIN_INT
			
INT_CCP1
			GOTO	FIN_INT	
			
INT_TMR2
			GOTO	FIN_INT
			
INT_TMR1	
			MOVLW	ACTIVE_SENSING
			CALL	ENVIAR_USART

			BCF		STATUS,RP0
			BCF		STATUS,RP1	
			movf	b'01011101',w
			movwf	TMR1L
			movf	B'01011101',W
			movwf	TMR1H
			RETURN
			
INT_EEPROM
			GOTO	FIN_INT	
			
INT_COL_BUS
			GOTO	FIN_INT	
			
INT_CCP2
			GOTO	FIN_INT
						
FIN_INT		
			CALL	CONFIG_INTERUPTS
			BCF		STATUS,RP0
			CLRF	PIR1
			CLRF	PIR2
			BCF		INTCON,T0IF
			BCF		INTCON,INTF
			BCF		INTCON,RBIF
			MOVF	FSR_TEMP,W
			MOVWF	FSR			
			MOVF	PCLATH_TEMP,W
			MOVWF	PCLATH
			SWAPF	STATUS_TEMP,W
			MOVWF	STATUS
			SWAPF	W_TEMP,F
			SWAPF	W_TEMP,W			
			RETFIE					;PONE A UNO GIE
;----------------------------------------------------------------------------------------------------			
			
INICIO		BCF		PCLATH,3
			BCF		PCLATH,4

			BSF		STATUS,RP0	;PAGE 1
			BCF		STATUS,RP1
;-------------------------------------------
			CALL	CONFIG_TRISA
			CALL	CONFIG_TRISB
			CALL	CONFIG_TRISC
			CALL	CONFIG_TRISD
			CALL	CONFIG_TRISE
;-------------------------------------------
			CALL	CONFIG_OPTION_REG
;-------------------------------------------
			CALL	CONFIG_ADCON1	
;-------------------------------------------	
			CALL	CONFIG_TMR1	
;-------------------------------------------
			BANKSEL	PIE1
			BSF		PIE1,RCIE
			BANKSEL	INTCON
			CLRF	INTCON
			BSF		INTCON,PEIE
			BSF		INTCON,GIE						
			BCF		STATUS,RP0	;PAGE 0
			BCF		STATUS,RP1
			
			CLRF	PORTD
			
			CALL	CONFIG_RS232

			CALL	CONFIG_INTERUPTS
			BSF		INTCON,GIE
			NOP
			NOP
PROGRAMA	
			CALL	CANAL1				;CANAL 1 DEL MULTIPLEXOR		
			MOVLW	DIRECCION_POTES
;1 CANAL1
			MOVWF	FSR					;0X30
			CLRF	N_POTE				;Nº DE POTE CERO IGUAL 0XAO EN LA TABLA DE FUNCIONES
			MOVLW	B'10000101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
;2

			INCF	FSR					;SIGUIENTE DIRECCION PARA POTE
			INCF	N_POTE				;SIGUIENTE Nº DE POTE
			MOVLW	B'10001101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
;3

			INCF	FSR					;SIGUIENTE DIRECCION PARA POTE
			INCF	N_POTE				;SIGUIENTE Nº DE POTE
			MOVLW	B'10010101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
;4

			INCF	FSR					;SIGUIENTE DIRECCION PARA POTE
			INCF	N_POTE				;SIGUIENTE Nº DE POTE
			MOVLW	B'10011101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
;5

			INCF	FSR					;SIGUIENTE DIRECCION PARA POTE
			INCF	N_POTE				;SIGUIENTE Nº DE POTE
			MOVLW	B'10100101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
;6

			INCF	FSR					;SIGUIENTE DIRECCION PARA POTE
			INCF	N_POTE				;SIGUIENTE Nº DE POTE
			MOVLW	B'10101101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
;7

			INCF	FSR					;SIGUIENTE DIRECCION PARA POTE
			INCF	N_POTE				;SIGUIENTE Nº DE POTE
			MOVLW	B'10110101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
;8
			INCF	FSR					;SIGUIENTE DIRECCION PARA POTE
			INCF	N_POTE				;SIGUIENTE Nº DE POTE
			MOVLW	B'10111101'			;A W 
			CALL	CANAL_AD_X			;CANALx DEL CAD
			CALL	ENCIENDE_CAD		;ENCIENDE EL CAD DIVIDE EL RESULTADO Y LO COMPARA CON INDF
			MOVLW	DIRECCION_POTES
			MOVWF	FSR					;0X30
			CLRF	N_POTE				;Nº DE POTE CERO IGUAL 0XAO EN LA TABLA DE FUNCIONES
			GOTO    PROGRAMA

			
			END

			
