;*************************************************************************
;titulo    : 	Mini consola de 6 canales DMX para formar colores fijos con led RGB u 
;		otros usos 
;Archivo   :	MiniCon6.asm
;Version  :	V1.0
;Revision  :	31/07/10
;Desarrollo:	Juan Navarro
;Metodo    :	RT
;*************************************************************************
;Notas	    :	este control tiene 3 sw uno cambia de funcion osea los 6 canales y los otros 2
;		son el down-up. se programa cada uno de los 6 canales en forma 
;		independiente, la salida esta seteada en canal1 osea el equipo a controlar
;		debemos programarlo en canal 1			
;*************************************************************************
	list P=16f628,r=hex
	include"picf628.inc"
	include"picmacro.h"
	errorlevel -302 
;===============================
;Fusibles de configuracion

;activar la proteccin de codigo
	__config _BODEN_ON & _CP_OFF & _DATA_CP_OFF &  _PWRTE_ON & _WDT_OFF & _LVP_OFF  &_MCLRE_ON & _HS_OSC
;===============================
;Definición de la RAM
	cblock	0x20

WBack,STATUSBack,FSRBack,PCLATHBack
EstadoT,TempT,EstadoF,TempF
Tic1ms,Tic10ms,Tic100ms,Tic1seg,Tic1min
Tiempo40us,Tiempo1ms,Tiempo10ms,Tiempo100ms,Tiempo1seg,Tiempo1min
ChTxH,ChTxL
PtrTxBuffer :,ProgCanal1,ProgCanal2,ProgCanal3,ProgCanal4,ProgCanal5,ProgCanal6
cnt512L,cnt512H,cntCanales
FlagLed
FlagLedBlink
Flag
FlagTarea,FlagSw
cntSwU,cntSwUAr,cntSwDAr,cntSwF,cntSwD
cntLedCanal1,cntLedCanal2,cntLedCanal3,cntLedCanal4,cntLedCanal5,cntLedCanal6
ProgCanal1Temp,ProgCanal2Temp,ProgCanal3Temp
ProgCanal4Temp,ProgCanal5Temp,ProgCanal6Temp
TimeOut
	endc
;======================
;Definiciones del PORTA

#define	pOA	PORTA,2
#define	pISwD	PORTA,1
#define	pOB	PORTA,3
#define	pOC	PORTA,0
#define	pISwU	PORTA,4

#define	DIRAHIZA	b'00010110'	;pone alta impedancia pOA
#define	DIRAHIZB	b'00011010'	;pone alta impedancia pOB
#define	DIRAHIZC	b'00010011'	;pone alta impedancia pOC

#define	DIRA	b'00010010'
;======================
;Definiciones del PORTB

#define	pISwF		PORTB,5
#define	pOTxDmx	PORTB,2
#define	pOBreak	PORTB,3

#define	DIRB	b'00100000'
;======================
;Otros Registros especiales

#define	DIROPT	b'10001000'		;Inicio OPTION
;======================
;Definición de Tiempos
;................................................
;................................................
#define	TMBB		.4		;tiempo antes del beak para la transmision DMX(40us)
#define	TBREAK	.10		;tiempo de break(40us)
#define	TMAB		.4		;tiempo despues del break(40us)
#define	TBYTES		.5		;tiempo entre bytes de informacion
;................................................
#define	TTIMEOUT	.20	;tiempo de time out de teclado(1seg)
;#define	TSWAUTOREP	d'20'	;tiempo de sw auto rep para subir o bajar colores rgb(10ms)pasos.8
#define	TSWAUTOREP	d'5'	;tiempo de sw auto rep para subir o bajar colores rgb(10ms)pasos.1  
;................................................
#define	TTLED		d'30'
#define	TLED		d'15'
;======================
;Definición de los flags
;................................................
#define	fTareaT	FlagTarea,0
#define	fTareaF		FlagTarea,1
;................................................
#define	fIgualChTx	Flag,1
;................................................
#define	fSwUAr		FlagSw,0
#define	fSwU		FlagSw,1
#define	fSwF		FlagSw,2
#define	fSwD		FlagSw,3
#define	fSwDAr		FlagSw,4
#define	fSwTo		FlagSw,5
;................................................
#define	fLedCanal1	FlagLed,0
#define	fLedCanal2	FlagLed,1
#define	fLedCanal3	FlagLed,2
#define	fLedCanal4	FlagLed,3
#define	fLedCanal5	FlagLed,4
#define	fLedCanal6	FlagLed,5
;................................................
#define	fLedCanal1Blink		FlagLedBlink,0
#define	fLedCanal2Blink		FlagLedBlink,1
#define	fLedCanal3Blink		FlagLedBlink,2
#define	fLedCanal4Blink		FlagLedBlink,3
#define	fLedCanal5Blink		FlagLedBlink,4
#define	fLedCanal6Blink		FlagLedBlink,5
;======================
;Definición de Literales
;................................................
#define	BASE1MS	d'16'	
#define	BASE10MS	d'10'	
#define	BASE100MS	d'10'	
#define	BASE1SEG	d'10'	
#define	BASE1MIN	d'60'
;................................................
#define	PASOS		.1	;pasos de incremento de los colores,(.8 solo tachos chiqui)
;................................................ 
#define	CANALESTX	.6	;cantidad de canales asignados para la transmision
;................................................
#define CANALTXOUT_H	.0	;setea el primer canal a transmitir osea el canal de salida
#define CANALTXOUT_L	.1	;tiene parte alta y baja 
;................................................
#define	PROGCANAL1INI	.0	;valor ini de color Canal1  
#define	PROGCANAL2INI	.0	;valor ini de color Canal2 
#define	PROGCANAL3INI	.0	;valor ini de color Canal3 
#define	PROGCANAL4INI	.0	;valor ini de color Canal4
#define	PROGCANAL5INI	.0	;valor ini de color Canal5 
#define	PROGCANAL6INI	.0	;valor ini de color Canal6 
;carga de valores iniciales en la EEPROM cuando graba el micro
	org	0x2103
	de	PROGCANAL1INI,PROGCANAL2INI,PROGCANAL3INI
	de	PROGCANAL4INI,PROGCANAL5INI,PROGCANAL6INI
