;----------------------------------------中断-------------------------------------------
Q026 MOVWF 30H
MOVF STATUS,0
MOVWF 31H ;保护现场
BTFSC INTCON,0 ;是否B口中断
GOTO Q028 ;是,执行B口中断子程序
BTFSC PIR1,0 ;是否定时器1中断
GOTO Q031 ;是,执行定时器1中断子程序
;---------------------------------------------------------------------------------------
Q027 MOVF 31H,0
MOVWF STATUS ;恢复现场
MOVF 30H,0
RETFIE ;返回
;-------------------------------------B口中断子程序-------------------------------------
Q028 BTFSS PORTB,6 ;是否RB6中断
GOTO Q029 ;是,进入RB6中断子程序
BTFSS PORTB,7 ;是否RB7中断
GOTO Q030 ;是,进入RB7中断子程序
GOTO Q027 ;返回
;---------------------------------------------------------------------------------------
Q029 BTFSS 20H,1 ;是否重复中断
GOTO Q027 ;返回
MOVF TMR1H,W
SUBLW 0F4H
BTFSC STATUS,0 ;是否大于9毫秒
GOTO Q027 ;干扰信号,返回
MOVLW 0ADH
MOVWF TMR1H
MOVLW 0F8H ;装定时器初值(定时时间10.5ms)
MOVWF TMR1L
INCF 22H,1 ;速度记数器加1
BCF 20H,1 ;置本次中断标志
BCF INTCON,0 ;清除中断标志
GOTO Q027 ;返回
;---------------------------------------------------------------------------------------
Q030 BTFSC 20H,1 ;是否重复中断
GOTO Q027 ;返回
MOVF TMR1H,W
SUBLW 0F4H
BTFSC STATUS,0 ;是否大于9毫秒
GOTO Q027 ;干扰信号,返回
MOVLW 0ADH
MOVWF TMR1H
MOVLW 0F8H ;装定时器初值(定时时间10.5ms)
MOVWF TMR1L
INCF 22H,1 ;速度记数器加1
BSF 20H,1 ;置本次中断标志
BCF INTCON,0 ;清除中断标志
GOTO Q027 ;返回
;-----------------------------------定时器1中断子程序-----------------------------------
Q031 MOVLW 0FH
BCF PIR1,0 ;清除中断标志
GOTO Q031 ;返回
END
;--------------------------------------------------------------------------------------- |