• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: 如何實現讓pic16fxx有多重中斷功能?
#7
初級會員
初級會員


查看用戶資訊
多謝版主.
我已想到方法了,不過要try就是了。
中斷服務對軟體設計而言是很重要的資源,一定要善加規劃。
受到服務的工作要盡速完成,若真的沒辦法也要想法子先讓中斷資源釋放,再完成工作。
若有人有興趣,試完成ok後,也可跟大家分享成果。

發表於: 2006/2/20 10:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 如何實現讓pic16fxx有多重中斷功能?
#6
版主
版主


查看用戶資訊
提一點個人的見解:

1、首先,在發生中斷的時候,GIE會被硬體清為零,以禁能其它中斷。
2、離開中斷的時候,RETFIE的指令,會再將GIE設為1,以致能中斷。

所以,只要在中斷服務程序中,手動的方式,將GIE設為1,就能致能中斷,其它的中斷就能立刻被服務,甚至做到遞迴recursive都有可能。

不過,理論上是這樣,但是實際上,您必須在進入每一層中斷服務程序時,將上一層用到的變數存起來。否則,如果下一次進來的中斷,和上一層是同樣的,那變數就會重覆使用,豈不天下大亂。

發表於: 2006/2/17 18:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 如何實現讓pic16fxx有多重中斷功能?
#5
初級會員
初級會員


查看用戶資訊
感謝!
這方法我想過但不理想,原因如樓上的大大所說.
主要還是這方法少了一點軟體的工程性.
我的意思是說,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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 如何實現讓pic16fxx有多重中斷功能?
#4
資深會員
資深會員


查看用戶資訊
參照:


有沒有可能當T0中斷發生後進入後馬上離開中斷,再去執行ScanDsp(),如此ScanDsp()就變成主程式的一員,可被其他事件中斷。



方法當然是可行啦
但是依之前使用經驗
因為scan的動作是在主程式裡面執行
主程式在不同狀況下,每次LOOP的執行時間通常並不是固定的
也就是會造成每次的scan 間隔時間會有差異
結果就是常常會覺得某幾個column的LED比較亮一點或暗一點
如果對亮度的一致性不care的話, 是可以那樣做的

發表於: 2006/2/17 16:42
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 如何實現讓pic16fxx有多重中斷功能?
#3
初級會員
初級會員


查看用戶資訊
哈囉..
這是可行的,你只要在中斷副程式設定旗標,然後在主程式在執行就好啦..如下:

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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 如何實現讓pic16fxx有多重中斷功能?
#2
初級會員
初級會員


查看用戶資訊
哈囉..
這是可行的,你只要在中斷副程式設定旗標,然後在主程式在執行就好啦..如下:

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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


如何實現讓pic16fxx有多重中斷功能?
#1
初級會員
初級會員


查看用戶資訊
各位好
PIC16Fxx只有一個中斷向量,T0,T1,T2....都共用一個中斷向量
。但有時應用上會產生不便,例如當在執行T0的中斷服務程式時(假設是ScanDsp()... ),若有其他事件產生中斷(如CCP1),就必須等ScanDsp()執行完畢,結果造成事件誤差...

有沒有可能當T0中斷發生後進入後馬上離開中斷,再去執行ScanDsp(),如此ScanDsp()就變成主程式的一員,可被其他事件中斷。

如果這理論無誤,如何在pic16fxx 上實現呢?
非常感謝!!


發表於: 2006/2/17 15:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------