; ZONA DE DATOS **********************************************************************

	__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
	LIST	   P=16F84A
	INCLUDE  <P16F84A.INC>

	CBLOCK  0x0C
	Penultimo			; Ocupa la posición 0x0C de RAM.
	Ultimo				; Ocupa la posición 0x0D de RAM.
	Suma				; Ocupa la posición 0x0E de RAM.
	ENDC

; ZONA DE CÓDIGOS ********************************************************************

	ORG 	0			; El programa comienza en la dirección 0.
Inicio
	bsf	STATUS,RP0		; Acceso al Banco 1.
	clrf	TRISB			; Las líneas del Puerto B se configuran como salida.
	bcf	STATUS,RP0		; Acceso al Banco 0.
Principal
	clrf	Penultimo		; Asigna 0 al penúltimo término de Fibonacci y
	movlw	.1			; 1 al último. Son las "semillas".
SigueSumando
	movwf	Ultimo			; Asigna (W) al (Ultimo) término de Fibonacci.
	addwf	Penultimo,W		; Suma términos último y penúltimo.
	movwf	Suma			; (Suma)=(Penultimo)+(Ultimo).
	btfsc	STATUS,C		; ¿C=0?, ¿(W)<256?
	goto	Fin			; No, por tanto ha excedido del máximo y sale.
	movf	Ultimo,W		; Sí, por tanto el (Ultimo) pasa al (Penultimo).
	movwf	Penultimo
	movf	Suma,W			; Y la (Suma) al (Ultimo).
	goto	SigueSumando
Fin	movfw	Ultimo			; En (Ultimo) el término de Fibonacci buscado.
	movwf	PORTB			; Resultado se visualiza por el puerto de salida.
	sleep

	END