
		list P=16F84a
#INCLUDE "P16F84a.INC"

_XT_OSC               equ  0x3FFD
_WDT_OFF              equ  0x3FFB
_PWRTE_ON             equ  0x3FF7
_CP_OFF               equ  0x3FFF

	__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

; MAPA DE MEMORIA

estado		equ		0X03
portb		equ		0X06
porta		equ		0X05
portc		equ		0x07
trisa		equ		0x05
trisb		equ		0X06


intcon		equ		0x0B		;Control de interrupciones
backw		equ		0x28		;Back-up de W al interrumpir

reg1		equ		0x0c
reg2		equ		0x0d
reg3		equ		0x0e
reg4		equ		0x0f
reg5		equ		0x1c
reg6		equ		0x1d
rotar		equ		0x1e
contador	equ		0x1f		;contador

;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
c                     equ  0   ;carry / borrow bit
rp0                   equ  5   ;registrer bank select bit
rp1                   equ  6   ;registrer bank select bit
z                     equ  2   ;bit cero

#DEFINE		elec_s		portb,1
#DEFINE		resis_		portb,2
#DEFINE		centri_		portb,3
#DEFINE		bomba		portb,6
#DEFINE		elec_j		portb,7
#DEFINE		lav_d		portb,5
#DEFINE		lav_i		portb,4
#DEFINE		led_1		porta,0
#DEFINE		led_2		porta,1
#DEFINE		led_3		porta,2

;entradas

#DEFINE		acepto		portb,0
#DEFINE		selector	porta,4


;CONFIGURACION DE PUERTOS

reset		org		0x00
		goto		inicio
		
		org		0X05



inicio		bsf 		estado,5
		movlw		b'11000'
		movwf		trisa
		movlw		b'00000001'
		movwf		trisb
		bcf		STATUS,5
		goto		principal

;PRINCIPAL
principal	
		clrf		portb
		bcf		led_1
		bcf		led_2
		bcf		led_3
		goto		bucle

bucle
e1		call		retardo
		btfss		led_1
		goto		e2
		goto		selec1

e2		call		retardo
		btfss		led_2
		goto		e3
		goto		selec2	

e3		call		retardo
		btfss		led_3
		goto		e4
		goto		selec3

e4		call		retardo
		btfss		led_1
		goto		e5
		btfss		led_2
		goto		e5
		goto		selec4

e5		call		retardo
		btfss		led_2
		goto		e6
		btfss		led_3
		goto		e6
		goto		selec5

e6		call		retardo
		btfss		led_1
		goto		e7
		btfss		led_2
		goto		e7
		btfss		led_3
		goto		e7
		goto		selec6

e7		call		retardo
		goto		test



test		call		retardo
		btfsc		selector	; hay un cero en ra4?
		goto		bucle
		incf		contador,f	;si hay un cero incrementa 1 unidad el registro contador
		movlw		d'7'		; tenía "6"
		subwf		contador,w	; si es 7 se resetea y vuelve al bucle porque el bit Z del reg_ status pasa a 1, sino voy a etiqueta "programas" Z=0	
		btfss		STATUS,Z
		goto		programas	;voy a programas
borrado		clrf		porta
		clrf		contador
		goto 		bucle	
programas	movf 		contador,w	;traslada el contenido del registro "contador" a la memoria de trabajo w
		addwf		PCL,f		;suma al contador del programa el numero cargado en el reg_ contador, saltando a la linea correspondiente al resultado de la suma
		goto		enciende0
		goto 		enciende1
		goto 		enciende2
		goto 		enciende3
		goto 		enciende12
		goto		enciende23
		goto		enciende123
enciende0	bcf		led_1
		bcf		led_2
		bcf		led_3
		goto		bucle
enciende1	bcf		led_1
		bcf		led_2
		bcf		led_3
		bsf		led_1
		call		retardo
		goto		bucle
enciende2	bcf		led_1
		bcf		led_2
		bcf		led_3
		bsf		led_2
		call		retardo
		goto 		bucle
enciende3	bcf		led_1
		bcf		led_2
		bcf		led_3
		bsf		led_3
		call		retardo
		goto		bucle	
enciende12	bcf		led_1
		bcf		led_2
		bcf		led_3
		bsf		led_1
		bsf		led_2
		call		retardo
		goto		bucle	
enciende23	bcf		led_1
		bcf		led_2
		bcf		led_3
		bsf		led_2
		bsf		led_3
		call		retardo
		goto		bucle	
enciende123	bcf		led_1
		bcf		led_2
		bcf		led_3
		bsf		led_1
		bsf		led_2
		bsf		led_3
		call		retardo
		goto		bucle	


	
	
			
	
		


;================SECUENCIA PROGRAMA CORTO====================================================		
selec1		call		retardo
		btfsc		acepto		;hay un cero en portb,0?
		goto		e2