• slider image 442
  • slider image 497
  • slider image 498
  • slider image 499
  • slider image 500
  • slider image 502
:::


Browsing this Thread:   1 Anonymous Users






Re: 計時中斷不能正常動作
#10
資深會員
資深會員


查看用戶資訊
程式最大敗筆 : 中斷內 呼叫 delay_250ms

中斷應該是用最快的速度執行完畢, 立刻跳出而不影響正常程式的執行
而且你已經使用 TIMER 0 , 為何還使用 delay_250ms ? 浪費 CPU 速度

#DEFINE FLAG 0X71 , 0
COUNT EQU 0X20
ORG 0
NOP
GOTO START
ORG 4

; BTFSS STATUS , TOIF ; 假如 只有 TIMER 0 中斷 則本行及下一行皆可刪除
; RETFIE
BCF STATUS , TOIF
BSF FLAG
RETFIE

START:
CLRF PORTC
BANKSEL TRISC
CLRF TRISC
MOVLW 3
MOVWF OPTION_REG ; 1 : 16
BANKSEL PORTC
MOVLW 0XC0
MOVWF INTCON ; ENABLE TIMER0 INTERRUPT

DO_LOOP:
BTFSS FLAG
GOTO $ - 1
BCF FLAG ; 4 ms ( 4096 uS )

INCFSZ COUNT , F
GOTO DO_LOOP
BSF COUNT , 3 ; .256 - 8 = 248 ; .248 * 4096 uS = 1,015808 秒
INCF PORTC , F
GOTO DO_LOOP

發表於: 2009/5/14 23:41

Edited by Beee on 2009年05月14日 23:56:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#9
高級會員
高級會員


查看用戶資訊
好像少一行!!
delay_1ms:
nop
movlw VAL_US
movwf count
dec_loop nop
decfsz count
goto dec_loop
return

再問你一個問題:
如果中斷副程式正確地 1ms中斷一次 , 剛好在delay_1ms副程式的 movlw VAL_US執行完還沒執行下一行時產生中斷, 並且將 W 改為6後返回 ,
那你的delay_1ms 的delay時間會變成怎樣??

同樣的狀況 , 如果中斷剛好在 movlw VAL_MS執行完時產生中斷, 那 delay_250mS 會 delay 多久 ??

發表於: 2009/5/14 23:24
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#8
新會員
新會員


查看用戶資訊
你好,這是延遲時間


delay_250mS:
movlw VAL_MS
movwf count_ms
loop_ms call delay_1ms
decfsz count_ms
goto loop_ms
return
;******************************
delay_1ms:
nop
movlw VAL_US
movwf count
dec_loop nop
goto dec_loop
return

發表於: 2009/5/14 22:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#7
高級會員
高級會員


查看用戶資訊
另外 , 請問你的 OSC 用多少? , TIMER0多久中斷一次 ??
假設OSC用 4M Hz , 則預除16且TMR0設6 約 1ms中斷一次 , 那中斷內再 call delay_250ms 就不合理了.

參照:
我的計時中斷程式是否有寫錯,


我建議計時中斷程式一秒 的計時 , 主程式看到一秒到了, 去點 PORTC 的 LED

發表於: 2009/5/14 16:19

Edited by genitec on 2009年05月14日 16:41:09
Edited by genitec on 2009年05月14日 16:41:54
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#6
高級會員
高級會員


查看用戶資訊
版大眼花又看錯 ic了 , 16f877 的TIMER0 中斷 只需設 T0IE及GIE 即可.

Attach file:



jpg  (0.00 KB)


發表於: 2009/5/14 16:13
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#5
版主
版主


查看用戶資訊
INTCON 裡的 PEIE (Peripheral Interrupt Enable Bit) 要設為 1, 並依起配合 GIE 這樣才可以中斷。

發表於: 2009/5/14 13:39
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#4
高級會員
高級會員


查看用戶資訊
你的主程式 有呼叫 delay_250ms , 中斷副程式內也有(這部份有點??) , 而且中斷副程式有改到 w_reg 的值 , 那主程式呼叫的delay_250ms 有可能永遠出不來
能不能把你的 delay_250ms 的內容放上來 ??



;*********************************************************
;*                
;*    
每隔1秒鐘計時中斷,PORTC外接LED全亮後從0遞增
;*********************************************************
        list 
p=16f877
#include    <p16f877.inc>
  
;********************虛擬指令設定*************************
VAL_US        equ        .249        ;1ms delay 給定初值
VAL_MS        equ        .250        
;呼叫1ms delay之次數
            
count        equ        0x20        
;1ms delay變數
count_ms    equ        0x21        
;呼叫1ms delay之變數位址
number        equ        0x22
        
;*********************程式開始***************************
        
org        0x00        
        nop                    
        
goto        start

        org        0x04        
        
goto        isr    

start
:        clrw        0x00
        clrf        PCLATH        
                
        banksel        TRISC        
        clrf        TRISC        
        banksel        PORTC        
        clrf        PORTC
        banksel        OPTION_REG
        movlw        
B'00000011'
        
movwf        OPTION_REG
        bsf        INTCON
,GIE
        bsf        INTCON
,TOIE
        banksel        TMR0
        movlw        .6
        movwf        TMR0
        movwf        number

inc
:        incf        PORTC
        call        delay_250ms
        
goto        inc
        
                
;***********************中斷副程式***************************
isr:    
        
incfsz        number
        
goto        isr_end
        movlw        .6
        movwf        number
        movlw        
B'11111111'
        
movwf        PORTC
        call        delay_250ms


isr_end
:
        
movlw        .6
        movwf        TMR0
        bcf        INTCON
,T0IF        
        retfie

;**********************250ms delay routine**********************    
delay_250mS:        
        (
)
        return

        
end

發表於: 2009/5/14 12:39
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#3
版主
版主


查看用戶資訊
建議參考一下 201 ASP 教育訓練課程,那裡使用PIC16F887 配合 APP001 實驗版所做的練習。中斷、pwm、adc 等都有範例可參考。

http://www.microchip.com.tw/modules/w ... glefile.php?cid=3&lid=380

發表於: 2009/5/14 11:08
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 計時中斷不能正常動作
#2
資深會員
資深會員


查看用戶資訊
不要用 rar 上傳 檔案會損害 改用 zip 再試一次

可能是你在中斷( isr ) 沒將中斷旗標 清除掉 , 就跳出中斷 會造成 不斷重新進入中斷.....
例如 用 TIMER 0 則要在 ISR 內 將 T0IF 清除 ( BCF INTCON , T0IF )

試著 用 MPLAB SIM ( DEBUG 選項 ) 用單步追蹤 就可明瞭

發表於: 2009/5/14 1:14

Edited by Beee on 2009年05月14日 04:21:08
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


計時中斷不能正常動作
#1
新會員
新會員


查看用戶資訊
個位高手你們好
最近我才學pic這個程式,因為在大學其間只有有8051跟VB還有C語言,可是都沒有好好學感到可惜,想說已經出社會一年了不應該再浪費時間,趁年青趕快學一些專長
小弟現在已經練習到計時中斷,我已經研究2個星期了也是稿不出所以,想說請叫個位高手,我的計時中斷程式是否有寫錯,因為我寫完程式燒錄在16F877上沒有動作,連1顆led都不亮,如果我打計時中斷把它去掉,led就可以正常動作,所以麻煩高手請多多指導小弟

Attach file:


Link only for registered users

發表於: 2009/5/14 0:34

Edited by tree on 2009年05月14日 01:39:17
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... ]

教育訓練中心

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