Mike - K8LH
Well-Known Member
Hi guys,
Am I doing this simple two step 16 bit math operation correctly? I'll simulate it as soon as I wake up...
Am I doing this simple two step 16 bit math operation correctly? I'll simulate it as soon as I wake up...
Code:
;
; CCP1CONbits.CCP1M0 = 0;
; CCPR1L += (20000-Pulse)%256;
; CCPR1H += (20000-Pulse)/256;
;
; pulse is lo so setup CCP1 to go hi on pulse "off-time" match
;
Pulse_Lo
bcf CCP1CON,CCP1M0 ; setup CCP1 to go hi next int |B0
movf PulseLo,W ; W = Pulse%256 |B0
sublw low d'20000' ; W = 20000%256 - Pulse%256 |B0
skpc ; borrow? no, skip, else |B0
decf CCPR1H,f ; borrow from CCPR1H |B0
addwf CCPR1L,f ; CCPR1L += (20000-Pulse)%256 |B0
skpnc ; carry? no, skip, else |B0
incf CCPR1H,f ; carry into CCPR1H |B0
movf PulseHi,W ; W = Pulse/256 |B0
sublw high d'20000' ; W = 20000/256 - Pulse/256 |B0
addwf CCPR1H,f ; CCPR1H += (20000-Pulse)/256 |B0
;