;................................................	  
;======================
;Literales posicion de memoria EE
#define	POSEEPROGCANAL1 	d'3'	;pos ee guarda el valor del color Canal1 
#define	POSEEPROGCANAL2	d'4'	;pos ee guarda el valor del color Canal2 
#define	POSEEPROGCANAL3	d'5'	;pos ee guarda el valor del color Canal3
#define	POSEEPROGCANAL4 	d'6'	;pos ee guarda el valor del color Canal4 
#define	POSEEPROGCANAL5	d'7'	;pos ee guarda el valor del color Canal5 
#define	POSEEPROGCANAL6	d'8'	;pos ee guarda el valor del color Canal6  
;======================
;Literales maquina de estados T
	cblock	0x00
ET0,ET1,ET2,ET3,ET4,ET5,ET6,ET7,ET8,ET9,ET10,ET11,ET12,ET13,ET14,ET15
	endc
;======================
;Literales maquina de estados F
	cblock	0x00
EF0,EF1,EF2,EF3,EF4,EF5,EF6,EF7,EF8
EF10,EF20,EF30,EF40,EF50,EF60,EF70,EF80
EF100,EF200,EF300,EF400,EF500,EF600,EF700,EF800
EF1000,EF2000,EF3000,EF4000,EF5000,EF6000,EF7000,EF8000
EF1A,EF2A,EF3A,EF4A,EF5A,EF6A,EF7A,EF8A
EF1B,EF2B,EF3B,EF4B,EF5B,EF6B,EF7B,EF8B
	endc
;======================
;Definición Macros lectura escritura EE 

movleel	macro	literal,eedir	;mueve literal a EEPROM (literal)
	movlw	literal         ;carga un literal en una direccion 
	bank1                   ;de memoria EE apuntada por literal
	movwf	EEDATA          ;este macro esta hecho para el 16f8xx
	bank0                   ;para usarlo con el 16f8x quitar
	movlw	eedir           ;bank2 y bank0.Para 16f62x reemplazar
	call 	Wree		;bank2 por bank1
	endm	
;---------------------------------------------------------------------------
movleef	macro	literal,eedir   ;mueve literal a EEPROM (file)
	movlw	literal         ;carga un literal en la direccion
	bank1                   ;de memoria EE apuntada por file
	movwf	EEDATA          ;este macro esta hecho para el 16f8xx
        bank0                   ;para usarlo con el 16f8x quitar
	movf	eedir,w         ;bank2 y bank0.Para 16f62x reemplazar
	call	Wree		;bank2 por bank1
	endm
;---------------------------------------------------------------------------
movfeel	macro	file,eedir	;mueve file a EEPROM (literal)
	movf 	file,W          ;carga el contenido de file a la
	bank1                   ;direccion apuntada por literal
	movwf	EEDATA          ;este macro esta hecho para el 16f8xx
	bank0                   ;para usarlo con el 16f8x quitar
	movlw	eedir           ;bank2 y bank0.Para 16f62x reemplazar
	call 	Wree            ;bank2 por bank1
	endm                    
;---------------------------------------------------------------------------
movfeef	macro	file,eedir	;mueve file a EEPROM (file)
	movf	file,w   	;carga el contenido del registro
	bank1			;en una direccion EE apuntada por file
	movwf	EEDATA		;este macro esta hecho para el 16f8xx
	bank0         		;para usarlo con el 16f8x quitar
	movf	eedir,w		;bank2 y bank0.Para 16f62x reemplazar
	call	Wree		;bank2 por bank1
	endm
;-------------------------------------------------------------------------- 
moveeff	macro	eedir,file	;mueve EEPROM (file) a file
	movf	eedir,w         ;lee la direccion que contiene el registro eedir
	call	Rdeew  		;y lo descarga en file
        movwf	file		;este macro se puede usar para 16f8xx y 16f8x
        endm    		;sin hacerle ninguna modificacion
;---------------------------------------------------------------------------
moveelf	macro	eedir,file	;mueve EEPROM (literal) a file
	movlw	eedir		;lee la direccion apuntada por un literal
	call	Rdeew		;y la descarga en file
	movwf	file            ;este macro se puede usar para 16f8xx y 16f8x
        endm 			;sin hacerle ninguna modificacion
;**************************
;	R E S E T
;**************************
Riset	org	0x00
	goto	Begin
	org	0x04	
	mIntProlog
	bcf	T0IF		
	goto	ServInt
;======================
;Inicializacion RAM
;======================
;Inicializacion de la RAM con direccionamiento indirecto mediante el IRP           
	org	0x10	
Begin                 
	clrf	STATUS		;Bank0
	movlw	0x20		;1er direc en bank0
	movwf	FSR			
Bank0_Lp
	clrf	INDF
	incf	FSR,f
	btfss	FSR,7
	goto	Bank0_Lp 
;................................................
	movlw	0xA0		;Comienzo de borrado del bank1
	movwf	FSR
Bank1_Lp
	clrf	INDF
	incf	FSR,f
	movf	FSR,f
	btfss	_Z
	goto	Bank1_Lp
;................................................
	bsf	IRP		;selecciono bank2 y bank3
	movlw	0x20
	movwf	FSR
Bank2_Lp
	clrf	INDF
	incf	FSR,f
	btfss	FSR,7
	goto	Bank2_Lp
;................................................
	movlw	0xF0
	movwf	FSR
Bank3_Lp
	clrf	INDF
	incf	FSR,f
	movf	FSR,f
	btfss	_Z
	goto	Bank3_Lp
	bcf	IRP		;Selecciono bank0 y bank1
;======================
;Inicializacion de registros
;======================
	bank0
	clrf	PORTA
	movlwf	b'00000111',CMCON
	clrf	PORTB
	bank1
	movlw	DIRA		
	movwf	TRISA
	movlw	DIRB		
	movwf	TRISB
	movlw	DIROPT		
	movwf	OPTION_REG
	clrf	PIE1
	clrf	EECON1
	clrf	VRCON
