Re: 想請問中斷
|
||||
---|---|---|---|---|
新會員
|
INTSUB1:
MOVWF W_TEMP SWAPF STATUS,W MOVWF STATUS_TEMP DECFSZ COUNT0,F GOTO ISR_END1 COMF PORTC,0 MOVLW .5 MOVWF COUNT0 ISR_END1: BCF PIR1,TMR1IF CLRF TMR1H CLRF TMR1L SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W RETFIE
發表於: 2007/2/13 1:43
|
|||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
資深會員
|
我一直有個問題
看過好幾個人在中斷中會執行swapf 就如樓上所寫的 進入中斷後先SWAPF再丟入備份暫存檔中 離開後再從暫存檔中SWAPF到狀態暫存器 而最後再SWAPF兩次到W 我想請問為何要做SWAPF的動作 為啥不直接MOVF MOVWF 就好? 雖然說我從沒做過SWAPF也都沒出問題過 但就是有疑問... 產生中斷後就要趕快把事情做完趕快離開 為啥要多花幾個指令時間做交換?! 剛剛看了樓上的程式 雖然我不懂你想問的意思 不過我看到一個怪地方 你執行了 COMF PORTC,0 這一行的意思是把PORTC的值全部反相再放到W 下一行你就把5放到W 就把上一行的值改掉了 如果你的意思是要把RC0反相的話 那你應該執行BTG PORTC,0 COMF是反相整個暫存器 BTG 是反相一個位元
發表於: 2007/2/13 8:41
|
|||
木亟缶夬金戔
彳艮缶夬金戔 走召缶夬金戔 |
||||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
初級會員
|
因為如果你用SWAP的指令執行完這種指令他是不會影響到你的任何旗標的狀態,如果你用MOVF這種指令他是會影響到你的Z旗標的
發表於: 2007/2/13 8:57
|
|||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
資深會員
|
了解
謝了 我想應該是我沒用過PIC16 我用PIC18都是一進中斷就用MOVFF備份STATUS 離開時先用MOVF放回W再回存STATUS所以才沒出問題 PIC16沒有MOVFF還真不方便...
發表於: 2007/2/13 9:04
|
|||
木亟缶夬金戔
彳艮缶夬金戔 走召缶夬金戔 |
||||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
新會員
|
我是想問 我po的程式是進入中斷後的內容
進入時我們會先備份資料 之後作中斷時所需的程式 隻後重設中斷 還原 但是我使用中斷計時 時間點我不會算ㄟ 就是哪一個程式還在中斷 哪裡中斷結束跳回中斷點04h 還是哪裡有再等待中段時間的 DECFSZ COUNT0,F 這是我判斷所設的中斷次數 還沒到我就繼續執行isr_end 但他跑完裡面的程式就又進入04h 那我假如計時10分鐘 跑完那些程式不用到一秒吧 剩餘的時間 跑哪了 一直在疑惑中斷 有誰可以跟我解式詳細的中斷用法
發表於: 2007/2/13 13:03
|
|||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
高級會員
|
之前也有同樣的疑問..也發現過的確會影響到Z Flag..
原來是movf這個指令影響呀....謝謝 中斷的用法大致上是這樣的... org 0000h ; 程式開始執行的位址 goto main; org 0004h ; 中斷位址 (A) goto isr_func; //-------------------------------- isr_func: ; 中斷副程式 mPush ; 備份暫存器 ... ; 計時重置 ... mPop ; 暫存器還原 RETFIE ; 回到中斷下一行指令繼續執行 (B) //-------------------------------- main: ..... movlw d'55'; ----> 時間計時溢位跳到中斷向量位址0004 (A) movwf bReg0; --> (B) ..... goto main timer是一個模組..只要設定好相關暫存器.. 他會自己計時..然後中斷條件成立.. 會產生一個中斷信號給mcu..然後mcu才跳到0004h執行.. 計時時間與時脈&預除器有關.. datasheet寫的很清楚可以參考... 備份與還原的動作... 是不希望中斷程式改變掉主程式正在執行的資料... 以上..
發表於: 2007/2/13 13:48
|
|||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
新會員
|
多謝你的解答
我會在想一想的
發表於: 2007/2/14 0:11
|
|||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
資深會員
|
還有要注意一點:
W_TEMP , STATUS_TEMP ( 或其他名稱?)變數 要放在 0x70 以後的位址 那裡為 通用位址 ( BANK 0 , 1 , 2 , 3 都可以存取 ) 如放在其他位址 , 則要注意 BANK 的切換 ( 太麻煩了! )
發表於: 2007/2/15 20:33
|
|||
|
Re: 想請問中斷
|
||||
---|---|---|---|---|
中級會員
|
參照:
怎么會麻煩?BANK的切換基本上是避免不了的!
發表於: 2007/2/16 2:53
|
|||
|