Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
版主
|
參照:
retfie離開中斷副程式,以後就無法再中斷了....^^". 如果進入 0x0000 位址執行後可以將 GIE 位元重新設為 1 就可以了。因為 retfie 除了會娶回堆疊之外還會將 GIE 設為 1。
發表於: 2007/8/15 14:26
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
中級會員
|
從以上前輩所給的這些說明
,我想我的問題應該足以解決. 謝謝大家熱心幫忙. thnanks
發表於: 2007/8/15 13:51
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
版主
|
直接 goto reset 會有堆疊爆掉的問題,因為無法調整到堆疊的頂點就 goto reset 堆疊的指標就無法歸零。
PIC18Fxxxx 因為有 resrt 指令,所以很簡單,只要直接執行reset 指令就可以了。PIC16Fxxx 若要完全 Reset MCU 就只能用 MCLR pin,用 Watch-Dog Timer 來 Reset 只能將 PC Counter 歸零,要注意一下 RAM 及 周邊暫存器大部分是不受 WDT 的影響。詳細請參閱 Data Sheet 有關 各種 Reset 後周邊暫存器的初始設定為何。
發表於: 2007/8/15 10:46
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
中級會員
|
參照:
你說的應該是在intrrupt subroutine執行 goto start
發表於: 2007/8/15 9:12
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
資深會員
|
yiming的方法也很好,但是並非實質的Reset,此種作法在特殊暫存器及一般暫存器中都還儲存原來的值,所以使用上要注意。我的作法會在初始化時,用迴圈把所有的暫存器都清除一次,以確保使用上比較不易產生Bug。
發表於: 2007/8/15 9:11
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
資深會員
|
請教如果要在INT發生時讓reset功能動作的方式,這個問題很難嗎???
INT發生不就到中斷副程式,goto 程式起始位址不就好了.
發表於: 2007/8/15 8:47
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
資深會員
|
方法1.按下按鍵進入睡眠,等待下次按下時喚醒...
那還不簡單,就判斷該按鍵被按下的時候,將I/O狀態設定至適當狀態(最省電的狀態,包含外部不必用的電路電源關閉),接著設定喚醒條件,如Interrupt On Pin Change啟動,再執行SLEEP指令就好了,只要等到設定的Pin狀態一變化就會被喚醒,IC的SPEC裡都有Demo Code可以參考。
發表於: 2007/8/14 17:21
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
中級會員
|
參照:
16f不是也有sleep??
發表於: 2007/8/14 16:57
|
|||
|
Re: 請教如果要在INT發生時讓reset功能動作的方式
|
||||
---|---|---|---|---|
資深會員
|
你用的不是PIC18對吧?
要不要改用PIC18試試? PIC18有SLEEP跟RESET的指令
發表於: 2007/8/14 16:54
|
|||
木亟缶夬金戔
彳艮缶夬金戔 走召缶夬金戔 |
||||
|