我添加了一个外部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;
答案 0 :(得分:1)
这取决于您可以将定时器中断周期设置为多长时间。例如,如果它可以设置为一小时,您可以让它每小时唤醒一次,增加时间,然后再睡觉。选择定时器的最大定时器预分频值和最大比较值。计算中断之间的最长时间。
然而,一次唤醒一次是非常正常的,更新计时器,检查是否有任何需要,然后再回到睡眠状态。 MSP430特别擅长超低功耗,可以像这样工作,平均电流达到数百纳安。