;------------------------------------ 	SETEO DE LA USART	
	movlw	d'3'		;cargo 3 para 250k baudios a 16Mhz y BRG=1
	movwf	SPBRG	
	movlw	b'01100101'	
	movwf	TXSTA	
	bank0   
	movlw	b'11010000'
	movwf	RCSTA
;------------------------------------	
	clrf	PIR1
	clrf	CCP1CON
	clrf	INTCON
	clrf	TMR0
	bsf	T0IE
	bsf	GIE
	reset1min
;------------------------------------	INICIO DE LECTURA EEPROM
InicioEE
	moveelf	POSEEPROGCANAL1,ProgCanal1
	moveelf	POSEEPROGCANAL2,ProgCanal2
	moveelf	POSEEPROGCANAL3,ProgCanal3
	moveelf	POSEEPROGCANAL4,ProgCanal4
	moveelf	POSEEPROGCANAL5,ProgCanal5
	moveelf	POSEEPROGCANAL6,ProgCanal6
;------------------------------------	
	movlwf	CANALTXOUT_H,ChTxH	;aca inicializo el primer canal a transmitir probar hacerlo en
	movlwf	CANALTXOUT_L,ChTxL	;la tarea de tx dmx
	clrf	EstadoF	
	clrf	EstadoT		
	goto	Main
;**************************
;	S U B R R U T I N A S
;**************************
Wree
	bank1
	movwf	EEADR
	bsf	WREN
	bcf	GIE
	movlw	0x55
	movwf	EECON2
	movlw	0xAA
	movwf	EECON2
	bsf  	WR
	bsf	GIE
	bcf  	WREN
	bank0
	btfss	EEIF
	goto	$-1	
	bcf  	EEIF
	return	
;------------------------------------
;Lectura en EE
Rdeew
	bank1
	movwf	EEADR
	bsf	RD
	movf	EEDATA,w
	bank0
	return
;**************************
;	I N T E R R U P C I O N
;************************** 
ServInt					;comienzo servicio de interrupción
	movlw	d'99'			;acomodo TMR0 para 160 ciclos de instruccion
	addwf	TMR0,f
;======================
;cada 40us				M O D U L O   4 0   u s
;................................................
	
;................................................
;======================
	movf	Tiempo40us,f
	btfss	_Z
	decf	Tiempo40us,f
;======================
	decfsz	Tic1ms,f		;comienzo modulo de 1ms
	goto	FinTimer
	movlwf	BASE1MS,Tic1ms
	movf	Tiempo1ms,f
	btfss	_Z
	decf	Tiempo1ms,f
;cada 1ms
;................................................
;................................................	cada 1ms
;Antirebote activa low del SW FUNCION
	bbs	pISwF,NoSwF		
	bagtel	cntSwF,.25,FinSwF
	incf	cntSwF,f
	banel	cntSwF,.25,FinSwF
	bsf	fSwF
	goto	FinSwF
NoSwF
	movf	cntSwF,f
	bbs	_Z,FinSwF
	decfsz	cntSwF,f
	goto	FinSwF
	bcf	fSwF
FinSwF
;................................................	cada 1ms
;................................................
;======================
	decfsz	Tic10ms,f		;comienzo modulo de 10ms	
	goto	FinTimer	
	movlwf	BASE10MS,Tic10ms	
	movf	Tiempo10ms,f	
	btfss	_Z
	decf	Tiempo10ms,f
;cada 10ms
;................................................
;................................................	cada 10ms
;Antirebote activa low del SW D
	bbs	pISwD,NoSwD		
	bagtel	cntSwD,d'3',SiSwDAr
	incf	cntSwD,f
	banel	cntSwD,d'3',FinSwD
	bsf	fSwD
	goto	FinSwD
SiSwDAr
	bagtel	cntSwDAr,d'100',FinSwD
	incf	cntSwDAr,f
	banel	cntSwDAr,d'100',FinSwD
	bsf	fSwDAr
	goto	FinSwD
NoSwD
	movf	cntSwD,f
	bbs	_Z,FinSwD
	decfsz	cntSwD,f
	goto	FinSwD
	bcf	fSwD
	bcf	fSwDAr
	clrf	cntSwDAr
FinSwD
;................................................	cada 10ms
;Antirebote activa low del SW U
	bbs	pISwU,NoSwU		
	bagtel	cntSwU,d'3',SiSwUAr
	incf	cntSwU,f
	banel	cntSwU,d'3',FinSwU
	bsf	fSwU
	goto	FinSwU
SiSwUAr
	bagtel	cntSwUAr,d'100',FinSwU
	incf	cntSwUAr,f
	banel	cntSwUAr,d'100',FinSwU
	bsf	fSwUAr
	goto	FinSwU
NoSwU
	movf	cntSwU,f
	bbs	_Z,FinSwU
	decfsz	cntSwU,f
	goto	FinSwU
	bcf	fSwU
	bcf	fSwUAr
	clrf	cntSwUAr
FinSwU
;................................................	cada 10ms
;................................................
;esta rutina la uso por si el led debe indicar otras funciones
;por ejemplo si el led lo tengo que dejar encendido porque lo uso para
;indicar otra cosa la rutina no lo apaga. 
	bbs	fLedCanal1,PreguntaBlink
	goto	NoLedCanal1
PreguntaBlink
	bbs	fLedCanal1Blink,SiBlink
	bank1			;enciende Led1 indicador de canal1 
	movlw	DIRAHIZB
	movwf	TRISA
	bank0
	bsf	pOA		
	bcf	pOC
	goto	NoLedCanal1
SiBlink	
	decfsz	cntLedCanal1,f	;comienzo parpadeo led 
	goto	PreguntaLedCanal1
	movlwf	TTLED,cntLedCanal1
	goto	FinLedCanal1
PreguntaLedCanal1
	bagtl	cntLedCanal1,TLED,LedCanal1Off
	bank1			;enciende Led1 indicador de canal1
	movlw	DIRAHIZB
	movwf	TRISA
	bank0
	bsf	pOA		
	bcf	pOC
	goto	FinLedCanal1
LedCanal1Off	
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
	goto	FinLedCanal1
NoLedCanal1	
	movlwf	TLED,cntLedCanal1
