Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
版主
|
其實還是要看成是怎樣寫的,如果中斷函數沒有使用到 Timer0 的話,一般在中斷裡就不會去檢查 T0IF 的,所以也就不容易發生誤判的情形。
發表於: 2009/6/9 9:51
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
資深會員
|
其實我的重點是: 就算有其他的中斷源 , 但如沒設 T0IE , T0IF 是否會觸發中斷而進入 ISR , 因我本身的接觸範圍主要在 I/O 部份,
很少觸及其他中斷 , 大部份只有一個 TMR0 作 TIMING CONTROL , 但總是不希望程式有任何的潛在的不穩定因素, 所以才有點打破沙鍋問到底, 望板主見諒.......
發表於: 2009/6/8 18:41
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
新會員
|
參照:
「但沒設 TOIE , 只有 T0IF 會進入 ISR 嘛 ?」 只有T0IF == 1不會進ISR 但如果有別的中斷發生,那就會進ISR了 所以這個寫法應該是建立在兩個前提: 一、多個中斷。 二、T0IE有時候會暫時關掉。 也謝謝這個討論串嚕,以前也沒去深入想過這個差別。
發表於: 2009/6/8 18:01
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
資深會員
|
參照:
謝謝指點 , 但沒設 TOIE , 只有 T0IF 會進入 ISR 嘛 ?這才是我質疑 要雙重 CHECK 的重點 ...... 有無設立 GIE & T0IE PROGRAMER 自己心裡有數 ..... Attach file: (0.00 KB)
發表於: 2009/6/8 17:09
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
版主
|
參照:
Timer0 在 PIC16F 系列是屬於自行運作的計數器,所以只要發生 0xFF 變成 0x00 的溢位就會將 T0IF 設定成為1,程式可以用 Polling 的方式不必使用中斷的方式就可以得知Timer0 的溢位。
發表於: 2009/6/8 11:35
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
資深會員
|
T0IF 不是 只有在 ( TMROIE & GIE ) ENABLE & TMR0 OVER FLOW 時才會被設定嘛 ?
請問還有什麼狀況下 , 它會被設定 ? 謝謝 ..........
發表於: 2009/6/5 22:17
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
版主
|
雙重保證,因為在作多中斷判斷時,有可能會因只判斷 IF 會導致誤判,因為 IF 不一定要發生中斷才會被設成 1 ,所以同時檢查 IE & IF 是比較正確的方法。
發表於: 2009/6/5 12:05
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
資深會員
|
SORRY 再多請教一個問題 , 在組語中的 ISR 通常只 CHECK T0IF , 而 C 裏面 為何要 T0IF , TMR0IE 一起 CHECK ?
發表於: 2009/6/5 5:00
|
|||
|
Re: PICC 無法 BUILD...
|
||||
---|---|---|---|---|
資深會員
|
參照:
不好意思 ! 在 PICC manual 裏 搜尋了一下 : 3.10.1.2 Highend Interrupt Functions As there is more than one vector location usable with highend processors, an indicator is required with the function definition to specify the interrupt vector to which the function should associated. This takes the form of a @ symbol followed by the vector address at the end of the function prototype. An example of an interrupt function for a high-end processor is shown here. int tick_count; void interrupt tc_int(void) @ 0x10 { if (TMR0IE && T0IF) { T0IF = 0; ++tick_count; } } 其中 TMR0IE , T0IF 兩者也是 bit 變數 , 它也是用 && 運算子 , 到底何者為對 ? Attach file: (0.00 KB)
發表於: 2009/6/5 4:49
|
|||
|