?? catcher.asm
字號:
;********************CATCHER********************
;本程序實現用捕捉方式實現方波周期和正脈沖寬度測量。
;入口參數:CCP1引腳上輸入方波。
;出口參數:正脈沖寬度在SOUH:SOU中,方波周期在RLTH:RLT中。
;占用資源:W,STATUS,INT,TMR1,023H,024H,025H,028H,029H,二重堆棧。
;說明: 1.使用該程序需在中斷入口程序中填入如下兩條指令
; BTFSC PIR1,CCP1IF
; GOTO CATINT
; 2.方波周期必須在30*4TOSC~65536*4TOSC之間,
; 正脈沖必須大于10TOSC,否則測量值無效
IFNDEF CATCHER1
#DEFINE CATCHER1
SAVEW EQU 07FH ;現場保護中保存W的地址
SAVES EQU 07EH
CATCHER MOVLW 4
MOVWF SOU
MOVWF RLT
CLRF SOUH
CLRF RLTH
CLRF TMR1H
CLRF TMR1L ;定時器清0
BSF INTCON,PEIE
BSF INTCON,GIE
BSF STATUS,RP0
BCF PIE1,CCP1IE ;關中斷
BSF TRISC,2 ;RC2輸入
BCF STATUS,RP0
MOVLW B'00000000' ;T1定時器方式,1:1分頻
MOVWF T1CON
MOVLW B'00000101' ;設置CCP1為捕捉工作方式,上升沿觸發
MOVWF CCP1CON
BCF PIR1,CCP1IF
BTFSS PIR1,CCP1IF ;捕捉到第一個上升沿了嗎?
GOTO $-1 ;此過程損失掉4*4TOSC
BSF T1CON,TMR1ON ;開始定時
CLRF CCP1CON
BSF CCP1CON,CCP1M2 ;下降沿捕捉
BCF PIR1,CCP1IF
BSF STATUS,RP0
BSF PIE1,CCP1IE ;開中斷
BCF STATUS,RP0
RETURN
;*******************捕捉中斷************************
CATINT MOVWF SAVEW
SWAPF STATUS,W
CLRF STATUS
MOVWF SAVES ;保護現場
BTFSC CCP1CON,CCP1M0
GOTO NEXT51
MOVF CCPR1L,W
ADDWF SOU,F ;加上損失掉的4*4TOSC
BTFSC STATUS,C
INCF SOUH,F
MOVF CCPR1H,W
ADDWF SOUH,F ;得到正脈沖寬度
CLRF CCP1CON
MOVLW B'00000101'
MOVWF CCP1CON ;上升沿捕捉
GOTO DONE13
NEXT51 MOVF CCPR1L,W
ADDWF RLT,F ;加上損失掉的4*4TOSC
BTFSC STATUS,C
INCF RLTH,F
MOVF CCPR1H,W
ADDWF RLTH,F ;得到周期數
CLRF CCP1CON ;關閉捕捉功能
BCF T1CON,TMR1ON ;關閉T1
DONE13 BCF PIR1,CCP1IF
SWAPF SAVES,W
MOVWF STATUS
SWAPF SAVEW,F
SWAPF SAVEW,W ;恢復現場
RETFIE
ENDIF
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -