;
;					EJEMPLO 2.25
;
;				Autor: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Ejemplo para simulación y/o MicroPIC Trainer
;
;El modo "sleep" y el "wake-up" (despertar) mediante el watch-dog Timer (WDT)
;
;Este ejemplo pretende mostrar el empleo de la instrucción SLEEP para poner al PIC en el 
;modo standby de bajo consumo. El despertar del mismo se producirá cada vez que el WDT rebase.
;En ese momento se producirá un incremento del valor de la puerta B que actuará como contador
;binario y nuevamente se volverá a la situaciónd de standby.
;
;El preescaler se asociará al WDT y estará comprendido entre 1 y 128, dependiendo del estado
;lógico de los interruptores RA0-RA2.
;
;El valor nominal del WDT es de 18mS. Es decir, con un preescaler de 1, el pic "despertará" 
;cada 18mS, con un prrescaler de 128, lo hará cada 2,3 segundos.


		List	p=16F84		;Tipo de procesador
		include	"P16F84.INC"	;Definiciones de registros internos
                    		
		org	0x00		;Vector de Reset
		goto	Inicio
		org	0x05		;Salva vector de interrupción

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		clrf	TRISB		;Puerta B se configura como salida
		movlw	b'00011111'		
		movwf	TRISA		;RA0-RA4 entradas				
		movlw	b'00001000'
		movwf	OPTION_REG	;Preescaler de 1 para el WDT
		bcf	STATUS,RP0	;Selecciona banco 0	
		

Loop		sleep			;Modo Standby
					
		incf	PORTB,F		;Incrementa el contador binario sobre la puerta B
		movf	PORTA,W
		andlw	b'00000111'	;Lee el estado de los interruptores RA0-RA2
		iorlw	b'00001000'
		bsf	STATUS,RP0	;Selecciona el banco 1
		movwf	OPTION_REG	;Ajusta valor del preescaler
		bcf	STATUS,RP0	;Selecciona el banco 1
		goto	Loop		;Volver al modo Standby
	
		end			;Fin del programa fuente

