會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





記數器跟計時器的差別
高級會員
註冊日期:
2014/09/29 12:04
所屬群組:
註冊會員
文章: 72
等級: 7; EXP: 40
HP : 0 / 160
MP : 24 / 1778
離線
Hi,各位好,我正在練習使用PIC18F4520的Timer,我想利用Timer1和Timer3驅動APP001開發版上的LED燈,Timer1驅動LED0;Timer3驅動LED1。

共同的設定是:

RCONbits
.IPEN = 1;      // 1 = Enable priority levels on interrupts
    
INTCONbits.PEIE = 1;    // 1 = Enables all low-priority peripheral interrupts
    
INTCONbits.GIE = 1;     // 1 = Enables all high-priority interrupts


其中TMIER1的設定是:

T1CONbits
.TMR1ON = 1;   // 1 = Enables Timer1
    
T1CONbits.TMR1CS = 1;   // 1 = External clock from pin RC0/T1OSO/T13CKI (on the rising edge)
    
T1CONbits.T1SYNC = 1;   // 0 = Synchronize external clock input
    
T1CONbits.T1OSCEN = 1;  // 1 = Timer1 oscillator is enabled
    
T1CONbits.T1CKPS = 0;   // 00 = 1:1 Prescale value
    
T1CONbits.T1RUN = 0;    // 0 = Device clock is derived from another source
    
T1CONbits.RD16 = 1;     // 1 = Enables register read/write of TImer1 in one 16-bit operation
    
    
PIE1bits.TMR1IE = 1;    // 1 = Enables the TMR1 overflow interrupt
    
IPR1bits.TMR1IP = 1;    // 1 = High priority


TIMER3的設定是:

T3CONbits
.TMR3ON = 1;   // 1 = Enables Timer3
    
T3CONbits.TMR3CS = 1;   // 1 = External clock input from Timer1 oscillator or T13CKI (on the rising edge after the first falling edge)
    
T3CONbits.T3SYNC = 1;   // 0 = Synchronize external clock input
    
T3CONbits.T3CKPS = 0;   // 00 = 1:1 Prescale value
    
T3CONbits.RD16 = 1;     // 1 = Enables register read/write of TImer3 in one 16-bit operation
    
    
PIE2bits.TMR3IE = 1;    // 1 = Enabled
    
IPR2bits.TMR3IP = 1;    // 1 = High priority


動作分別是:

void high_priority interrupt HighISR
(void)
{
    if(
PIE1bits.TMR1IE == 1 && PIR1bits.TMR1IF == 1){
        
PIR1bits.TMR1IF = 0;
        
TMR1H = 0x40;       // 65536-(32768/2) = 16384
        
TMR1L = 0x00;
        
LATDbits.LATD0 = ~LATDbits.LATD0;
    }
    else if(
PIE2bits.TMR3IE == 1 && PIR2bits.TMR3IF == 1){
        
PIR2bits.TMR3IF = 0;
        
TMR3H = 0x40;
        
TMR1L = 0x00;
        
LATDbits.LATD1 = ~LATDbits.LATD1;
    }
}


疑問:
1.我看了一下Timer3的電路圖,它也是連到32768的T1OSC,所以我認為只要開啟Timer1的32768,Timer3也可以使用它。既然中斷的條件一樣,為什麼LED0跟LED1沒有同步閃爍?(我知道Timer3會比Timer1慢一個clock,但我的LED1閃爍的頻率低了LED0好幾個檔次
2.Timer跟Counter的定義?
我看了datasheet,裡面是寫,Timer是使用Fosc/4的振盪器去計時;Counter是使用T1OSI pin腳的輸入(rising edge)。所以,當Counter使用32768HZ的震盪器時,作用就跟Timer一樣囉?

2017/06/26 10:33
轉換PDF檔 列印


Re: 記數器跟計時器的差別
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1583
等級: 33; EXP: 75
HP : 163 / 818
MP : 527 / 19251
離線

void high_priority interrupt HighISR
(void)
{
    if()
    {

    }

    else if()
    {

    }
}


void high_priority interrupt HighISR(void)
{
    if()
    {

    }

    if()
    {

    }
}


我認為是else if的差別, 比較一下兩者不同處吧

2017/06/26 14:05
轉換PDF檔 列印


Re: 記數器跟計時器的差別
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 980
等級: 27; EXP: 76
HP : 0 / 669
MP : 326 / 21732
離線
中斷 是需要(時間)成本的....
尤其是 共享中斷
(共用中斷,然後加判斷,...
若判斷 又沒寫好...事情就更大條了)

主程式---+-----+-----+-----

+ 號為中斷
1. save IP/STATUS/FLAG/... registers into stack
2. jump to interrupt service
3. disable some interrupt flag...
4. jobs in interrupt ...
5. restore registers form stack
6. return to main function

2017/06/26 14:24
轉換PDF檔 列印


Re: 記數器跟計時器的差別
高級會員
註冊日期:
2014/09/29 12:04
所屬群組:
註冊會員
文章: 72
等級: 7; EXP: 40
HP : 0 / 160
MP : 24 / 1778
離線
第二個應該為if才對,我打錯了,謝謝大大指正。
不過結果還是一樣...兩個頻率依然差很多

2017/06/26 17:42
轉換PDF檔 列印


Re: 記數器跟計時器的差別
資深會員
註冊日期:
2004/08/16 13:52
來自 台灣台南
所屬群組:
註冊會員
文章: 773
等級: 25; EXP: 9
HP : 0 / 602
MP : 257 / 24491
離線
發現小錯誤

TMR3H = 0x40;
TMR3L = 0x00;

2017/06/27 14:48
轉換PDF檔 列印


Re: 記數器跟計時器的差別
高級會員
註冊日期:
2014/09/29 12:04
所屬群組:
註冊會員
文章: 72
等級: 7; EXP: 40
HP : 0 / 160
MP : 24 / 1778
離線
各位好,我有去請教了國外的論壇,發現主要原因不是出在if elseif。
其實if elseif會比if if來得好用,因為當第一種情況在if發生了,就不會再判定elseif,所以會少一個判定的動作。

詳細情形請參考這一篇topic:
http://www.microchip.com/forums/m1000586.aspx

2017/06/28 11:05
轉換PDF檔 列印


Re: 記數器跟計時器的差別
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14381
等級: 72; EXP: 87
HP : 1078 / 1796
MP : 4793 / 74636
離線
引用:

yiming 寫道:
發現小錯誤

TMR3H = 0x40;
TMR3L = 0x00;


程式裡有錯如上所述,改過後還會有問題嗎?

2017/06/29 14:25
轉換PDF檔 列印


Re: 記數器跟計時器的差別
高級會員
註冊日期:
2014/09/29 12:04
所屬群組:
註冊會員
文章: 72
等級: 7; EXP: 40
HP : 0 / 160
MP : 24 / 1778
離線
To Ryang:
不好意思,現在才看到版主您回覆。
上述問題改過後還是會有問題,但已得到解決。
主要問題在我附上的網址裡,謝謝版主關心:)

2017/07/10 11:35
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project