Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
資深會員
|
CLRF PCLATH
後面 再加個 CLRF STATUS 還不行那就在 bcf PIR1,0 後面加入 BTFSS LED GOTO $+.3 BCF LED GOTO $+.2 BSF LED 抓一隻腳來點 LED ,確定 TIME1 是活著還是死了
發表於: 2009/12/11 16:14
|
|||
|
Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
資深會員
|
ISR:
我將你的程式重整如上: 不過還很有很多問題: 一、你的『中斷備份還原』寫法及用法 都有問題,STATUS 的資料在RETFIE 之後會不一致 二、中斷中不要再用 CALL ,會產生很多奇怪的問題 (中斷使用的SUBROUTINE ,不應該再被主程式使用) 三、不要用 01234567 要用TMR1ON TRM1IF 這些命名, 四、 TIMER1 的用法不好,跟本不用關閉再開啟。
發表於: 2009/12/11 14:35
|
|||
|
Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
新會員
|
感謝您的回覆
InterruptService: ;------備份Register------ movwf W_Temp movfw STATUS movwf Status_Temp movfw PCLATH movwf Pclath_Temp btfsc PIR1,0 goto Timer1Interrupt ;------還原Register------ movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp retfie Timer1Interrupt: BCF T1CON,0 bcf PIR1,0 movlw 0x00 movwf TMR1L movlw 0x00 movwf TMR1H movfw CountDecMode xorlw START_COUNT_DEC_MODE btfsc STATUS,2 goto OilStartRun goto OilStopRun OilStartRun: call RunModeDecStartTime ;-------還原Register-------- movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp BSF T1CON,0 retfie OilStopRun: call RunModeDecStopTime ;-------還原Register-------- movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp BSF T1CON,0 retfie 我應該有做備份跟還原了,還是大大您指的是.... 可否在清楚解答
發表於: 2009/12/11 13:46
|
|||
|
Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
資深會員
|
中斷程式寫錯了
在 RETFIE 之前,要完成暫存器的還原 所以你的程序序應該是 ORG 0X0004 ISR: 備份 REGISTER T1_ISR: BTFSS PIR1,TMR1IF GOTO TI_ISR_END TI_ISR_END: T2_ISR: BTFSS PIR1,TMR2IF GOTO TI_ISR_END T2_ISR_END: ISR_END: 還原REIGSETER RETFIE
發表於: 2009/12/11 13:36
|
|||
|
Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
新會員
|
上面的程式亂掉了,我從新貼
InterruptService: movwf W_Temp movfw STATUS movwf Status_Temp movfw PCLATH movwf Pclath_Temp btfsc PIR1,0 goto Timer1Interrupt movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp retfie Timer1Interrupt: BCF T1CON,0 bcf PIR1,0 movlw 0x00 movwf TMR1L movlw 0x00 movwf TMR1H movfw CountDecMode xorlw START_COUNT_DEC_MODE btfsc STATUS,2 goto OilStartRun goto OilStopRun OilStartRun: call RunModeDecStartTime movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp BSF T1CON,0 retfie OilStopRun: call RunModeDecStopTime movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp BSF T1CON,0 retfie ;-----中斷服務程式-----Timer1-----
發表於: 2009/12/11 12:36
|
|||
|
Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
新會員
|
不會的,我裡面沒有動到OSCTUNE,我順便把我的Initial程式貼出來
InitTimer1: BCF STATUS,RP0 ;Bank 0 BCF STATUS,RP1 ; movlw 0x00 movwf TMR1L movlw 0x00 movwf TMR1H BCF T1CON,7 BCF T1CON,6 BCF T1CON,5 BCF T1CON,4 BCF T1CON,3 BSF T1CON,2 BCF T1CON,1 movlw 0x00 movwf INTCON BSF INTCON,7 BSF INTCON,6 BSF STATUS,RP0 ;Bank 1 BCF STATUS,RP1 ; movlw 0x00 movwf PIE1 BSF PIE1,0 BCF STATUS,RP0 ;Bank 0 BCF STATUS,RP1 ; return InitOsc: BSF STATUS,RP0 ;Bank 1 BCF STATUS,RP1 ; bsf OSCCON,6 bsf OSCCON,5 bcf OSCCON,4 bsf OSCCON,3 bsf OSCCON,0 BCF STATUS,RP0 ;Bank 0 BCF STATUS,RP1 ; return
發表於: 2009/12/11 12:31
|
|||
|
Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
資深會員
|
會不會程式某個地方去改到OSCTUNE的內容值?
發表於: 2009/12/11 11:57
|
|||
|
Re: 啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
新會員
|
補充一下,我並沒有啟動WDT,在燒錄時的Config就disable了
並且也Disable了BOR
發表於: 2009/12/11 11:51
|
|||
|
啟動Timer後過一段時間INTOSC被變成31K的頻率
|
||||
---|---|---|---|---|
新會員
|
目前我用16f913 28pin的
但是使用上遇到一個問題,我有用到Timer1中斷 並且使用內部震盪器,調整為8M 而且也外接六組七段顯示器 主程式不斷做掃描工作,Timer1中斷程式會將七段顯示器值減一 但程式Run了大約30秒以後我的整個INTOSC頻率整個大幅降低 可是整個程式的功能都還正常,除了Timer1不會產生中斷以外 只是速度變很慢,掃秒速度便非常慢,感覺好像是用31K的頻率 請問一下,有可能會有哪些原因造成這樣?? ;-----中斷服務程式-----Timer1----- InterruptService: movwf W_Temp movfw STATUS movwf Status_Temp movfw PCLATH movwf Pclath_Temp btfsc PIR1,0 goto Timer1Interrupt movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp retfie Timer1Interrupt: BCF T1CON,0 bcf PIR1,0 movlw 0x00 movwf TMR1L movlw 0x00 movwf TMR1H movfw CountDecMode xorlw START_COUNT_DEC_MODE btfsc STATUS,2 goto OilStartRun goto OilStopRun OilStartRun: call RunModeDecStartTime movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp BSF T1CON,0 retfie OilStopRun: call RunModeDecStopTime movfw Status_Temp movwf STATUS movfw Pclath_Temp movwf PCLATH movfw W_Temp BSF T1CON,0 retfie 可否指點個方向@@
發表於: 2009/12/11 11:45
|
|||
|