Pessoal, li em outros tópicos sobre sleep/wake up mas no momento ainda estou sem um hardware para testar. Usarei o compilador CCS e um PIC18f87k90 (acredito que o sleep seja igual ao demais PIC).
Pensei em colocar uma ponte resistiva entre os 5V e a porta B0 (evitar flutuação na porta). Com energia tem 5V na B0, sem energia, tem um resistor direto pro GND.
Aí fiz a seguinte lógica, com a interrupção global ligada no MAIN:
if(!input(PIN_B0))
{
ENABLE_INTERRUPTS(INT_EXT); //ativa e int_ext RB0
EXT_INT_EDGE(0,L_TO_H); //int_ext RB0 na borda de subida
sleep(); //dorme na espera de 5V na porta B0
delay_us(10);
DISABLE_INTERRUPTS(INT_EXT); //desativa int_ext RB0
}
enquanto estiver 0V na porta B0 o PIC dorme
quando chegar 5V na porta B0, o PIC fará o próxima instrução que é delay_us(10)
Está correto meu raciocínio? Preciso de mais alguma coisa?