Re: 如何實現讓pic16fxx有多重中斷功能?
|
||||
---|---|---|---|---|
初級會員
|
多謝版主.
我已想到方法了,不過要try就是了。 中斷服務對軟體設計而言是很重要的資源,一定要善加規劃。 受到服務的工作要盡速完成,若真的沒辦法也要想法子先讓中斷資源釋放,再完成工作。 若有人有興趣,試完成ok後,也可跟大家分享成果。
發表於: 2006/2/20 10:01
|
|||
|
Re: 如何實現讓pic16fxx有多重中斷功能?
|
||||
---|---|---|---|---|
初級會員
|
感謝!
這方法我想過但不理想,原因如樓上的大大所說. 主要還是這方法少了一點軟體的工程性. 我的意思是說,ScanDsp()能及時被服務,也能被其他事件所中斷,當scandsp()執行完後會回到main的中斷點再繼續main的敘述。 如果在8752上就簡單許多了;假設8751也僅有一個中斷向量在0x1b(t1)我可以利用T1做分時多工(time sharing);只要設多個旗標來代表不同的工作。依判斷旗標將該工作的地址push到堆疊裡在執行RETI 就ok了。需要暫存的reg. acc .r0.r1 ...到服務程式裡面處理就行了。 pic asm 我還不是很熟埝,我用hi-tech c 。
發表於: 2006/2/17 17:12
|
|||
|
Re: 如何實現讓pic16fxx有多重中斷功能?
|
||||
---|---|---|---|---|
資深會員
|
參照:
方法當然是可行啦 但是依之前使用經驗 因為scan的動作是在主程式裡面執行 主程式在不同狀況下,每次LOOP的執行時間通常並不是固定的 也就是會造成每次的scan 間隔時間會有差異 結果就是常常會覺得某幾個column的LED比較亮一點或暗一點 如果對亮度的一致性不care的話, 是可以那樣做的
發表於: 2006/2/17 16:42
|
|||
|
Re: 如何實現讓pic16fxx有多重中斷功能?
|
||||
---|---|---|---|---|
初級會員
|
哈囉..
這是可行的,你只要在中斷副程式設定旗標,然後在主程式在執行就好啦..如下: void main (void) { if(flag,scandsp) { scandsp(); flag,scandsp=0; } if(.....) {.........} } void interrupt ISR( void ) { if(T0IF) { flag,scandsp=1; T0IF=0; } if(T1IF) {........................} . . . } 大致是這樣囉..
發表於: 2006/2/17 16:20
|
|||
|
Re: 如何實現讓pic16fxx有多重中斷功能?
|
||||
---|---|---|---|---|
初級會員
|
哈囉..
這是可行的,你只要在中斷副程式設定旗標,然後在主程式在執行就好啦..如下: void main (void) { if(flag,scandsp) { scandsp(); flag,scandsp=0; } if(.....) {.........} } void interrupt ISR( void ) { if(T0IF) {flag,scandsp=1;} if(T1IF) {........................} . . . } 大致是這樣囉..
發表於: 2006/2/17 16:18
|
|||
|
如何實現讓pic16fxx有多重中斷功能?
|
||||
---|---|---|---|---|
初級會員
|
各位好
PIC16Fxx只有一個中斷向量,T0,T1,T2....都共用一個中斷向量 。但有時應用上會產生不便,例如當在執行T0的中斷服務程式時(假設是ScanDsp()... ),若有其他事件產生中斷(如CCP1),就必須等ScanDsp()執行完畢,結果造成事件誤差... 有沒有可能當T0中斷發生後進入後馬上離開中斷,再去執行ScanDsp(),如此ScanDsp()就變成主程式的一員,可被其他事件中斷。 如果這理論無誤,如何在pic16fxx 上實現呢? 非常感謝!!
發表於: 2006/2/17 15:49
|
|||
|