FreqUp
movf StepLo, W
addwf F0
btfss STATUS, C
goto FrqUp1Done ;if FreqMe already = 0 and no overflow then
incf F1 ; an error occurs here without the jump out
btfsc STATUS, Z ; Test for overflow after above increment
incf F2 ;
btfsc STATUS, Z
incf F3 ;
FrqUp1Done
movf StepMe, W
addwf F1
btfss STATUS, C
goto FrqUp2Done
incf F2
btfsc STATUS, Z
incf F3
FrqUp2Done
movf StepHi, W
addwf F2
btfsc STATUS, C
incf F3
;
; check upper limit (must define or equ an 'uplimit' constant)
;
radix dec
uplimit equ 1000001 ; 10000.01-Hz upper limit
movlw uplimit>>24 ; upper limit 'uh' |00
subwf F3,W ; |00
skpz ; equal? yes, skip, else |00
goto upcheck ; banch, check for '<' or '>' |00
movlw uplimit>>16 ; upper limit 'ul' |00
subwf F2,W ; |00
skpz ; equal? yes, skip, else |00
goto upcheck ; branch, check for '<' or '>' |00
movlw uplimit>>8 ; upper limit 'hi' |00
subwf F1,W ; |00
skpz ; equal? yes, skip, else |00
goto upcheck ; branch, check for '<' or '>' |00
movlw uplimit ; upper limit 'lo' |00
subwf F0,W ; |00
upcheck skpnc ; C = 0 ('<')? yes, skip, else |B0
goto FreqDn ; branch (undo FreqUp op') |B0
return ; |B0