FinLedCanal1		
;................................................
;................................................
;encendido y blink led Canal2
	bbs	fLedCanal2,PreguntaBlinkCanal2
	goto	NoLedCanal2
PreguntaBlinkCanal2
	bbs	fLedCanal2Blink,SiBlinkCanal2
	bank1			;enciende Led2 indicador de canal2
	movlw	DIRAHIZB
	movwf	TRISA
	bank0
	bcf	pOA		
	bsf	pOC
	goto	NoLedCanal2
SiBlinkCanal2	
	decfsz	cntLedCanal2,f
	goto	PreguntaLedCanal2
	movlwf	TTLED,cntLedCanal2
	goto	FinLedCanal2
PreguntaLedCanal2
	bagtl	cntLedCanal2,TLED,LedCanal2Off
	bank1			;enciende Led2 indicador de canal2
	movlw	DIRAHIZB
	movwf	TRISA
	bank0
	bcf	pOA		
	bsf	pOC
	goto	FinLedCanal2
LedCanal2Off	
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
	goto	FinLedCanal2
NoLedCanal2	
	movlwf	TLED,cntLedCanal2
FinLedCanal2		
;................................................
;encendido y blink led Canal3
	bbs	fLedCanal3,PreguntaBlinkCanal3
	goto	NoLedCanal3
PreguntaBlinkCanal3
	bbs	fLedCanal3Blink,SiBlinkCanal3
	bank1			;enciende Led3 indicador de canal3
	movlw	DIRAHIZC
	movwf	TRISA
	bank0
	bcf	pOA		
	bsf	pOB
	goto	NoLedCanal3
SiBlinkCanal3	
	decfsz	cntLedCanal3,f
	goto	PreguntaLedCanal3
	movlwf	TTLED,cntLedCanal3
	goto	FinLedCanal3
PreguntaLedCanal3
	bagtl	cntLedCanal3,TLED,LedCanal3Off
	bank1			;enciende Led3 indicador de canal3
	movlw	DIRAHIZC
	movwf	TRISA
	bank0
	bcf	pOA		
	bsf	pOB
	goto	FinLedCanal3
LedCanal3Off	
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
	goto	FinLedCanal3
NoLedCanal3	
	movlwf	TLED,cntLedCanal3
FinLedCanal3		
;................................................
;encendido y blink led Canal4
	bbs	fLedCanal4,PreguntaBlinkCanal4
	goto	NoLedCanal4
PreguntaBlinkCanal4
	bbs	fLedCanal4Blink,SiBlinkCanal4
	bank1			;enciende Led4 indicador de canal4
	movlw	DIRAHIZC
	movwf	TRISA
	bank0
	bsf	pOA		
	bcf	pOB
	goto	NoLedCanal4
SiBlinkCanal4	
	decfsz	cntLedCanal4,f
	goto	PreguntaLedCanal4
	movlwf	TTLED,cntLedCanal4
	goto	FinLedCanal4
PreguntaLedCanal4
	bagtl	cntLedCanal4,TLED,LedCanal4Off
	bank1			;enciende Led4 indicador de canal4
	movlw	DIRAHIZC
	movwf	TRISA
	bank0
	bsf	pOA		
	bcf	pOB
	goto	FinLedCanal4
LedCanal4Off	
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
	goto	FinLedCanal4
NoLedCanal4	
	movlwf	TLED,cntLedCanal4
FinLedCanal4
;................................................	
;encendido y blink led Canal5
	bbs	fLedCanal5,PreguntaBlinkCanal5
	goto	NoLedCanal5
PreguntaBlinkCanal5
	bbs	fLedCanal5Blink,SiBlinkCanal5
	bank1			;enciende Led5 indicador de canal5
	movlw	DIRAHIZA
	movwf	TRISA
	bank0
	bsf	pOB		
	bcf	pOC
	goto	NoLedCanal5
SiBlinkCanal5	
	decfsz	cntLedCanal5,f
	goto	PreguntaLedCanal5
	movlwf	TTLED,cntLedCanal5
	goto	FinLedCanal5
PreguntaLedCanal5
	bagtl	cntLedCanal5,TLED,LedCanal5Off
	bank1			;enciende Led5 indicador de canal5
	movlw	DIRAHIZA
	movwf	TRISA
	bank0
	bsf	pOB		
	bcf	pOC
	goto	FinLedCanal5
LedCanal5Off	
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
	goto	FinLedCanal5
NoLedCanal5	
	movlwf	TLED,cntLedCanal5
FinLedCanal5	
;................................................	
;encendido y blink led Canal6
	bbs	fLedCanal6,PreguntaBlinkCanal6
	goto	NoLedCanal6
PreguntaBlinkCanal6
	bbs	fLedCanal6Blink,SiBlinkCanal6
	bank1			;enciende Led6 indicador de canal6
	movlw	DIRAHIZA
	movwf	TRISA
	bank0
	bcf	pOB		
	bsf	pOC
	goto	NoLedCanal6
SiBlinkCanal6	
	decfsz	cntLedCanal6,f
	goto	PreguntaLedCanal6
	movlwf	TTLED,cntLedCanal6
	goto	FinLedCanal6
PreguntaLedCanal6
	bagtl	cntLedCanal6,TLED,LedCanal6Off
	bank1			;enciende Led6 indicador de canal6
	movlw	DIRAHIZA
	movwf	TRISA
	bank0
	bcf	pOB		
	bsf	pOC
	goto	FinLedCanal6
LedCanal6Off	
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
	goto	FinLedCanal6
NoLedCanal6	
	movlwf	TLED,cntLedCanal6
FinLedCanal6					
;======================
	decfsz	Tic100ms,f		;comienzo modulo de 100ms	
	goto	FinTimer
	movlwf	BASE100MS,Tic100ms
	movf	Tiempo100ms,f
	btfss	_Z
	decf	Tiempo100ms,f		
;cada 100ms
;................................................
;................................................
;======================
	decfsz	Tic1seg,f		;comienzo modulo de 1seg
	goto	FinTimer
	movlwf	BASE1SEG,Tic1seg
	movf	Tiempo1seg,f
	btfss	_Z
	decf	Tiempo1seg,f
