por Pask » 13 Jul 2008 15:11
Bem, Haroldo, uma vez que vc entra no modo SLEEP você poderá sair dele por um dos seguintes meios abaixo:
1 - Por meio de um reset externo através do pino de MCRL.
2 - Por um estouro do WDT, caso ele esteja habilitado.
3 - Por uma interrupção externa em alguns pinos do PORTB.
No primeiro caso, o reset pode ser reconhecido checando-se o estado dos bits /TO=1 e /PD=0, no registrados STATUS com as instruções:
BTFSC STATUS,TO
BTFSC STATUS,PD
No segundo caso, basta esperar o WDT estourar não usando a instrução CLRWDT e esta situação pode ser checada por meio do bit /TO=0 do registrador Status como acima.
O terceiro caso é o mais complicado de todos. Se a chave individual da interrupção estiver ligada, o sistema sairá do sleep, executando a linha seguinte à instrução sleep. Se achave estiver desligada, o sistema continuará dormindo. Caso a chave GIE esteja ligada, no ciclo seguinte o programa será desviado para o endereço 0x04 a fim de tratar a interrupção ocorrida. Se você desejar tratar a interrupção que acordará o PIC, deve colocar um NOP após a instrução sleep, evitando que qualquer ação seja tomada antes do tratamento da interrupção.
Acho que isso aí...