會員登陸
帳號:

密碼:

記住我



忘記密碼?

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


正在流覽:   1 名訪客





記數器跟計時器的差別
中級會員
註冊日期:
2014/09/29 12:04
所屬群組:
註冊會員
文章: 44
等級: 5; EXP: 43
HP : 0 / 110
MP : 14 / 916
離線
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一樣囉?

6月26日 10:33:15
轉換PDF檔 列印


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

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

    }

    else if()
    {

    }
}


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

    }

    if()
    {

    }
}


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

6月26日 14:05:45
轉換PDF檔 列印


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

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

+ 號為中斷
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

6月26日 14:24:10
_________________
程式是
依照寫出來(的code),跑出結果
不是依照你想出來的,得到結果

先有需求規格 後有解決方案
轉換PDF檔 列印


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

6月26日 17:42:40
轉換PDF檔 列印


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

TMR3H = 0x40;
TMR3L = 0x00;

6月27日 14:48:55
轉換PDF檔 列印


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

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

6月28日 11:05:10
轉換PDF檔 列印


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

yiming 寫道:
發現小錯誤

TMR3H = 0x40;
TMR3L = 0x00;


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

6月29日 14:25:37
轉換PDF檔 列印


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

7月10日 11:35:13
轉換PDF檔 列印






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

[進階搜尋]


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