⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 catcher.asm

📁 微芯公司的PIC子程序库及运算平台
💻 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 + -