;
;					ESEMPIO 2.25
;
;				Autore: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Esempio per simulazione e/o MicroPIC Trainer
;
;Il modo "sleep" e il "wake-up" (sveglia) mediante il watch-dog Timer (WDT)
;
;Questo esempio vuole mostrare l'impiego dell'istruzione SLEEP per mettere il PIC nel 
;modo standby a basso consumo. Il "risveglio" dello stesso avverrà ogni volta che il WDT eccede.
;In questo momento si produrrà un incremento del valore della porta B che agirà da contatore
;binario e si tornerà nuovamente alla situazione di standby.
;
;Il prescaler si associerà al WDT e sarà compreso tra 1 e 128, a seconda dello stato
;logico degli interruttori RA0-RA2.
;
;Il valore nominale del WDT è di 18mS. Vale a dire, con un prescaler di 1, il pic "si sveglierà" 
;ogni 18mS, con un prescaler di 128, lo farà ogni 2,3 secondi.


		List	p=16F84		;Tipo di processore
		include	"P16F84.INC"	;Definizioni di registri interni
                    		
		org	0x00		;Vettore di Reset
		goto	Inizio
		org	0x05		;Salva vettore di interrupt

Inizio	        clrf 	PORTB		;Cancella i latch di uscita
		bsf	STATUS,RP0	;Seleziona banco 1
		clrf	TRISB		;Porta B si configura come uscita
		movlw	b'00011111'		
		movwf	TRISA		;RA0-RA4 entrate				
		movlw	b'00001000'
		movwf	OPTION_REG	;Prescaler di 1 per el WDT
		bcf	STATUS,RP0	;Seleziona banco 0	
		

Loop		sleep			;Modo Standby
					
		incf	PORTB,F		;Aumenta il contatore binario sulla porta B
		movf	PORTA,W
		andlw	b'00000111'	;Leggi lo stato degli interruttori RA0-RA2
		iorlw	b'00001000'
		bsf	STATUS,RP0	;Seleziona banco 1
		movwf	OPTION_REG	;Registra valore del prescaler
		bcf	STATUS,RP0	;Seleziona banco 1
		goto	Loop		;Tornare al modo Standby
	
		end			;Fine del programma principale

