Autor Tema: Ayuda, ¿como salir del sleep mode?  (Leído 112 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 8bits

  • PIC10
  • *
  • Mensajes: 13
Ayuda, ¿como salir del sleep mode?
« en: 11 de Septiembre de 2019, 23:14:08 »
Hola amigos, un gran saludo a todos  8) . Tengo un pequeño inconveniente con un programa en el cual pretendo salir del sleep mode mediante una interrupción externa en un PIC18F4550.

Puedo entrar al modo sleep mode sin problemas, he utilizado un botón en INT0 (interrupción externa en PB0), de esta manera al presionarlo el PIC queda profundamente dormido XD. La idea es despertarlo pulsando el mismo botón y si lo hace pero el problema es que me reinicia el sistema, ¿habrá alguna manera de que al despertar continué la ejecución del programa donde se quedo la ultima vez? He leido el datasheet seccion 3.3 Sleep Mode y 3.5.1 Exit by interrupt, pero aun así no logro hacerlo funcionar.

Anexo la secciones del código involucradas:

Código: [Seleccionar]
void xtInterruptBegin(){
     //Habilita la interrupcion externa INT0 en PB0
    TRISBbits.RB0 = 1;
    INTCONbits.INT0IE = 1;
    INTCON2bits.INTEDG0 = 0;
   
}

Código: [Seleccionar]
void interrupt myISR(){
    if(INTCONbits.TMR0IF){
        INTCONbits.TMR0IF = 0;
        contador++;
        if(contador == SAMPLING_F){
            contador = 0;
            adc_flag = 1;
            LATBbits.LATB1 = ~LATBbits.LATB1;
        }
    }
   
    if(PIR1bits.ADIF){
        PIR1bits.ADIF = 0;
        adc_finish_flag = 1;
       
    }
   
    if(INTCONbits.INT0IF){
       
        sleep_flag = ~sleep_flag;
        INTCONbits.INT0IF = 0;
        LATBbits.LATB1 = 0;
        LATBbits.LATB2 = 0;
       
    }
}

Código: [Seleccionar]
void main(void)
 {
    systemBegin();
    LATBbits.LATB1 = 1;
    sleep_flag = 0;
    while (!sleep_flag){
        if(adc_flag){
            adc_flag = 0;
            printf("\nBattery: ");
            readADC(AN4);
            adc_flag = 0;
        }
       
    }
    SLEEP();
}


 

anything