;cada 1seg
;................................................
;................................................
;======================
;	decfsz	Tic1min,f		;comienzo modulo de 1min
;	goto	FinTimer
;	movlwf	BASE1MIN,Tic1min
;	movf	Tiempo1min,f
;	btfss	_Z
;	decf	Tiempo1min,f
;cada 1min
;................................................
;................................................
;======================	
FinTimer				;fin del TIMER
	mIntEpilog
	retfie
;**************************
;	M A I N
;**************************
Main
;======================
;	T A R E A   T      			T R A N S M I T E   D M X   esta es la que funciona						
;======================
TareaT				
;	bbc	fTareaT,FinTareaT	;pregunto si entro a la tarea
;................................................
DespachadorT				;comienzo despachador TareaT
	movfwf	EstadoT,TempT
	movlwf	High TablaDespT,PCLATH
	movlw	Low TablaDespT
	addwf	TempT,w
	btfsc	_C
	incf	PCLATH,F
	movwf	PCL
;................................................
TablaDespT			;Tabla del despachador B 
	goto	EstadoT0
	goto	EstadoT1
	goto	EstadoT2
	goto	EstadoT3
	goto	EstadoT4
;................................................
EstadoT0
	bank1
	bsf	TRISB,3
	bank0
	movlwf	TMAB,Tiempo40us	;cargo tiempo de MAB
	incf	EstadoT,f
	goto	FinTareaT
;................................................	
EstadoT1
	movf	Tiempo40us,f	;espero fin tiempo MAB
	bbc	_Z,FinTareaT	
	clrf	cnt512L			;inicializo registros
	incf	cnt512L,f
	clrf	cnt512H
	clrf	cntCanales
	movlw	PtrTxBuffer		;cargo puntero del descriptor
	movwf	FSR	
	clrf	Flag
	clrf	TXREG	
	movlwf	TBYTES,Tiempo40us	;cargo Tiempo TBYTES
	incf	EstadoT,f		 
	goto	FinTareaT
;................................................
EstadoT2
	movf	Tiempo40us,f		;espero fin tiempo de BYTES
	bbc	_Z,FinTareaT
	btfsc	cnt512H,1
	goto	FinTx
	bbc	TXIF,FinTareaT
	btfsc	fIgualChTx
	goto	CargoDatoTx
	baneb	cnt512L,ChTxL,CargaCero	;pregunto si cnt512L es igual a canal L tx	
	baneb	cnt512H,ChTxH,CargaCero	;pregunto si cnt512H es igual a canal H tx	
	bsf	fIgualChTx			;activo flag que me indica que es igual al 1º ch tx
CargoDatoTx
	bael	cntCanales,CANALESTX,CargaCero
	movfwf	INDF,TXREG
	incf	FSR,f
	incf	cntCanales,f
	goto	IncrementaCanal
CargaCero
	clrf	TXREG
IncrementaCanal
	incf	cnt512L,f
	btfsc	_Z
	incf	cnt512H,f	
	movlwf	TBYTES,Tiempo40us	
	goto	FinTareaT
FinTx	
	movlwf	TMBB,Tiempo40us	;cargo tiempo de MBB
	incf	EstadoT,f
	goto	FinTareaT
;................................................	
EstadoT3
	movf	Tiempo40us,f		;espero fin tiempo de MBB
	bbc	_Z,FinTareaT
	movlwf	TBREAK,Tiempo40us	;cargo tiempo de BREAK
	bank1
	bcf	TRISB,3
	bank0
	bcf	pOBreak
	incf	EstadoT,f
	goto	FinTareaT
;................................................
EstadoT4	
	movf	Tiempo40us,f		;espero fin de BREAK
	bbc	_Z,FinTareaT
	movlwf	ET0,EstadoT
	goto	FinTareaT
;................................................
FinTareaT
	goto	TareaF
;======================
;	T A R E A   F       								
;======================
TareaF
;	bbc	fTareaF,FinTareaF
	bbs	fSwF,CargaTimeOut
	bbs	fSwU,CargaTimeOut
	bbc	fSwD,DecreTimeOut
CargaTimeOut			
	movlwf	TTIMEOUT,Tiempo1seg
	goto	FinTimeOut
DecreTimeOut
	movf	Tiempo1seg,f
	bbc	_Z,FinTimeOut
	clrf	EstadoF
	bcf	fLedCanal1
	bcf	fLedCanal2
	bcf	fLedCanal3
	bcf	fLedCanal4
	bcf	fLedCanal5
	bcf	fLedCanal6
	bcf	fLedCanal1Blink
	bcf	fLedCanal2Blink
	bcf	fLedCanal3Blink
	bcf	fLedCanal3Blink
	bcf	fLedCanal4Blink
	bcf	fLedCanal5Blink
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
FinTimeOut
;................................................
DespachadorF			;comienzo despachador TareaA
	movfwf	EstadoF,TempF
	movlwf	High TablaDespF,PCLATH
	movlw	Low TablaDespF
	addwf	TempF,w
	btfsc	_C
	incf	PCLATH,F
	movwf	PCL
;................................................
TablaDespF			;Tabla del despachador 
	goto	EstadoF0
	goto	EstadoF1
	goto	EstadoF2
	goto	EstadoF3
	goto	EstadoF4
	goto	EstadoF5
	goto	EstadoF6
	goto	EstadoF7
	goto	EstadoF8
;------------------------------------	
	goto	EstadoF10
	goto	EstadoF20
	goto	EstadoF30
	goto	EstadoF40
	goto	EstadoF50
	goto	EstadoF60
	goto	EstadoF70
	goto	EstadoF80
;------------------------------------
	goto	EstadoF100
	goto	EstadoF200
	goto	EstadoF300
	goto	EstadoF400
	goto	EstadoF500
	goto	EstadoF600
	goto	EstadoF700
	goto	EstadoF800
;------------------------------------
	goto	EstadoF1000
	goto	EstadoF2000
	goto	EstadoF3000
	goto	EstadoF4000
	goto	EstadoF5000
	goto	EstadoF6000
	goto	EstadoF7000
	goto	EstadoF8000
