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