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

	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
	goto	BUCLE		;salta por encima de la tabla y va a "bucle"

;en la siguiente tabla se recoge el valor para activar la salida adecuada		

TABLA	addwf	PCL,F		;suma el valor de W a PCL (contador programa)	
	retlw	b'00000001'
	retlw	b'00000010'
	retlw	b'00000100'
	retlw	b'00001000'
	retlw	b'00010000'
	retlw	b'00100000'
	retlw	b'01000000'
	retlw	b'10000000'

BUCLE	movf	PORTA,W		;pasa valor PORTA a W
	andlw	b'00000111'	;con la función AND se pone a cero los 5 bits  
				;de más peso que no interesan 
	call	TABLA		;llama a tabla con el dato cargado en W
	movwf	PORTB		;visualiza valor cargado desde la tabla
	goto	BUCLE		;vuelve a comprobar PORTA

	end	