;------------------------------------
	goto	EstadoF1A
	goto	EstadoF2A
	goto	EstadoF3A
	goto	EstadoF4A
	goto	EstadoF5A
	goto	EstadoF6A
	goto	EstadoF7A
	goto	EstadoF8A
;------------------------------------
	goto	EstadoF1B
	goto	EstadoF2B
	goto	EstadoF3B
	goto	EstadoF4B
	goto	EstadoF5B
	goto	EstadoF6B
	goto	EstadoF7B
	goto	EstadoF8B
;................................................	C A N A L   1 
EstadoF0		
	bbc	fSwF,FinTareaF		;empieza a esperar que entre en funcion
	bsf	fLedCanal1		;prendo led porque entro en funcion y la primera es
	incf	EstadoF,f		;el Canal1
	goto	FinTareaF
;................................................
EstadoF1
	bbs	fSwF,FinTareaF		;espero a que el sw de funcion sea off
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF2
	bbc	fSwU,EF2_0		;pregunto si sw up 
	incf	EstadoF,f		;voy a incrementar Canal1
	goto	FinTareaF
EF2_0
	bbc	fSwD,EF2_1		;pregunto si sw down
	movlwf	EF6,EstadoF		;voy a decrementar Canal1	
 	goto	FinTareaF
EF2_1
	bbc	fSwF,FinTareaF		;pregunto si sw funcion
	bcf	fLedCanal1
	bsf	fLedCanal2		;prendo led y voy a modificar el color Canal2
	movlwf	EF10,EstadoF
	goto	FinTareaF
;................................................	ACA INCREMENTA Canal1
EstadoF3
	comf	ProgCanal1,w
	movwf	ProgCanal1Temp
	bagtel	ProgCanal1Temp,PASOS,EF3_0
	bsf	fLedCanal1Blink		;pongo a blinkear
	goto	EF3_1
EF3_0
	movlw	PASOS
	addwf	ProgCanal1,f
EF3_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF4
	bbc	fSwU,EF4_0		;pregunta si sw up off
	bbc	fSwUAr,FinTareaF	;espera por auto repeticion
	movlwf	TSWAUTOREP,Tiempo10ms	;cargo tiempo de auto repeticion
	incf	EstadoF,f		;
	goto	FinTareaF
EF4_0
	bcf	fLedCanal1Blink
	movfeel	ProgCanal1,POSEEPROGCANAL1
	movlwf	EF2,EstadoF
	goto	FinTareaF
;................................................
EstadoF5
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF3,EstadoF
	goto	FinTareaF	
;................................................	ACA DECREMENTA Canal1
EstadoF6	
	movf	ProgCanal1,w
	movwf	ProgCanal1Temp
	bagtel	ProgCanal1Temp,PASOS,EF6_0
	bsf	fLedCanal1Blink		;pongo a blinkear
	goto	EF6_1
EF6_0
	movlw	PASOS
	subwf	ProgCanal1,f	
EF6_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF7
	bbc	fSwD,EF7_0
	bbc	fSwDAr,FinTareaF
	movlwf	TSWAUTOREP,Tiempo10ms
	incf	EstadoF,f
	goto	FinTareaF
EF7_0
	bcf	fLedCanal1Blink
	movfeel	ProgCanal1,POSEEPROGCANAL1
	movlwf	EF2,EstadoF
	goto	FinTareaF
;................................................
EstadoF8
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF6,EstadoF
	goto	FinTareaF	
;................................................	C A N A L   2
;................................................
EstadoF10
	bbs	fSwF,FinTareaF		;espero a que el sw de funcion sea off
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF20
	bbc	fSwU,EF20_0		;pregunto si sw up 
	incf	EstadoF,f		;voy a incrementar Canal1
	goto	FinTareaF
EF20_0
	bbc	fSwD,EF20_1		;pregunto si sw down
	movlwf	EF60,EstadoF		;voy a decrementar Canal1	
 	goto	FinTareaF
EF20_1
	bbc	fSwF,FinTareaF		;pregunto si sw funcion
	bcf	fLedCanal2
	bsf	fLedCanal3		;prendo led y voy a modificar el color Canal3
	movlwf	EF100,EstadoF
	goto	FinTareaF
;................................................	ACA INCREMENTA Canal2
EstadoF30
	comf	ProgCanal2,w
	movwf	ProgCanal2Temp
	bagtel	ProgCanal2Temp,PASOS,EF30_0
	bsf	fLedCanal2Blink		;pongo a blinkear
	goto	EF30_1
EF30_0
	movlw	PASOS
	addwf	ProgCanal2,f
EF30_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF40
	bbc	fSwU,EF40_0		;pregunta si sw up off
	bbc	fSwUAr,FinTareaF	;espera por auto repeticion
	movlwf	TSWAUTOREP,Tiempo10ms	;cargo tiempo de auto repeticion
	incf	EstadoF,f		;
	goto	FinTareaF
EF40_0
	bcf	fLedCanal2Blink
	movfeel	ProgCanal2,POSEEPROGCANAL2
	
	movlwf	EF20,EstadoF
	goto	FinTareaF
;................................................
EstadoF50
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF30,EstadoF
	goto	FinTareaF	
;................................................	ACA DECREMENTA Canal2
EstadoF60	
	movf	ProgCanal2,w
	movwf	ProgCanal2Temp
	bagtel	ProgCanal2Temp,PASOS,EF60_0
	bsf	fLedCanal2Blink		;pongo a blinkear
	goto	EF60_1
EF60_0
	movlw	PASOS
	subwf	ProgCanal2,f	
EF60_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF70
	bbc	fSwD,EF70_0
	bbc	fSwDAr,FinTareaF
	movlwf	TSWAUTOREP,Tiempo10ms
	incf	EstadoF,f
	goto	FinTareaF
EF70_0
	bcf	fLedCanal2Blink
	movfeel	ProgCanal2,POSEEPROGCANAL2
	movlwf	EF20,EstadoF
	goto	FinTareaF
;................................................
EstadoF80
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF60,EstadoF
	goto	FinTareaF	
