;Después de reset, lee los 4 microswitches y forma un par de números: 
;SW4 y SW3 (n=0..3). SW2 y SW1 (m=0..3). Muestra en los leds el valor de la multiplicación 
;de (n*m) en binario. Si el usuario modifica la posición de los microswitches, el programa 
;automáticamente modificará el valor del resultado de la multiplicación en los leds.

	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'
n	equ	H'84'
m	equ H'85'
suma equ H'86'
	 
		org 	0x800	;MODIFIQUE A ORG=0 PARA SIMULAR EN MPLAB
		PUERTOS
		BOLTSWITCH
		CLRF	suma
		CLRF	PORTB
		movf	CLAVE100,w
		andlw	H'03'			;obtengo variable m
		movwf	m
		movwf	PORTB
		call	retrobolt		;observo m en leds
		movf	CLAVE100,w
		rrncf	CLAVE100,f
		rrncf	CLAVE100,f
		movf	CLAVE100,w
		andlw	H'03'			;obtengo variable n
		movwf	n
		movwf	PORTB
		call	retrobolt		;observo n en leds
		incf	n
malla	decfsz	n
		goto	sigue
		goto	fin
sigue:	movf	suma,w
		addwf	m,w
		movwf	suma
		goto	malla
fin:	movf	suma,w
		movwf	PORTB			;observo n*m en leds
		sleep
		

		


;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	

