He escrito un firmware para un PIC12LF1572 que estoy probando en el simulador MPLAB X. El programa se ejecuta y responde correctamente a los estímulos, excepto cuando debe esperar una interrupción del temporizador.
Después de un poco de depuración, parece que el temporizador no está contando en absoluto . Es decir, TMR1 no incrementa. He ajustado el reloj del temporizador al oscilador interno de baja frecuencia (LFINTOSC), que funciona a 31 kHz. Parece que LFINTOSC no se está ejecutando; además, el examen del registro del estado del oscilador (OSCSTAT) muestra que los osciladores no se están ejecutando. Esto no puede ser correcto, ya que el programa se está ejecutando definitivamente. Además, el temporizador de vigilancia está habilitado, lo que garantiza que LFINTOSC no se apagará.
¿El simulador simula con precisión los osciladores y los usa para impulsar la ejecución? Si no, ¿cómo hago para que mis temporizadores se ejecuten en el simulador? O, ¿es este un caso de error piloto? El código que configura el temporizador es el siguiente:
// Set up the timer and its interrupt
T1CONbits.TMR1CS = 3; // LFINTOSC @ 31kHz
T1CON |= 0x08; // Turn on timer's oscillator; pin not named by the library (!?)
PIR1bits.TMR1IF = 0;
PIE1bits.TMR1IE = 1;
INTCONbits.PEIE = 1;
ei();
// Interrupt in 1/10 second (31kHz clock).
TMR1 = -3100;
T1CONbits.TMR1ON = 1;