;................................................	C A N A L   3 
;................................................
EstadoF100
	bbs	fSwF,FinTareaF		;espero a que el sw de funcion sea off
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF200
	bbc	fSwU,EF200_0		;pregunto si sw up 
	incf	EstadoF,f		;voy a incrementar Canal1
	goto	FinTareaF
EF200_0
	bbc	fSwD,EF200_1		;pregunto si sw down
	movlwf	EF600,EstadoF		;voy a decrementar Canal1	
 	goto	FinTareaF
EF200_1
	bbc	fSwF,FinTareaF		;pregunto si sw funcion
	bcf	fLedCanal3		;
	bsf	fLedCanal4
	movlwf	EF1000,EstadoF		;va a el canal4
	goto	FinTareaF
;................................................	ACA INCREMENTA Canal3
EstadoF300
	comf	ProgCanal3,w
	movwf	ProgCanal3Temp
	bagtel	ProgCanal3Temp,PASOS,EF300_0
	bsf	fLedCanal3Blink		;pongo a blinkear
	goto	EF300_1
EF300_0
	movlw	PASOS
	addwf	ProgCanal3,f
EF300_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF400
	bbc	fSwU,EF400_0		;pregunta si sw up off
	bbc	fSwUAr,FinTareaF	;espera por auto repeticion
	movlwf	TSWAUTOREP,Tiempo10ms	;cargo tiempo de auto repeticion
	incf	EstadoF,f		;
	goto	FinTareaF
EF400_0
	bcf	fLedCanal3Blink
	movfeel	ProgCanal3,POSEEPROGCANAL3
	
	movlwf	EF200,EstadoF
	goto	FinTareaF
;................................................
EstadoF500
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF300,EstadoF
	goto	FinTareaF	
;................................................	ACA DECREMENTA Canal3
EstadoF600	
	movf	ProgCanal3,w
	movwf	ProgCanal3Temp
	bagtel	ProgCanal3Temp,PASOS,EF600_0
	bsf	fLedCanal3Blink		;pongo a blinkear
	goto	EF600_1
EF600_0
	movlw	PASOS
	subwf	ProgCanal3,f	
EF600_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF700
	bbc	fSwD,EF700_0
	bbc	fSwDAr,FinTareaF
	movlwf	TSWAUTOREP,Tiempo10ms
	incf	EstadoF,f
	goto	FinTareaF
EF700_0
	bcf	fLedCanal3Blink
	movfeel	ProgCanal3,POSEEPROGCANAL3
	movlwf	EF200,EstadoF
	goto	FinTareaF
;................................................
EstadoF800
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF600,EstadoF
	goto	FinTareaF	
;................................................	C A N A L   4 
;................................................
EstadoF1000
	bbs	fSwF,FinTareaF		;espero a que el sw de funcion sea off
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF2000
	bbc	fSwU,EF2000_0		;pregunto si sw up 
	incf	EstadoF,f		;voy a incrementar Canal4
	goto	FinTareaF
EF2000_0
	bbc	fSwD,EF2000_1		;pregunto si sw down
	movlwf	EF6000,EstadoF		;voy a decrementar Canal4	
 	goto	FinTareaF
EF2000_1
	bbc	fSwF,FinTareaF		;pregunto si sw funcion
	bcf	fLedCanal4		;
	bsf	fLedCanal5		;va al siguiente
	movlwf	EF1A,EstadoF
	goto	FinTareaF
;................................................	ACA INCREMENTA Canal4
EstadoF3000
	comf	ProgCanal4,w
	movwf	ProgCanal4Temp
	bagtel	ProgCanal4Temp,PASOS,EF3000_0
	bsf	fLedCanal4Blink		;pongo a blinkear
	goto	EF3000_1
EF3000_0
	movlw	PASOS
	addwf	ProgCanal4,f
EF3000_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF4000
	bbc	fSwU,EF4000_0		;pregunta si sw up off
	bbc	fSwUAr,FinTareaF	;espera por auto repeticion
	movlwf	TSWAUTOREP,Tiempo10ms	;cargo tiempo de auto repeticion
	incf	EstadoF,f		;
	goto	FinTareaF
EF4000_0
	bcf	fLedCanal4Blink
	movfeel	ProgCanal4,POSEEPROGCANAL4
	
	movlwf	EF2000,EstadoF
	goto	FinTareaF
;................................................
EstadoF5000
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF3000,EstadoF
	goto	FinTareaF	
;................................................	ACA DECREMENTA Canal4
EstadoF6000	
	movf	ProgCanal4,w
	movwf	ProgCanal4Temp
	bagtel	ProgCanal4Temp,PASOS,EF6000_0
	bsf	fLedCanal4Blink		;pongo a blinkear
	goto	EF6000_1
EF6000_0
	movlw	PASOS
	subwf	ProgCanal4,f	
EF6000_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF7000
	bbc	fSwD,EF7000_0
	bbc	fSwDAr,FinTareaF
	movlwf	TSWAUTOREP,Tiempo10ms
	incf	EstadoF,f
	goto	FinTareaF
EF7000_0
	bcf	fLedCanal4Blink
	movfeel	ProgCanal4,POSEEPROGCANAL4
	movlwf	EF2000,EstadoF
	goto	FinTareaF
;................................................
EstadoF8000
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF6000,EstadoF
	goto	FinTareaF	
;................................................	C A N A L   5
;................................................
EstadoF1A
	bbs	fSwF,FinTareaF		;espero a que el sw de funcion sea off
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF2A
	bbc	fSwU,EF2A_0		;pregunto si sw up 
	incf	EstadoF,f		;voy a incrementar Canal5
	goto	FinTareaF
EF2A_0
	bbc	fSwD,EF2A_1		;pregunto si sw down
	movlwf	EF6A,EstadoF		;voy a decrementar Canal5	
 	goto	FinTareaF
EF2A_1
	bbc	fSwF,FinTareaF		;pregunto si sw funcion
	bcf	fLedCanal5		;
	bsf	fLedCanal6		;va al siguiente
	movlwf	EF1B,EstadoF
	goto	FinTareaF
;................................................	ACA INCREMENTA Canal5
EstadoF3A
	comf	ProgCanal5,w
	movwf	ProgCanal5Temp
	bagtel	ProgCanal5Temp,PASOS,EF3A_0
	bsf	fLedCanal5Blink		;pongo a blinkear
	goto	EF3A_1
