Time1 Interrupt从睡眠中唤醒微控制器

时间:2014-09-05 20:19:11

标签: timer embedded microcontroller pic

我添加了一个外部32KHz晶振,用于Timer1作为PIC18F87J11上的实时时钟。一切正常,Timer1即使在睡眠模式下也能增加。但是,我注意到MicroController在每个中断周期都会唤醒。我的最终目标是降低功耗,同时能够准确地跟踪时间。我知道它只会在不到一秒的时间内醒来,但有没有办法防止它被唤醒,除非我想要它并且仍能跟踪时间?我基本上想让微控制器保持睡眠模式几个小时,然后醒来做某事然后再回去睡觉。

这些是我的Timer1设置:

 // Timer 1 Settings
    RCONbits.IPEN = 1; // Enable interrupt system priority feature
    INTCONbits.GIEL = 1; // Enable low priority interrupts

    // 1:1 Prescale value
    T1CONbits.T1CKPS1 = 0;
    T1CONbits.T1CKPS0 = 0;
    T1CONbits.RD16 = 1; // Enables register read/write of TImer1 in one 16-bit operation
    T1CONbits.T1RUN = 1; // Device clock is derived from Timer1 oscillator
    T1CONbits.T1OSCEN = 1; // Timer1 oscillator is enabled
    T1CONbits.TMR1CS =1; // Use Internal Clock
    T1CONbits.T1SYNC =1; // Do not synchronize external clock input

    PIE1bits.TMR1IE = 1;
    IPR1bits.TMR1IP = 0; // Timer 1 -> Low priority interrupt group
    PIE1bits.TMR1IE = 1; // Enable Timer1 interrupt

   // To get 1 second interrut period
    TMR1H = 0x80 ;     // preset for timer1 MSB register
    TMR1L = 0x00 ;     // preset for timer1 LSB register

    // Enable Timer 1
    T1CONbits.TMR1ON = 1;

1 个答案:

答案 0 :(得分:1)

这取决于您可以将定时器中断周期设置为多长时间。例如,如果它可以设置为一小时,您可以让它每小时唤醒一次,增加时间,然后再睡觉。选择定时器的最大定时器预分频值和最大比较值。计算中断之间的最长时间。

然而,一次唤醒一次是非常正常的,更新计时器,检查是否有任何需要,然后再回到睡眠状态。 MSP430特别擅长超低功耗,可以像这样工作,平均电流达到数百纳安。