;Realice un programa que almacene en localidades de la memoria de código del microcontrolador 
;una tabla mediante las instrucciones retlw, con los siguientes 8 datos hexadecimales: 
;AA 20 3C 5E D9 16 0B 9F
;Muestre en los leds, LED7..LED0 en código binario, en forma consecutiva, cada uno de estos 
;valores durante 1 segundo. Si los 4 bits menos significativos del dato mostrado en los leds es igual 
;al valor de los microswitches SW4..SW1 (n=0…F), los leds deberán permanecer mostrando ese mismo dato. 
;Programa termina con instrucción sleep.
;Si ninguno de los datos coincide con el valor de los microswitches, el programa mostrará los 8 datos 
;de la tabla y termina mostrando el último dato.

	processor 18F2550
	include	  <p18F2550.inc>
	include	 "KEYBOLT2.inc"	;ARCHIVO AUXILIAR CONTIENE MACRO Y DEFINE

J	equ	H'80'	  
K	equ	H'81'
L	equ 	H'82'
CLAVE100 equ H'83'
CONT	equ	H'84'
DUMMY	equ	H'85'
	 
		org 	0x800	;MODIFIQUE A ORG=0 PARA SIMULAR EN MPLAB
		PUERTOS
		BOLTSWITCH
		movlw	H'8'
		movwf	PCLATH
		CLRF	PORTB
		CLRF	CONT
malla	movf	CONT,w
		call	tabla
		movwf	PORTB
		andlw	H'0F'
		subwf	CLAVE100,w
		btfsc	STATUS,Z
		sleep
		call	retrobolt
		incf	CONT,f
		incf	CONT,f
		movf	CONT,w
		sublw	D'16'
		btfss	STATUS,Z
		goto	malla
		sleep
		
		org 	0x880		

tabla	addwf	PCL,f
		retlw	H'AA'
		retlw	H'20'
		retlw	H'3C'
		retlw	H'5E'
		retlw	H'D9'
		retlw	H'16'
		retlw	H'0B'
		retlw	H'9F'

;SUBRUTINA DE RETRASO APROX DE 1 SEGUNDO.SE PUEDE MODIFICAR A (16.4 x L) MILISEGUNDOS

retrobolt:	movlw	D'61'	;valor de L. Modifique para cambiar el valor del retraso.
		movwf	L
lloop		movlw	D'255'	; w := 200 decimal
		movwf	J	; J := w
jloop:		movwf	K	; K := w
kloop:		decfsz	K,f	; K = K-1, skip next if zero
		goto 	kloop
		decfsz	J,f	; J = J-1, skip next if zero
		goto	jloop
		decfsz	L,f
		goto	lloop
		return


		end	