EF3A_0
	movlw	PASOS
	addwf	ProgCanal5,f
EF3A_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF4A
	bbc	fSwU,EF4A_0		;pregunta si sw up off
	bbc	fSwUAr,FinTareaF	;espera por auto repeticion
	movlwf	TSWAUTOREP,Tiempo10ms	;cargo tiempo de auto repeticion
	incf	EstadoF,f		;
	goto	FinTareaF
EF4A_0
	bcf	fLedCanal5Blink
	movfeel	ProgCanal5,POSEEPROGCANAL5
	
	movlwf	EF2A,EstadoF
	goto	FinTareaF
;................................................
EstadoF5A
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF3A,EstadoF
	goto	FinTareaF	
;................................................	ACA DECREMENTA Canal5
EstadoF6A	
	movf	ProgCanal5,w
	movwf	ProgCanal5Temp
	bagtel	ProgCanal5Temp,PASOS,EF6A_0
	bsf	fLedCanal5Blink		;pongo a blinkear
	goto	EF6A_1
EF6A_0
	movlw	PASOS
	subwf	ProgCanal5,f	
EF6A_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF7A
	bbc	fSwD,EF7A_0
	bbc	fSwDAr,FinTareaF
	movlwf	TSWAUTOREP,Tiempo10ms
	incf	EstadoF,f
	goto	FinTareaF
EF7A_0
	bcf	fLedCanal5Blink
	movfeel	ProgCanal5,POSEEPROGCANAL5
	movlwf	EF2A,EstadoF
	goto	FinTareaF
;................................................
EstadoF8A
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF6A,EstadoF
	goto	FinTareaF
;................................................	C A N A L   6
;................................................
EstadoF1B
	bbs	fSwF,FinTareaF		;espero a que el sw de funcion sea off
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF2B
	bbc	fSwU,EF2B_0		;pregunto si sw up 
	incf	EstadoF,f		;voy a incrementar Canal6
	goto	FinTareaF
EF2B_0
	bbc	fSwD,EF2B_1		;pregunto si sw down
	movlwf	EF6B,EstadoF		;voy a decrementar Canal6	
 	goto	FinTareaF
EF2B_1
	bbc	fSwF,FinTareaF		;pregunto si sw funcion
	bcf	fLedCanal6		;
	bsf	fLedCanal1		;va al siguiente
	movlwf	EF1,EstadoF
	goto	FinTareaF
;................................................	ACA INCREMENTA Canal6
EstadoF3B
	comf	ProgCanal6,w
	movwf	ProgCanal6Temp
	bagtel	ProgCanal6Temp,PASOS,EF3B_0
	bsf	fLedCanal6Blink		;pongo a blinkear
	goto	EF3B_1
EF3B_0
	movlw	PASOS
	addwf	ProgCanal6,f
EF3B_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF4B
	bbc	fSwU,EF4B_0		;pregunta si sw up off
	bbc	fSwUAr,FinTareaF	;espera por auto repeticion
	movlwf	TSWAUTOREP,Tiempo10ms	;cargo tiempo de auto repeticion
	incf	EstadoF,f		;
	goto	FinTareaF
EF4B_0
	bcf	fLedCanal6Blink
	movfeel	ProgCanal6,POSEEPROGCANAL6
	
	movlwf	EF2B,EstadoF
	goto	FinTareaF
;................................................
EstadoF5B
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF3B,EstadoF
	goto	FinTareaF	
;................................................	ACA DECREMENTA Canal5
EstadoF6B	
	movf	ProgCanal6,w
	movwf	ProgCanal6Temp
	bagtel	ProgCanal6Temp,PASOS,EF6B_0
	bsf	fLedCanal6Blink		;pongo a blinkear
	goto	EF6B_1
EF6B_0
	movlw	PASOS
	subwf	ProgCanal6,f	
EF6B_1
	incf	EstadoF,f
	goto	FinTareaF
;................................................
EstadoF7B
	bbc	fSwD,EF7B_0
	bbc	fSwDAr,FinTareaF
	movlwf	TSWAUTOREP,Tiempo10ms
	incf	EstadoF,f
	goto	FinTareaF
EF7B_0
	bcf	fLedCanal6Blink
	movfeel	ProgCanal6,POSEEPROGCANAL6
	movlwf	EF2B,EstadoF
	goto	FinTareaF
;................................................
EstadoF8B
	movf	Tiempo10ms,f
	bbc	_Z,FinTareaF
	movlwf	EF6B,EstadoF
	goto	FinTareaF
;................................................

		
FinTareaF
	clrwdt			;fijate si el wdt esta activado
	goto	TareaT
;*************************************************************************


;ESTOS SON LAS RUTINAS PARA ENCENDER Y APAGAR LOS 6 LEDS
	if	0

	bank1			;enciende Led1 indicador de canal1 (Canal1)
	movlw	DIRAHIZB
	movwf	TRISA
	bank0
	bsf	pOA		
	bcf	pOC
	
	
	bank1			;enciende Led2 indicador de canal2
	movlw	DIRAHIZB
	movwf	TRISA
	bank0
	bcf	pOA		
	bsf	pOC
	
	bank1			;enciende Led3 indicador de canal3
	movlw	DIRAHIZC
	movwf	TRISA
	bank0
	bcf	pOA		
	bsf	pOB


	bank1			;enciende Led4 indicador de canal4
	movlw	DIRAHIZC
	movwf	TRISA
	bank0
	bsf	pOA		
	bcf	pOB

	bank1			;enciende Led5 indicador de canal5
	movlw	DIRAHIZA
	movwf	TRISA
	bank0
	bsf	pOB
	bcf	pOC
	
	bank1			;enciende Led6 indicador de canal6
	movlw	DIRAHIZA
	movwf	TRISA
	bank0
	bcf	pOB
	bsf	pOC
	
	bank1			;apago todos los leds
	movlw	DIRA
	movwf	TRISA
	bank0
	clrf	PORTA
	
	endif	
;.....................................................................................................................................................	

	end