;Curso básico de microcontroladores PIC.  --- micropic@lleida.org
;prac_14.asm - Activa una salida según el dato de entrada. 

	list	p=16F84		;indica al ensamblador el modelo de PIC
	include	"P16F84.inc"	;incluye librería de definiciones para el PIC16F84
	__config	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;palabra de configuración

	org	0x00		;primera posición de la memoria de programa
	goto	INICIO		;salto a la etiqueta inicio
	org	0x05		;para pasar por encima del vector de interrupción

INICIO	bsf	STATUS,RP0	;selecciona banco 1 del área de datos
	clrf	TRISB		;configura PORTB todo salidas
	movlw	b'00011111'
	movwf	TRISA		;configura PORTA todo entradas
	bcf	STATUS,RP0	;vuelve a banco 0 del área de datos
	clrf	PORTB		;empieza apagando todos los Led

BUCLE	movlw	b'00000000'
	subwf	PORTA,W	;PORTA = 0 ?
	btfsc	STATUS,Z	;Z = 1, si es 0
	goto	RB0_ON
	movlw	b'00000001'		
	subwf	PORTA,W	;PORTA = 1 ?
	btfsc	STATUS,Z	;Z = 1, si es 1
	goto	RB1_ON
	movlw	b'00000010'
	subwf	PORTA,W	;PORTA = 2 ?
	btfsc	STATUS,Z	;Z = 1, si es 2
	goto	RB2_ON
	movlw	b'00000011'
	subwf	PORTA,W	;PORTA = 3 ?
	btfsc	STATUS,Z		 
	goto	RB3_ON		;Z = 1, si es 3
	movlw	b'00000100'
	subwf	PORTA,W	;PORTA = 4 ?
	btfsc	STATUS,Z		
	goto	RB4_ON		;Z = 1, si es 4
	movlw	b'00000101'
	subwf	PORTA,W	;PORTA = 5 ?	
	btfsc	STATUS,Z		
	goto	RB5_ON		;Z = 1, si es 5
	movlw	b'00000110'		
	subwf	PORTA,W	;PORTA = 6 ?
	btfsc	STATUS,Z
	goto	RB6_ON		;Z = 1, si es 6
	movlw	b'00000111'
	subwf	PORTA,W	;PORTA = 7
	btfsc	STATUS,Z		
	goto	RB7_ON		;Z = 1, si es 7
	clrf	PORTB		;no es ninguno, borra PORTB
	goto	BUCLE

RB0_ON	movlw	b'00000001'		;activa RB0, demás salidas apagadas
	movwf	PORTB
	goto	BUCLE		
RB1_ON	movlw	b'00000010'		;activa RB1
	movwf	PORTB
	goto	BUCLE
RB2_ON	movlw	b'00000100'		;activa RB2
	movwf	PORTB
	goto	BUCLE
RB3_ON	movlw	b'00001000'		;activa RB3
	movwf	PORTB
	goto	BUCLE
RB4_ON	movlw	b'00010000'		;activa RB4
	movwf	PORTB
	goto	BUCLE
RB5_ON	movlw	b'00100000'		;activa RB5	
	movwf	PORTB
	goto	BUCLE
RB6_ON	movlw	b'01000000'		;activa RB6
	movwf	PORTB
	goto	BUCLE
RB7_ON	movlw	b'10000000'		;activa RB7
	movwf	PORTB
	goto	BUCLE

	end
