PIC Microcontoller Math Method

Increment / Decrement

packed BCD

From Regulus Berdin

;Increment/Decrement routines for packed BCD 
; 
;6 digit bcd in bcd1:bcd2:bcd3:...(lsb:msb) 
; 
; 
        cblock  0x0c 
                tmp 
                bcd1:3 
        endc 
inc_bcd: 
        movlw   bcd1 
        movwf   FSR 
        movlw   3               ;adjust for number of digits 
        movwf   tmp 
iloop   movlw   0x67 
        addwf   INDF 
        movlw   0x60 
        skpdc 
         movlw  0x66 
        skpc 
         subwf  INDF 
        skpz 
         goto   iquit 
        incf    FSR 
        decfsz  tmp 
         goto   iloop 
iquit   retlw   0 
  
  

dec_bcd: 
        movlw   bcd1 
        movwf   FSR 
        movlw   3               ;adjust for number of digits 
        movwf   tmp 
dloop   movlw   1 
        subwf   INDF 
        addwf   INDF,w 
        movlw   0x6 
        skpnc 
         movlw  0x66 
        skpndc 
         subwf  INDF 
        xorlw   0x66 
        skpz 
         goto   dquit 
        incf    FSR 
        decfsz  tmp 
         goto   dloop 
dquit   retlw   0 

The routines can accomodate to any number of BCD digits, just change the movlw 3.