Timer Time1中断将微控制器从睡眠中唤醒

Timer Time1中断将微控制器从睡眠中唤醒,timer,embedded,microcontroller,pic,Timer,Embedded,Microcontroller,Pic,我添加了一个32KHz的外部晶体,与Timer1一起作为实时时钟使用。一切正常,即使在睡眠模式下,计时器1也能增加。然而,我注意到,在每个中断期间,微控制器都会被唤醒。我的最终目标是降低功耗,同时能够准确地跟踪时间。我知道它只醒了不到一秒钟,但有没有办法阻止它醒过来,除非我想让它醒过来,而且还能跟踪时间?我基本上想让微控制器在睡眠模式下保持几个小时,然后醒来做点什么,然后再回到睡眠状态 这些是我的计时器设置: // Timer 1 Settings RCONbits.IPEN = 1;

我添加了一个32KHz的外部晶体,与Timer1一起作为实时时钟使用。一切正常,即使在睡眠模式下,计时器1也能增加。然而,我注意到,在每个中断期间,微控制器都会被唤醒。我的最终目标是降低功耗,同时能够准确地跟踪时间。我知道它只醒了不到一秒钟,但有没有办法阻止它醒过来,除非我想让它醒过来,而且还能跟踪时间?我基本上想让微控制器在睡眠模式下保持几个小时,然后醒来做点什么,然后再回到睡眠状态

这些是我的计时器设置:

 // 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;

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


然而,一秒钟醒来一次是很正常的,更新计时器,检查是否需要做什么,如果不需要,就回去睡觉。MSP430在超低功耗方面尤其出色,它可以像这样工作,平均电流可达数百纳安

我能设置的最长中断时间大约是16秒,这不是我想要的。所以据我所知,它必须在每次月经中断时醒来?是的。不过别担心,它会醒着一小段时间,然后直接回到睡眠状态。