2014-09-05 664 views
0

我添加了一個外部32KHz晶振,與Timer1一起用作PIC18F87J11上的實時時鐘。一切正常,Timer1即使在睡眠模式下也能夠增加。但是,我注意到在每個中斷週期後,MicroController都會喚醒。我的最終目標是降低功耗,同時能夠準確地跟蹤時間。我知道它只醒來不到一秒鐘,但是有沒有辦法阻止它醒來,除非我想要它,並且仍然能夠跟蹤時間?我基本上想讓微控制器保持睡眠模式幾個小時,然後醒來做些事情,然後回去睡覺。Time1中斷喚醒單片機睡眠

這些都是我的定時器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; 

回答

1

這取決於你能有多久的定時器中斷週期設置爲。例如,如果可以將其設置爲一個小時,則可以每小時喚醒一次,增加時間,然後睡覺。爲定時器選擇最大定時器預分頻值和最大比較值。計算中斷之間的最長時間。

但是,以秒爲單位喚醒一次,更新定時器,檢查是否有任何需要做的事情,如果不是,則返回到睡眠是非常正常的。特別擅長超低功耗的MSP430可以像這樣工作,並在數百納安培的區域內獲得平均電流。

+0

我可以設置的最長中斷週期約爲16秒,不是我想要的。那麼從我的理解中,它必須喚醒每個時期的中斷? – Ammar 2014-09-09 02:44:06

+1

是的。不過,不要擔心,它只需要一小段時間就能醒來,然後直接睡覺。 – DiBosco 2014-09-09 09:12:59