?? compare.asm
字號:
;********************COMPARE********************
;本程序實現用比較器模塊輸出方波。
;入口參數:正脈沖寬度在SOUH:SOU中,負脈沖寬度在RLTH:RLT中。
;出口參數:正脈沖寬度為(SOUH:SOU)*4TOSC,負脈沖寬度為(RLTH:RLT)*4TOSC。
;占用資源:W,STATUS,INT,TMR1,023H,024H,025H,028H,029H,二重堆棧。
;說明: 1.使用該程序需在中斷入口程序中填入如下兩條指令
; BTFSC PIR1,CCP1IF
; GOTO CMPINT
; 2.正負脈沖寬度均要求在30*4TOSC~65536*4TOSC之間
IFNDEF COMPARE1
#DEFINE COMPARE1
SAVEW EQU 07FH ;現場保護中保存W的地址
SAVES EQU 07EH
COMPARE MOVLW 03H
SUBWF SOU,F
BTFSS STATUS,C
DECF SOUH,F
SUBWF RLT,F
BTFSS STATUS,C
DECF RLTH,F ;脈寬補償,提高精度
MOVF SOUH,W
MOVWF CCPR1H
MOVF SOU,W
MOVWF CCPR1L
CLRF TMR1H
CLRF TMR1L ;TMR1清0
BSF INTCON,PEIE
BSF INTCON,GIE
BSF STATUS,RP0
BCF PIE1,CCP1IE ;關中斷
BCF PIE1,TMR1IE
BCF TRISC,2 ;RC2輸入
BCF STATUS,RP0
MOVLW B'00000000' ;T1定時器方式,1:1分頻
MOVWF T1CON
MOVLW B'00001000' ;設置CCP1為比較工作方式,輸出高電平
MOVWF CCP1CON
BCF PIR1,CCP1IF
BSF STATUS,RP0
BSF PIE1,CCP1IE ;開中斷
BCF STATUS,RP0
BSF T1CON,TMR1ON ;開始定時
RETURN
;*******************比較中斷************************
CMPINT CLRF TMR1L
CLRF TMR1H
MOVWF SAVEW
SWAPF STATUS,W
CLRF STATUS
MOVWF SAVES ;保護現場
BTFSC CCP1CON,CCP1M0
GOTO NEXT59
MOVF SOUH,W
MOVWF CCPR1H
MOVF SOU,W
MOVWF CCPR1L ;加載正脈沖寬度
BSF CCP1CON,CCP1M0 ;比較輸出1
GOTO DONE14
NEXT59 MOVF RLTH,W
MOVWF CCPR1H
MOVF RLT,W
MOVWF CCPR1L ;加載負脈沖寬度
BCF CCP1CON,CCP1M0 ;比較輸出0
DONE14 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 + -