compare.asm
来自「pic子程序库与运算平台(PIC系列的四则运算、多字节、浮点等运算函数)」· 汇编 代码 · 共 74 行
ASM
74 行
;********************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 + =
减小字号Ctrl + -
显示快捷键?