diff src/i2c.asm @ 582:b455b31ce022

work on 2.97 stable
author heinrichsweikamp
date Mon, 26 Feb 2018 16:40:28 +0100
parents b8f45b57302d
children ca4556fb60b9
line wrap: on
line diff
--- a/src/i2c.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/i2c.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,987 +1,995 @@
 ;=============================================================================
 ;
-;   File i2c.asm
+;   File i2c.asm														V2.98
 ;
 ;   I2C Interface
-;   
-    ; Compass0
-;   HMC5883L's read address (8-Bit):    0x3D
-;   HMC5883L's write address (8-Bit):   0x3C
-;   MMA8452Q's read address (8-Bit):    0x39
-;   MMA8452Q's write address (8-Bit):   0x38
-;
-    ; Compass1
-;   LSM303D's read address (8-Bit):    0x3D
-;   LSM303D's write address (8-Bit):   0x3C
-;
-    ; Compass2
-;   LSM303AGR's Compass read address (8-Bit):    0x3D
-;   LSM303AGR's Compass write address (8-Bit):   0x3C
-;   LSM303AGR's Acceleration read address (8-Bit):    0x33
-;   LSM303AGR's Acceleration write address (8-Bit):   0x32
-;    
-    ; RX Circuity
-;   RX Circuity read address (8-Bit):    0x51
-;   RX Circuity write address (8-Bit):   0x50
-;
 ;
 ;   Copyright (c) 2012, JD Gascuel, HeinrichsWeikamp, all right reserved.
 ;=============================================================================
+;
+;   Compass0
+;   --------
+;   HMC5883L's read address  (8-Bit):  0x3D
+;   HMC5883L's write address (8-Bit):  0x3C
+;   MMA8452Q's read address  (8-Bit):  0x39
+;   MMA8452Q's write address (8-Bit):  0x38
+;
+;   Compass1
+;   --------
+;   LSM303D's read address  (8-Bit):   0x3D
+;   LSM303D's write address (8-Bit):   0x3C
+;
+;   Compass2
+;   --------
+;   LSM303AGR's Compass read address       (8-Bit):  0x3D
+;   LSM303AGR's Compass write address      (8-Bit):  0x3C
+;   LSM303AGR's Acceleration read address  (8-Bit):  0x33
+;   LSM303AGR's Acceleration write address (8-Bit):  0x32
+;
+;   RX Circuity
+;   -----------
+;   RX Circuity read address  (8-Bit):  0x51
+;   RX Circuity write address (8-Bit):  0x50
+;
+;
+
 ; HISTORY
 ;  2012-08-22 : [mH] Creation
 ;  2018-02-18 : [mH] Sync with hwOS Sport release
 
 
-#include "hwos.inc"                ; Mandatory header
+#include "hwos.inc"						; Mandatory header
 #include "wait.inc"
 #include "math.inc"
 #include "external_flash.inc"
 
-i2c    CODE
+
+i2c		CODE
+
+;=============================================================================
 
 WaitMSSP:
-	decfsz		i2c_temp,F          ; check for timeout during I2C action
+	decfsz	i2c_temp1,F					; check for timeout during I2C action
 	bra		WaitMSSP2
-	bra		I2CFail             ; timeout occured
+	bra		I2CFail						; timeout occurred
 WaitMSSP2:
-	btfss		PIR1,SSP1IF
+	btfss	PIR1,SSP1IF
 	bra		WaitMSSP
-	clrf		i2c_temp
+	clrf	i2c_temp1
 	bcf		PIR1,SSP1IF
 	return
 
 I2C_WaitforACK:
-	btfss		SSP1CON2,ACKSTAT     ; checks for ACK bit from slave
+	btfss	SSP1CON2,ACKSTAT			; checks for ACK bit from slave
 	return
 I2CFail:
-	rcall		I2CReset            ; I2C Reset
+	rcall	I2CReset					; I2C Reset
 	bcf		PIR1,SSP1IF
-	clrf		i2c_temp
-	bsf		i2c_error_flag		; set error flag
+	clrf	i2c_temp1
+	bsf		i2c_error_flag				; set error flag
 	return
 
-I2CReset:                           ; Something went wrong (Slave holds SDA low?)
-	clrf		SSP1CON1            ; wake-up slave and reset entire module
-	clrf		SSP1CON2
-	clrf		SSP1STAT
-	bcf			TRISC,3             ; SCL OUTPUT
-	bsf			TRISC,4             ; SDA Input
-	bcf			PORTC,3
-	movlw		d'9'
-	movwf		i2c_temp            ; clock-out 9 clock cycles manually
+I2CReset:								; Something went wrong (Slave holds SDA low?)
+	clrf	SSP1CON1					; wake-up slave and reset entire module
+	clrf	SSP1CON2
+	clrf	SSP1STAT
+	bcf		TRISC,3						; SCL OUTPUT
+	bsf		TRISC,4						; SDA Input
+	bcf		PORTC,3
+	movlw	d'9'
+	movwf	i2c_temp1					; clock-out 9 clock cycles manually
 I2CReset_1:
-	bsf			PORTC,3             ; SCL=1
+	bsf		PORTC,3						; SCL=1
 	nop
 	nop
 	nop
 	nop
-	btfsc		PORTC,4             ; SDA=1?
-	bra			I2CReset_2          ; =1, SDA has been released from slave
-	bcf			PORTC,3             ; SCL=0
+	btfsc	PORTC,4						; SDA=1?
+	bra		I2CReset_2					; =1, SDA has been released from slave
+	bcf		PORTC,3						; SCL=0
 	nop
 	nop
-	bcf			PORTC,3
+	bcf		PORTC,3
 	nop
 	nop
-	decfsz		i2c_temp,F
-	bra         I2CReset_1          ; check for nine clock cycles
+	decfsz	i2c_temp1,F
+	bra		I2CReset_1					; check for nine clock cycles
 I2CReset_2:
-	bsf			TRISC,3             ; SCL Input
-	clrf		SSP1CON1            ; setup I²C Mode
-	WAITMS		d'10'               ; Reset-Timeout for I2C devices
-	movlw		b'00000000'         ; with slew rate control
-	movwf		SSP1STAT
-	movlw		b'00101000'
-	movwf		SSP1CON1
-	movlw		b'00000000'
-	movwf		SSP1CON2
-    movlw       0x27
-	movwf		SSP1ADD
+	bsf		TRISC,3						; SCL Input
+	clrf	SSP1CON1					; setup I²C Mode
+	WAITMS	d'10'						; Reset-Timeout for I2C devices
+	movlw	b'00000000'					; with slew rate control
+	movwf	SSP1STAT
+	movlw	b'00101000'
+	movwf	SSP1CON1
+	movlw	b'00000000'
+	movwf	SSP1CON2
+	movlw	0x27
+	movwf	SSP1ADD
 	return
 
 I2C_TX:
-	movwf		SSP1BUF
-	rcall		WaitMSSP
-	bra 		I2C_WaitforACK      ; Returns...
+	movwf	SSP1BUF
+	rcall	WaitMSSP
+	bra		I2C_WaitforACK				; Returns...
 
-I2C_TwoBytesRX_div16:       ; Get two bytes and devide lo:hi/16 (signed)
-    rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,hi          ; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,lo          ; Data Byte
-I2C_TwoBytesRX_div16_2:     ; devide lo:hi/16 (signed) only
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /2
-    rrcf		lo
-I2C_TwoBytesRX_div8_2:     ; devide lo:hi/8 (signed) only
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /4
-    rrcf		lo
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /8
-	rrcf		lo
-    bcf			STATUS,C
-    btfsc       hi,7        ; Copy sign bit to carry
-    bsf         STATUS,C
-    rrcf		hi          ; /16
-	rrcf		lo
-    return
+I2C_TwoBytesRX_div16:					; Get two bytes and divide lo:hi/16 (signed)
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+I2C_TwoBytesRX_div16_2:					; divide lo:hi/16 (signed) only
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /2
+	rrcf	lo
+I2C_TwoBytesRX_div8_2:					; divide lo:hi/8 (signed) only
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /4
+	rrcf	lo
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /8
+	rrcf	lo
+	bcf		STATUS,C
+	btfsc	hi,7						; Copy sign bit to carry
+	bsf		STATUS,C
+	rrcf	hi							; /16
+	rrcf	lo
+	return
 
-    global  I2C_RX_accelerometer
+	global	I2C_RX_accelerometer
 I2C_RX_accelerometer:
-    btfsc   compass_type2	    ; compass2
-    bra	    I2C_RX_accelerometer_compass2    ; yes
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_RX_accelerometer_compass1    ; yes
+	btfsc	compass_type2					; compass2
+	bra		I2C_RX_accelerometer_compass2	; yes
+	btfsc	compass_type					; compass1?
+	bra		I2C_RX_accelerometer_compass1	; yes
 I2C_RX_accelerometer_compass0:
-    bsf			SSP1CON2,SEN		; Start condition
-    rcall		WaitMSSP
-    movlw		0x38                ; address
-    rcall       I2C_TX
-    movlw		0x00
-    rcall       I2C_TX
-    bsf			SSP1CON2,RSEN		; Repeated start condition (!)
-    rcall		WaitMSSP
-    movlw		0x39                ; address
-    rcall       I2C_TX
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x00
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x39						; address
+	rcall	I2C_TX
 
-    rcall       I2C_OneByteRX       ; Get Status Byte
-    movf        SSP1BUF,W
+	rcall	I2C_OneByteRX				; Get Status Byte
+	movf	SSP1BUF,W
 
-    ; Non-flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = -x
-    ; y = -y
-    ; z = -z
+	; Non-flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = -x
+	; y = -y
+	; z = -z
 
-    ; Flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = x
-    ; y = y
-    ; z = -z
+	; Flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = x
+	; y = y
+	; z = -z
 
-    rcall       I2C_TwoBytesRX_div16 ; Get two bytes and devide /16 (signed)
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer2   ; Yes
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	rcall	I2C_TwoBytesRX_div16		; Get two bytes and divide /16 (signed)
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer2		; Yes
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer2:
-    movff       lo,accel_DX+0
-    movff       hi,accel_DX+1       ; Copy result
+	movff	lo,accel_DX+0
+	movff	hi,accel_DX+1				; Copy result
 
-    rcall       I2C_TwoBytesRX_div16 ; Get two bytes and devide /16 (signed)
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer3   ; Yes
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	rcall	I2C_TwoBytesRX_div16		; Get two bytes and divide /16 (signed)
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer3		; Yes
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer3:
-    movff       lo,accel_DY+0
-    movff       hi,accel_DY+1       ; Copy result
+	movff	lo,accel_DY+0
+	movff	hi,accel_DY+1				; Copy result
 
-    rcall       I2C_OneByteRX       ; Get one byte
-	movff		SSP1BUF,hi          ; Data Byte
-	bsf			SSP1CON2, RCEN      ; Enable recieve mode
-    rcall		WaitMSSP
-; According to datasheet there should be no Master Acknowlegde for the last Byte (accel_DZ+0)...
-	movff		SSP1BUF,lo          ; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+; According to data sheet there should be no Master Acknowledge for the last Byte (accel_DZ+0)...
+	movff	SSP1BUF,lo					; Data Byte
 
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-    movff       lo,accel_DZ+0
-    movff       hi,accel_DZ+1       ; Copy result
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+	movff	lo,accel_DZ+0
+	movff	hi,accel_DZ+1				; Copy result
 
-	bsf			SSP1CON2,PEN		; Stop condition
-	bra		WaitMSSP	; (And return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 I2C_RX_accelerometer_compass1:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	b'10101000'	    ; 0x28 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-I2C_RX_accelerometer_compass1_xx:   ; compass2 continues here... 
-    rcall       I2C_TX
-    ; Non-flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = -x (Compass 1)
-    ; x = x (Compass 2)
-    ; y = -y
-    ; z = -z
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	b'10101000'					; 0x28 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+I2C_RX_accelerometer_compass1_xx:		; compass2 continues here... 
+	rcall	I2C_TX
+
+	; Non-flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = -x (Compass 1)
+	; x = x (Compass 2)
+	; y = -y
+	; z = -z
+
+	; Flipped screen:
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = x (Compass 1)
+	; x = -x (Compass 2)
+	; y = y
+	; z = -z
 
-    ; Flipped screen:
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = x (Compass 1)
-    ; x = -x (Compass 2)
-    ; y = y
-    ; z = -z
-    
-    ; Dump the accelerator data
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,lo  ;accel_DX+0
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,hi  ;accel_DX+1
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    btfss	compass_type2	    ; compass 2?
-    bra		I2C_RX_accelerometer1_c1    ; No, compass 1
-    ; compass 2
-    btfss       flip_screen             ; 180° rotation ?
-    bra		I2C_RX_accelerometer2_c1    ; No, continue with normal compass1 routines for Y and Z
-    ; flipped compass 2, negate x
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-    bra		I2C_RX_accelerometer2_c1    ; continue with normal compass1 routines for Y and Z
-    
-I2C_RX_accelerometer1_c1:    
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer2_c1   ; Yes
-    ; non-flipped compass 1, negate x
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	; Dump the accelerator data
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,lo					; accel_DX+0
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,hi  ;accel_DX+1
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	btfss	compass_type2				; compass 2?
+	bra		I2C_RX_accelerometer1_c1	; No, compass 1
+	; compass 2
+	btfss	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer2_c1	; No, continue with normal compass1 routines for Y and Z
+	; flipped compass 2, negate x
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+	bra		I2C_RX_accelerometer2_c1	; continue with normal compass1 routines for Y and Z
+
+I2C_RX_accelerometer1_c1:
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer2_c1	; Yes
+	; non-flipped compass 1, negate x
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer2_c1:
-    ; flipped compass 1, non-flipped compass 2
-    movff       lo,accel_DX+0
-    movff       hi,accel_DX+1       ; Copy result
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,lo  ;accel_DY+0
-    rcall       I2C_OneByteRX       
-    movff	SSP1BUF,hi  ;accel_DY+1
-    
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    btfsc       flip_screen             ; 180° rotation ?
-    bra         I2C_RX_accelerometer3_c1   ; Yes
-    comf        hi                    ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+	; flipped compass 1, non-flipped compass 2
+	movff	lo,accel_DX+0
+	movff	hi,accel_DX+1				; Copy result
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,lo					; accel_DY+0
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,hi					; accel_DY+1
+
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_accelerometer3_c1	; Yes
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_accelerometer3_c1:
-    movff       lo,accel_DY+0
-    movff       hi,accel_DY+1       ; Copy result
+	movff	lo,accel_DY+0
+	movff	hi,accel_DY+1				; Copy result
 
-    rcall       I2C_OneByteRX     
-    movff	SSP1BUF,lo  ;accel_DZ+0
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-; According to datasheet there should be no Master Acknowlegde for the last Byte (accel_DZ+1)...
-    movff	SSP1BUF,hi  ;accel_DZ+1
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-    rcall       I2C_TwoBytesRX_div16_2; devide lo:hi/16 (signed) only
-    comf        hi                    ; 16bit sign change for Z
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-    movff       lo,accel_DZ+0
-    movff       hi,accel_DZ+1       ; Copy result
-    return
-    
+	rcall	I2C_OneByteRX
+	movff	SSP1BUF,lo					;accel_DZ+0
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+; According to data sheet there should be no Master Acknowledge for the last Byte (accel_DZ+1)...
+	movff	SSP1BUF,hi					;accel_DZ+1
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+	rcall	I2C_TwoBytesRX_div16_2		; divide lo:hi/16 (signed) only
+	comf	hi							; 16bit sign change for Z
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+	movff	lo,accel_DZ+0
+	movff	hi,accel_DZ+1				; Copy result
+	return
+
 I2C_RX_accelerometer_compass2:
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x32                ; address
-    rcall       I2C_TX
-    movlw	b'10101000'	    ; 0x28 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x33                ; address
-    bra		I2C_RX_accelerometer_compass1_xx
-    
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; address
+	rcall	I2C_TX
+	movlw	b'10101000'					; 0x28 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x33						; address
+	bra		I2C_RX_accelerometer_compass1_xx
+
 I2C_OneByteRX:
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-    bsf		SSP1CON2,ACKEN	    ; Master acknowlegde
-    bra		WaitMSSP	    ; And return!
+	bsf		SSP1CON2,RCEN				; Enable receive mode
+	rcall	WaitMSSP
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
+	bra		WaitMSSP					; And return!
 
-    global  I2C_RX_compass
+	global	I2C_RX_compass
 I2C_RX_compass:
-    btfsc   compass_type2	    ; compass2
-    bra	    I2C_RX_compass2    ; yes
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_RX_compass1    ; yes
+	btfsc	compass_type2				; compass2
+	bra		I2C_RX_compass2				; yes
+	btfsc	compass_type				; compass1?
+	bra		I2C_RX_compass1				; yes
 I2C_RX_compass0:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x03
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x03
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    bcf		PIR1,SSP1IF
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-    rcall       I2C_TX
+	bcf		PIR1,SSP1IF
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
 
-    ; Compass IC sends data in following order:
-    ; x MSB
-    ; x LSB
-    ; z MSB
-    ; z LSB
-    ; y MSB
-    ; y LSB
+	; Compass IC sends data in following order:
+	; x MSB
+	; x LSB
+	; z MSB
+	; z LSB
+	; y MSB
+	; y LSB
 
-    ; Non-flipped screen
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = -y
-    ; z = z
-    ; y = x
+	; Non-flipped screen
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = -y
+	; z = z
+	; y = x
 
-    ; Flipped screen
-    ; Chip orientation on the PCB requires
-    ; Original = Corrected
-    ; x = y
-    ; z = z
-    ; y = -x
+	; Flipped screen
+	; Chip orientation on the PCB requires
+	; Original = Corrected
+	; x = y
+	; z = z
+	; y = -x
 
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DY+1; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DY+0; Data Byte
-    btfsc       flip_screen         ; 180° rotation ?
-    bra         I2C_RX_compass0_2     ; Yes
-    banksel compass_DY
-    comf        compass_DY+1        ; 16bit sign change.
-    negf        compass_DY+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DY+1,F      ; YES: do it.
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DY+1		; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DY+0		; Data Byte
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass0_2			; Yes
+	banksel	compass_DY
+	comf	compass_DY+1				; 16bit sign change.
+	negf	compass_DY+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DY+1,F				; YES: do it.
 I2C_RX_compass0_2:
-    banksel common
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DZ+1; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DZ+0; Data Byte
-    rcall       I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,compass_DX+1; Data Byte
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-    movff	SSP1BUF,compass_DX+0; Data Byte
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    rcall	WaitMSSP
-    btfss       flip_screen         ; 180° rotation ?
-    return                          ; No, done.
-    ; Yes, flip X
-    banksel compass_DX
-    comf        compass_DX+1        ; 16bit sign change.
-    negf        compass_DX+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DX+1,F      ; YES: do it.
-    banksel common
-    return
-    
-I2C_RX_compass1: ; New compass
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	b'10001000'	    ; 0x08 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-    rcall       I2C_TX
-;rcall	WaitMSSP	    ; Needed? (mH)
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-    rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DX+0
-    movff	hi,compass_DX+1
-    btfss       flip_screen         ; 180° rotation ?
-    bra		I2C_RX_compass1_1              ; Yes
-    ; Yes, flip X
-    banksel compass_DX
-    comf        compass_DX+1        ; 16bit sign change.
-    negf        compass_DX+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DX+1,F      ; YES: do it.
-    banksel common
+	banksel	common
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DZ+1		; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DZ+0		; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,compass_DX+1		; Data Byte
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,compass_DX+0		; Data Byte
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+	btfss	flip_screen					; 180° rotation ?
+	return								; No, done.
+	; Yes, flip X
+	banksel	compass_DX
+	comf	compass_DX+1				; 16bit sign change.
+	negf	compass_DX+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DX+1,F				; YES: do it.
+	banksel	common
+	return
+
+I2C_RX_compass1:						; New compass
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	b'10001000'					; 0x08 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
+	;rcall	WaitMSSP					; Needed? (mH)
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DX+0
+	movff	hi,compass_DX+1
+	btfss	   flip_screen				; 180° rotation ?
+	bra		I2C_RX_compass1_1			; Yes
+	; Yes, flip X
+	banksel compass_DX
+	comf	compass_DX+1				; 16bit sign change.
+	negf	compass_DX+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DX+1,F				; YES: do it.
+	banksel	common
 I2C_RX_compass1_1:
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-    rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DY+0
-    movff	hi,compass_DY+1
-    btfss       flip_screen         ; 180° rotation ?
-    bra         I2C_RX_compass1_2   ; Yes
-    ; Yes, flip Y
-    banksel compass_DY
-    comf        compass_DY+1        ; 16bit sign change.
-    negf        compass_DY+0
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        compass_DY+1,F      ; YES: do it.
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DY+0
+	movff	hi,compass_DY+1
+	btfss	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass1_2			; Yes
+	; Yes, flip Y
+	banksel compass_DY
+	comf	compass_DY+1				; 16bit sign change.
+	negf	compass_DY+0
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	compass_DY+1,F				; YES: do it.
 I2C_RX_compass1_2:
-    banksel common
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    bsf		SSP1CON2, RCEN      ; Enable recieve mode
-    rcall	WaitMSSP
-    movff	SSP1BUF,hi	    ; Data Byte
-    rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DZ+0
-    movff	hi,compass_DZ+1
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    bra		WaitMSSP ;(And return)
+	banksel	common
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP
+	movff	SSP1BUF,hi					; Data Byte
+	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DZ+0
+	movff	hi,compass_DZ+1
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(And return)
 
-I2C_RX_compass2:    ; newest compass
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0xE8		    ; 0x68 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    bsf		SSP1CON2,RSEN	    ; Repeated start condition (!)
-    rcall	WaitMSSP
-    movlw	0x3D                ; address
-    rcall       I2C_TX
-;    rcall	WaitMSSP
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-;    rcall	I2C_TwoBytesRX_div8_2
-    btfsc       flip_screen         ; 180° rotation ?
-    bra		I2C_RX_compass2_1   ; Yes, do nothing with X
-    ; No, flip X
-    comf        hi                  ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
-I2C_RX_compass2_1:   
-    movff	lo,compass_DX+0
-    movff	hi,compass_DX+1
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-;    rcall	I2C_TwoBytesRX_div8_2
-    btfss       flip_screen         ; 180° rotation ?
-    bra		I2C_RX_compass2_2   ; No, do nothing with Y
-    ; Yes, flip Y
-    comf        hi                  ; 16bit sign change.
-    negf        lo
-    btfsc       STATUS,C            ; Carry to propagate ?
-    incf        hi,F                ; YES: do it.
+I2C_RX_compass2:						; newest compass
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0xE8						; 0x68 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	bsf		SSP1CON2,RSEN				; Repeated start condition (!)
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
+;	rcall	WaitMSSP
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+;	rcall	I2C_TwoBytesRX_div8_2
+	btfsc	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass2_1			; Yes, do nothing with X
+	; No, flip X
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
+I2C_RX_compass2_1:
+	movff	lo,compass_DX+0
+	movff	hi,compass_DX+1
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+;	rcall	I2C_TwoBytesRX_div8_2
+	btfss	flip_screen					; 180° rotation ?
+	bra		I2C_RX_compass2_2			; No, do nothing with Y
+	; Yes, flip Y
+	comf	hi							; 16bit sign change.
+	negf	lo
+	btfsc	STATUS,C					; Carry to propagate ?
+	incf	hi,F						; YES: do it.
 I2C_RX_compass2_2:   
-    movff	lo,compass_DY+0
-    movff	hi,compass_DY+1
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,lo	    ; Data Byte
-    rcall	I2C_OneByteRX       ; Get one byte
-    movff	SSP1BUF,hi	    ; Data Byte
-    ;rcall	I2C_TwoBytesRX_div8_2
-    movff	lo,compass_DZ+0
-    movff	hi,compass_DZ+1
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    bra		WaitMSSP ;(And return)
-    
-    
-    global  I2C_init_compass
+	movff	lo,compass_DY+0
+	movff	hi,compass_DY+1
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,lo					; Data Byte
+	rcall	I2C_OneByteRX				; Get one byte
+	movff	SSP1BUF,hi					; Data Byte
+;	rcall	I2C_TwoBytesRX_div8_2
+	movff	lo,compass_DZ+0
+	movff	hi,compass_DZ+1
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP ;(And return)
+
+
+	global	I2C_init_compass
 I2C_init_compass:
-    bsf     compass_enabled
-    bcf	    compass_type2
-    ; probe compass 2
-    bsf	SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x32			; Address byte + Write bit
-    movwf	SSP1BUF			; control byte
-    rcall	WaitMSSP
-    btfss	SSP1CON2,ACKSTAT	; ACK?
-    bsf	    compass_type2		; ACK send. compass2 present
-    bsf	SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-    
-    btfsc   compass_type2
-    bra	    I2C_init_compass2		; Compass2
-    ; Check for compass0 or compass1...
-    bsf	    compass_type	    ; set flag
-    bsf	    SSP1CON2,SEN		; Start condition
-    rcall   WaitMSSP
-    movlw   0x3C                ; address
-    rcall   I2C_TX
-    movlw   0x0F
-    rcall   I2C_TX
-    bsf	    SSP1CON2,PEN		; Stop condition
-    rcall   WaitMSSP
-    bcf	    PIR1,SSP1IF
-    bsf	    SSP1CON2,SEN		; Start condition
-    rcall   WaitMSSP
-    movlw   0x3D                ; address
-    rcall   I2C_TX
-    rcall   I2C_OneByteRX       ; Get one byte
-    movlw   0x49		; 0x49 = Compass1
-    cpfseq  SSP1BUF
-    bcf	    compass_type	    ; clear flag
-    bsf	    SSP1CON2,PEN		; Stop condition
-    rcall   WaitMSSP
+	bsf		compass_enabled
+	bcf		compass_type2
+	; probe compass 2
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
+	rcall	WaitMSSP
+	btfss	SSP1CON2,ACKSTAT			; ACK?
+	bsf		compass_type2				; ACK send. compass2 present
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    btfsc   compass_type	    ; compass1?
-    bra	    I2C_init_compass1	    ; yes
+	btfsc	compass_type2
+	bra		I2C_init_compass2			; Compass2
+	; Check for compass0 or compass1...
+	bsf		compass_type				; set flag
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x0F
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall   WaitMSSP
+	bcf		PIR1,SSP1IF
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3D						; address
+	rcall	I2C_TX
+	rcall	I2C_OneByteRX				; Get one byte
+	movlw	0x49						; 0x49 = Compass1
+	cpfseq	SSP1BUF
+	bcf		compass_type				; clear flag
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+
+	btfsc	compass_type				; compass1?
+	bra		I2C_init_compass1			; yes
 ; init compass0
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x00
-    rcall       I2C_TX
-;	movlw	b'01101001'        ; ConfigA:  3Hz, 8 Samples averaged, Test Mode (Positive Bias)
-    movlw	b'01101000'        ; ConfigA:  3Hz, 8 Samples averaged
-    rcall       I2C_TX
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x00
+	rcall	I2C_TX
+;	movlw	b'01101001'					; ConfigA:  3Hz, 8 Samples averaged, Test Mode (Positive Bias)
+	movlw	b'01101000'					; ConfigA:  3Hz, 8 Samples averaged
+	rcall	I2C_TX
 I2C_init_compass_common:
-    movff       opt_compass_gain,i2c_temp    ; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
-    swapf       i2c_temp,F
-    comf        i2c_temp,F
-    bcf         STATUS,C
-    rlcf        i2c_temp
-    movf        i2c_temp,W
-    clrf        i2c_temp
-    rcall       I2C_TX
-    movlw	b'00000000'        ; Continous Mode
-    rcall       I2C_TX
-    bsf	SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
+	movff	opt_compass_gain,i2c_temp1	; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
+	swapf	i2c_temp1,F
+	comf	i2c_temp1,F
+	bcf		STATUS,C
+	rlcf	i2c_temp1
+	movf	i2c_temp1,W
+	clrf	i2c_temp1
+	rcall	I2C_TX
+	movlw	b'00000000'					; Continuous Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 I2C_init_compass1:
-    bsf		SSP1CON2,SEN	; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C            ; address
-    rcall       I2C_TX
-    movlw	0x9F		; 1F with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL0
-    rcall       I2C_TX
-    movlw	b'00101111'	; CTRL1 (6,25Hz, BDU=0, x,y,z = ON)
-    rcall       I2C_TX
-    movlw	b'11000000'	; CTRL2 (50Hz, +/-2g, 
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL3
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL4
-    rcall       I2C_TX
-    movlw	b'01100100'	; CTRL5 HIGH res, 6,25Hz
-    rcall       I2C_TX
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x9F						; 1F with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL0
+	rcall	I2C_TX
+	movlw	b'00101111'					; CTRL1 (6,25Hz, BDU=0, x,y,z = ON)
+	rcall	I2C_TX
+	movlw	b'11000000'					; CTRL2 (50Hz, +/-2g, 
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL3
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL4
+	rcall	I2C_TX
+	movlw	b'01100100'					; CTRL5 HIGH res, 6,25Hz
+	rcall	I2C_TX
 init_compass1_common:
-    movff       opt_compass_gain,i2c_temp    ; 0-7 (230LSB/Gauss to 1370LSB/Gauss)
-    movlw	b'01100000'	; CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
-    dcfsnz	i2c_temp,F	; = 1?
-    movlw	b'01100000'	; Yes, CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
-    dcfsnz	i2c_temp,F	; = 2?
-    movlw	b'01000000'	; Yes, CTRL6 (+/-8 Gauss)
-    dcfsnz	i2c_temp,F	; = 3?
-    movlw	b'01000000'	; Yes, CTRL6 (+/-8 Gauss)
-    dcfsnz	i2c_temp,F	; = 4?
-    movlw	b'00100000'	; Yes, CTRL6 (+/-4 Gauss)
-    dcfsnz	i2c_temp,F	; = 5?
-    movlw	b'00100000'	; Yes, CTRL6 (+/-4 Gauss)
-    dcfsnz	i2c_temp,F	; = 6?
-    movlw	b'00000000'	; Yes, CTRL6 (+/-2 Gauss)
-    dcfsnz	i2c_temp,F	; = 7?
-    movlw	b'00000000'	; Yes, CTRL6 (+/-2 Gauss)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL7 Continuous Mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
-    
+	movff	opt_compass_gain,i2c_temp1	; 0-7 (230LSB/Gauss to 1370LSB/Gauss) +++
+	movlw	b'01100000'					; CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
+	dcfsnz	i2c_temp1,F					; = 1?
+	movlw	b'01100000'					; Yes, CTRL6 Full scale (+/-12 Gauss -> 2730LSB/Gauss)
+	dcfsnz	i2c_temp1,F					; = 2?
+	movlw	b'01000000'					; Yes, CTRL6 (+/-8 Gauss)
+	dcfsnz	i2c_temp1,F					; = 3?
+	movlw	b'01000000'					; Yes, CTRL6 (+/-8 Gauss)
+	dcfsnz	i2c_temp1,F					; = 4?
+	movlw	b'00100000'					; Yes, CTRL6 (+/-4 Gauss)
+	dcfsnz	i2c_temp1,F					; = 5?
+	movlw	b'00100000'					; Yes, CTRL6 (+/-4 Gauss)
+	dcfsnz	i2c_temp1,F					; = 6?
+	movlw	b'00000000'					; Yes, CTRL6 (+/-2 Gauss)
+	dcfsnz	i2c_temp1,F					; = 7?
+	movlw	b'00000000'					; Yes, CTRL6 (+/-2 Gauss)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL7 Continuous Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
+
 I2C_init_compass2:
-    bsf		SSP1CON2,SEN	; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C            ; address
-    rcall       I2C_TX
-    movlw	0xE0		; 0x60 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CFG_REG_A_M (10Hz, Continuous)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CFG_REG_B_M (Low-Pass Filter off)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CFG_REG_C_M BDU=0
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	; Stop condition
-    bra		WaitMSSP	;(And return)
-    
-    global  I2C_sleep_compass
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0xE0						; 0x60 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CFG_REG_A_M (10Hz, Continuous)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CFG_REG_B_M (Low-Pass Filter off)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CFG_REG_C_M BDU=0
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(And return)
+
+
+	global	I2C_sleep_compass
 I2C_sleep_compass:
-    bcf         compass_enabled
-    btfsc	compass_type2	    ; compass2?
-    bra		I2C_sleep_compass2  ; yes
-    btfsc	compass_type	    ; compass1?
-    bra		I2C_sleep_compass1  ; yes
+	bcf		 compass_enabled
+	btfsc	compass_type2				; compass2?
+	bra		I2C_sleep_compass2			; yes
+	btfsc	compass_type				; compass1?
+	bra		I2C_sleep_compass1			; yes
 I2C_sleep_compass0:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x00
-    rcall       I2C_TX
-    movlw	b'01101000'        ; ConfigA
-    rcall       I2C_TX
-    movlw	b'00100000'        ; ConfigB
-    rcall       I2C_TX
-    movlw	b'00000010'        ; Idle Mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x00
+	rcall	I2C_TX
+	movlw	b'01101000'					; ConfigA
+	rcall	I2C_TX
+	movlw	b'00100000'					; ConfigB
+	rcall	I2C_TX
+	movlw	b'00000010'					; Idle Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 I2C_sleep_compass1:
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x20		    ; CTRL_REG1
-    rcall       I2C_TX
-    movlw	b'00000000'         ; data for CTRL_REG1: acceleration sensor Power-down mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    rcall	WaitMSSP
-    bsf		SSP1CON2,SEN	    ; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C                ; address
-    rcall       I2C_TX
-    movlw	0x26		    ; CTRL_REG7
-    rcall       I2C_TX
-    movlw	b'00000010'         ; data for CTRL_REG7: magnetic sensor Power-down mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	    ; Stop condition
-    bra		WaitMSSP	;(And return)
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x20						; CTRL_REG1
+	rcall	I2C_TX
+	movlw	b'00000000'					; data for CTRL_REG1: acceleration sensor Power-down mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0x26						; CTRL_REG7
+	rcall	I2C_TX
+	movlw	b'00000010'					; data for CTRL_REG7: magnetic sensor Power-down mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(And return)
 
-    
 I2C_sleep_compass2:
-    ; magnetic
-    bsf		SSP1CON2,SEN	; Start condition
-    rcall	WaitMSSP
-    movlw	0x3C            ; address
-    rcall       I2C_TX
-    movlw	0xE0		; 0x60 with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000010'	; CFG_REG_A_M (Idle mode)
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	; Stop condition
-    bra		WaitMSSP	; (And return)
-    
+	; magnetic
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x3C						; address
+	rcall	I2C_TX
+	movlw	0xE0						; 0x60 with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000010'					; CFG_REG_A_M (Idle mode)
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
+
 I2C_sleep_accelerometer2:
-    ; accelerometer
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x32            ; address
-    rcall       I2C_TX
-    movlw	0x9F		; 1F with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; TEMP_CFG_REG_A (Temp sensor off)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL_REG1_A (All off)
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN	; Stop condition
-    bra		WaitMSSP	; (And return)
+	; accelerometer
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; address
+	rcall	I2C_TX
+	movlw	0x9F						; 1F with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; TEMP_CFG_REG_A (Temp sensor off)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL_REG1_A (All off)
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
-   global  I2C_init_accelerometer
+	global	I2C_init_accelerometer
 I2C_init_accelerometer:
-    btfsc   compass_type2	    ; compass2?
-    bra	    I2C_init_accelerometer2 ; Yes.
+	btfsc	compass_type2				; compass2?
+	bra		I2C_init_accelerometer2		; Yes.
 
-    btfsc   compass_type	    ; compass1?
-    return			    ; yes, ignore
+	btfsc	compass_type				; compass1?
+	return								; yes, ignore
 
-    rcall       I2C_sleep_accelerometer ; Regs can only be changed in St.By mode
+	rcall	I2C_sleep_accelerometer		; Regs can only be changed in St.By mode
 
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x38                ; address
-    rcall       I2C_TX
-    movlw	0x0E                ; XYZ_DATA_CFG
-    rcall       I2C_TX
-    movlw	b'00000000'         ; High pass Filter=0 , +/- 2g range
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
-
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x0E						; XYZ_DATA_CFG
+	rcall	I2C_TX
+	movlw	b'00000000'					; High pass Filter=0 , +/- 2g range
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x38                ; address
-    rcall       I2C_TX
-    movlw	0x2A                ; CTRL_REG1
-    rcall       I2C_TX
-;	movlw		b'00110000'         ; CTRL_REG1: 160ms data rate, St.By Mode
-    movlw	b'00110100'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode
-    rcall       I2C_TX
-    movlw	b'00000010'         ; CTRL_REG2: High Res in Active mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    rcall	WaitMSSP
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x2A						; CTRL_REG1
+	rcall	I2C_TX
+;	movlw	b'00110000'					; CTRL_REG1: 160ms data rate, St.By Mode
+	movlw	b'00110100'					; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode
+	rcall	I2C_TX
+	movlw	b'00000010'					; CTRL_REG2: High Res in Active mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	rcall	WaitMSSP
 
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x38                ; address
-    rcall       I2C_TX
-    movlw	0x2A                ; CTRL_REG1
-    rcall       I2C_TX
-;	movlw		b'00110001'         ; CTRL_REG1: 160ms data rate, Active Mode
-    movlw	b'00110101'         ; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode, Active Mode
-    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
-    
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x2A						; CTRL_REG1
+	rcall	I2C_TX
+;	movlw	b'00110001'					; CTRL_REG1: 160ms data rate, Active Mode
+	movlw	b'00110101'					; CTRL_REG1: 160ms data rate, St.By Mode, reduced noise mode, Active Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
+
 I2C_init_accelerometer2:
-    bsf		SSP1CON2,SEN		; Start condition
-    rcall	WaitMSSP
-    movlw	0x32            ; address
-    rcall       I2C_TX
-    movlw	0x9F		; 1F with auto-increment (MSB=1)
-    rcall       I2C_TX
-    movlw	b'00000000'	; TEMP_CFG_REG_A (Temp sensor off)
-    rcall       I2C_TX
-    movlw	b'01010111'	; CTRL_REG1_A (100Hz, x,y,z = ON)
-    rcall       I2C_TX
-    movlw	b'00000000'	; CTRL_REG2_A
-    rcall       I2C_TX
-;    movlw	b'00000000'	; CTRL_REG3_A
-;    rcall       I2C_TX
-;    movlw	b'00000000'	; CTRL_REG4_A (BDU=0, +/-2g, 
-;    rcall       I2C_TX
-;    movlw	b'00000000'	; CTRL_REG5_A
-;    rcall       I2C_TX
-    bsf		SSP1CON2,PEN		; Stop condition
-    bra		WaitMSSP	; (And return)
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x32						; address
+	rcall	I2C_TX
+	movlw	0x9F						; 1F with auto-increment (MSB=1)
+	rcall	I2C_TX
+	movlw	b'00000000'					; TEMP_CFG_REG_A (Temp sensor off)
+	rcall	I2C_TX
+	movlw	b'01010111'					; CTRL_REG1_A (100Hz, x,y,z = ON)
+	rcall	I2C_TX
+	movlw	b'00000000'					; CTRL_REG2_A
+	rcall	I2C_TX
+;	movlw	b'00000000'					; CTRL_REG3_A
+;	rcall	I2C_TX
+;	movlw	b'00000000'					; CTRL_REG4_A (BDU=0, +/-2g,
+;	rcall	I2C_TX
+;	movlw	b'00000000'					; CTRL_REG5_A
+;	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
-    global  I2C_sleep_accelerometer
+	global	I2C_sleep_accelerometer
 I2C_sleep_accelerometer:
-    btfsc   compass_type2	    ; Compass2
-    bra	    I2C_sleep_accelerometer2	; Yes
-    btfsc   compass_type	    ; compass1?
-    return			    ; yes, ignore
+	btfsc	compass_type2				; Compass2
+	bra		I2C_sleep_accelerometer2	; Yes
+	btfsc	compass_type				; compass1?
+	return								; yes, ignore
 
-	bsf			SSP1CON2,SEN		; Start condition
-	rcall		WaitMSSP
-	movlw		0x38                ; address
-    rcall       I2C_TX
-	movlw		0x2A                ; CTRL_REG1
-    rcall       I2C_TX
-	movlw		b'00000000'         ; St. By Mode
-    rcall       I2C_TX
-	bsf			SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP	    ; (And return)
-   
+	bsf		SSP1CON2,SEN				; Start condition
+	rcall	WaitMSSP
+	movlw	0x38						; address
+	rcall	I2C_TX
+	movlw	0x2A						; CTRL_REG1
+	rcall	I2C_TX
+	movlw	b'00000000'					; St. By Mode
+	rcall	I2C_TX
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra	WaitMSSP						; (And return)
+
 lt2942_init_again:
-	clrf	i2c_temp
-	movlw	0x02                ; Point to accumulated charge registers
+	clrf	i2c_temp1
+	movlw	0x02						; Point to accumulated charge registers
 	rcall	I2C_TX_GAUGE
-	movff	battery_acumulated_charge+1,SSP1BUF       ; Data Byte
+	movff	battery_acumulated_charge+1,SSP1BUF	; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movff	battery_acumulated_charge+0,SSP1BUF       ; Data Byte
+	movff	battery_acumulated_charge+0,SSP1BUF	; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	movff	battery_acumulated_charge+1,sub_a+1
 	movff	battery_acumulated_charge+0,sub_a+0
 	; and init again...
 
-	global  lt2942_init
-lt2942_init:                    ; Setup Control register B
-	clrf	i2c_temp
-	movlw	0x01                ; Point to control reg B
+	global	lt2942_init
+lt2942_init:							; Setup Control register B
+	clrf	i2c_temp1
+	movlw	0x01						; Point to control reg B
 	rcall	I2C_TX_GAUGE
-	movlw   b'11111000'         ; Automatic conversion every two seconds
-	movff	WREG, SSP1BUF       ; Data Byte
+	movlw	b'11111000'					; Automatic conversion every two seconds
+	movff	WREG, SSP1BUF				; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP ;   (And return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 	global	lt2942_get_status
-lt2942_get_status:          ; Read status register
-    bcf     battery_gauge_available     ; Clear flag
-	clrf	i2c_temp
-	movlw	0x00            ; Point to Status reg
+lt2942_get_status:						; Read status register
+	bcf		battery_gauge_available		; Clear flag
+	clrf	i2c_temp1
+	movlw	0x00						; Point to Status reg
 	rcall	I2C_TX_GAUGE
 	rcall	I2C_RX_GAUGE
 	movff	SSP1BUF,WREG
-        btfss   WREG,7          ; 2942 found?
-        bsf     battery_gauge_available     ; Yes, set flag
-	bsf	SSP1CON2,PEN	; Stop condition
-	bra	WaitMSSP ;   (And return)
+	btfss	WREG,7						; 2942 found?
+	bsf		battery_gauge_available		; Yes, set flag
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (And return)
 
 
 	global	lt2942_get_voltage
-lt2942_get_voltage:		; Read battery voltage registers
-	clrf	i2c_temp
-	movlw	0x08        ; Point to voltage registers
+lt2942_get_voltage:						; Read battery voltage registers
+	clrf	i2c_temp1
+	movlw	0x08						; Point to voltage registers
 	rcall	I2C_TX_GAUGE
 	rcall	I2C_RX_GAUGE
-	bsf		SSP1CON2,ACKEN		; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
 	movff	SSP1BUF,xA+1
-	bsf		SSP1CON2, RCEN		; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,xA+0
-	bsf		SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 
 ;	banksel	common
-    ; xA:2 loaded with raw values
-    movlw   LOW     .6000
-    movwf   xB+0
-    movlw   HIGH    .6000
-    movwf   xB+1
-    call    mult16x16		;xA*xB=xC
+	; xA:2 loaded with raw values
+	movlw	LOW  .6000
+	movwf	xB+0
+	movlw	HIGH .6000
+	movwf	xB+1
+	call	mult16x16					; xA*xB=xC
 
-    ; devide xC (32bit)/65535 for result in mV (16bit)
-    movlw   .16
-    movwf   i2c_temp
+	; divide xC (32bit)/65535 for result in mV (16bit)
+	movlw	.16
+	movwf	i2c_temp1
 lt2942_get_voltage2:
-    bcf     STATUS,C
-    rrcf    xC+3,F
-    rrcf    xC+2,F
-    rrcf    xC+1,F
-    rrcf    xC+0,F
-    decfsz  i2c_temp,F
-    bra     lt2942_get_voltage2
+	bcf		STATUS,C
+	rrcf	xC+3,F
+	rrcf	xC+2,F
+	rrcf	xC+1,F
+	rrcf	xC+0,F
+	decfsz	i2c_temp1,F
+	bra		lt2942_get_voltage2
 
-    ; Update battery voltage in mV
-    movff   xC+1,batt_voltage+1
-    movff   xC+0,batt_voltage+0
-    
-    tstfsz  batt_voltage+1  ; <256mV?
-    return		    ; No, done.
+	; Update battery voltage in mV
+	movff	xC+1,batt_voltage+1
+	movff	xC+0,batt_voltage+0
 
-    bra	   lt2942_init	;(and return)
+	tstfsz	batt_voltage+1				; <256mV?
+	return								; No, done.
+	bra		lt2942_init					;(and return)
 
 ;	global	lt2942_get_temperature
-;lt2942_get_temperature:		; Read temperature registers
-;	clrf	i2c_temp
-;	movlw	0x0C            ; Point to temperature registers
+;lt2942_get_temperature:				; Read temperature registers
+;	clrf	i2c_temp1
+;	movlw	0x0C						; Point to temperature registers
 ;	call	I2C_TX_GAUGE
 ;	call	I2C_RX
-;	bsf		SSP1CON2,ACKEN	; Master acknowlegde
+;	bsf		SSP1CON2,ACKEN				; Master acknowledge
 ;	rcall	WaitMSSP
 ;	movff	SSP1BUF,xA+1
-;	bsf		SSP1CON2, RCEN	; Enable recieve mode
+;	bsf		SSP1CON2, RCEN				; Enable receive mode
 ;	rcall	WaitMSSP
 ;	movff	SSP1BUF,xA+0
-;	bsf		SSP1CON2,PEN	; Stop condition
+;	bsf		SSP1CON2,PEN				; Stop condition
 ;	rcall	WaitMSSP
 ;
 ;;	banksel	common
-;    ; xA:2 loaded with raw values
-;    movlw   LOW     .6000
-;    movwf   xB+0
-;    movlw   HIGH    .6000
-;    movwf   xB+1
-;    call    mult16x16		;xA*xB=xC
+;	; xA:2 loaded with raw values
+;	movlw	LOW  .6000
+;	movwf	xB+0
+;	movlw	HIGH .6000
+;	movwf	xB+1
+;	call	mult16x16					; xA*xB=xC
 ;
-;    ; devide xC (32bit)/65535 for result in 0.1K (16bit)
-;    movlw   .16
-;    movwf   i2c_temp
+;	; devide xC (32bit)/65535 for result in 0.1K (16bit)
+;	movlw	.16
+;	movwf	i2c_temp1
 ;lt2942_get_temperature2:
-;    bcf     STATUS,C
-;    rrcf    xC+3,F
-;    rrcf    xC+2,F
-;    rrcf    xC+1,F
-;    rrcf    xC+0,F
-;    decfsz  i2c_temp,F
-;    bra     lt2942_get_temperature2
+;	bcf		STATUS,C
+;	rrcf	xC+3,F
+;	rrcf	xC+2,F
+;	rrcf	xC+1,F
+;	rrcf	xC+0,F
+;	decfsz	i2c_temp1,F
+;	bra		lt2942_get_temperature2
 ;
-;    movff   xC+1,sub_a+1
-;    movff   xC+0,sub_a+0
-;    movlw   LOW     .2731       ; Kelvin to Celcius offset
-;    movwf   sub_b+0
-;    movlw   HIGH    .2731       ; Kelvin to Celcius offset
-;    movwf   sub_b+1
-;    call    subU16  ;  sub_c = sub_a - sub_b (with UNSIGNED values)
+;	movff	xC+1,sub_a+1
+;	movff	xC+0,sub_a+0
+;	movlw	LOW	  .2731					; Kelvin to Celsius offset
+;	movwf	sub_b+0
+;	movlw	HIGH .2731					; Kelvin to Celsius offset
+;	movwf	sub_b+1
+;	call	subU16						; sub_c = sub_a - sub_b (with UNSIGNED values)
 ;
-;    ; Update batttery_temperature in 0.1°C
-;    movff   sub_c+1,battery_temperature+1
-;    movff   sub_c+0,battery_temperature+0
+;	; Update batttery_temperature in 0.1°C
+;	movff	sub_c+1,battery_temperature+1
+;	movff	sub_c+0,battery_temperature+0
 ;	return
 
 	global	lt2942_get_accumulated_charge
-lt2942_get_accumulated_charge:	; Read accumulated charge and compute percent
-	clrf	i2c_temp
-	movlw	0x00                ; Point to status register
+lt2942_get_accumulated_charge:			; Read accumulated charge and compute percent
+	clrf	i2c_temp1
+	movlw	0x00						; Point to status register
 	rcall	I2C_TX_GAUGE
 	rcall	I2C_RX_GAUGE
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
 	movff	SSP1BUF,gauge_status_byte
 
-	bsf	SSP1CON2, RCEN      ; Enable recieve mode
-	rcall	WaitMSSP	    ; Dummy read (Control byte)
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	rcall	WaitMSSP					; Dummy read (Control byte)
 	movf	SSP1BUF,W
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	
-	bsf	SSP1CON2, RCEN      ; Enable recieve mode
+
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,sub_a+1
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	
-	bsf	SSP1CON2, RCEN      ; Enable recieve mode
+
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,sub_a+0
-	bsf	SSP1CON2,PEN        ; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
-	
-	movff	gauge_status_byte,sub_b+0   ; copy into bank common
-	btfsc	sub_b+0,0		    ; =1: UVLO Event
+
+	movff	gauge_status_byte,sub_b+0	; copy into bank common
+	btfsc	sub_b+0,0					; =1: UVLO Event
 	rcall	lt2942_init_again
 
-	movff	sub_a+1,battery_acumulated_charge+1 ; Save raw value
-	movff	sub_a+0,battery_acumulated_charge+0 ; Save raw value
-	
-    ; Compute batt_percent
-    ; (charge-battery_offset)/365
-    movff   battery_offset+0,sub_b+0
-    movff   battery_offset+1,sub_b+1
-    call    subU16          ;  sub_c = sub_a - sub_b (with signed values)
+	movff	sub_a+1,battery_acumulated_charge+1	; Save raw value
+	movff	sub_a+0,battery_acumulated_charge+0	; Save raw value
+
+	; Compute batt_percent
+	; (charge-battery_offset)/365
+	movff	battery_offset+0,sub_b+0
+	movff	battery_offset+1,sub_b+1
+	call	subU16						; sub_c = sub_a - sub_b (with signed values)
 
-    clrf    batt_percent   ; Set to zero
-    btfsc   neg_flag                ; result negative?
-    bra	    lt2942_set_to_zero_percent	; Yes, keep LT2942 at zero percent and return
+	clrf	batt_percent				; Set to zero
+	btfsc	neg_flag					; result negative?
+	bra		lt2942_set_to_zero_percent	; Yes, keep LT2942 at zero percent and return
 
-    ; > Zero, set batt_percent properly
-    movff   sub_c+0,xA+0
-    movff   sub_c+1,xA+1
-    movff   battery_capacity+0,xB+0
-    movff   battery_capacity+1,xB+1
-    call    div16x16						;xA/xB=xC with xA+0 as remainder, uses divB as temp variable
-    movff   xC+0,batt_percent
-    return
+	; > Zero, set batt_percent properly
+	movff	sub_c+0,xA+0
+	movff	sub_c+1,xA+1
+	movff	battery_capacity+0,xB+0
+	movff	battery_capacity+1,xB+1
+	call	div16x16					; xA/xB=xC with xA+0 as remainder, uses divB as temp variable
+	movff	xC+0,batt_percent
+	return
 
 lt2942_set_to_zero_percent:
-	clrf	i2c_temp
-	movlw	0x02                ; Point to accumulated charge registers
+	clrf	i2c_temp1
+	movlw	0x02						; Point to accumulated charge registers
 	rcall	I2C_TX_GAUGE
 	movff	battery_offset+1,SSP1BUF
 	rcall	WaitMSSP
@@ -989,222 +997,223 @@
 	movff	battery_offset+0,SSP1BUF
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP; (and return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (and return)
 
 	global	lt2942_charge_done
-lt2942_charge_done:                 ; Reset accumulating registers to 0xFFFF
-	clrf	i2c_temp
-	movlw	0x02                ; Point to accumulated charge registers
+lt2942_charge_done:						; Reset accumulating registers to 0xFFFF
+	clrf	i2c_temp1
+	movlw	0x02						; Point to accumulated charge registers
 	rcall	I2C_TX_GAUGE
-	setf	SSP1BUF       ; Data Byte
+	setf	SSP1BUF						; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	setf	SSP1BUF       ; Data Byte
+	setf	SSP1BUF						; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra	WaitMSSP; (and return)
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					; (and return)
 
-I2C_TX_GAUGE:					; Sends a byte to the LT2942 Gauge IC
-	movwf	i2c_temp+1   		; Data byte
-	bsf	SSP1CON2,SEN		; Start condition
+I2C_TX_GAUGE:							; Sends a byte to the LT2942 Gauge IC
+	movwf	i2c_temp2					; Data byte
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	b'11001000'			; Address byte + Write bit
-	movwf	SSP1BUF				; control byte
+	movlw	b'11001000'					; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movf	i2c_temp+1,W
-	bra	I2C_TX		; (and return)
-	
+	movf	i2c_temp2,W
+	bra		I2C_TX						; (and return)
+
 I2C_RX_GAUGE:
-	bsf		SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	b'11001001'			; Address byte + Read bit
-	movwf	SSP1BUF				; control byte
+	movlw	b'11001001'					; Address byte + Read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2, RCEN			; Enable recieve mode
-	bra	WaitMSSP; (and return)
-	
-	
+	bsf		SSP1CON2, RCEN				; Enable receive mode
+	bra		WaitMSSP					; (and return)
+
+
 	global	I2C_probe_OSTC_rx
 I2C_probe_OSTC_rx:
-    	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
-	btfss	SSP1CON2,ACKSTAT	; ACK?
-	bsf	ostc_rx_present		; ACK send. OSTC_RX present!
-	bsf	SSP1CON2,PEN		; Stop condition
+	btfss	SSP1CON2,ACKSTAT			; ACK?
+	bsf		ostc_rx_present				; ACK send. OSTC_RX present!
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
-	btfss	ostc_rx_present		; Do we have the RX?
-	return				; No, Done.
+	btfss	ostc_rx_present				; Do we have the RX?
+	return								; No, Done.
 	WAITMS	.1
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
 	movlw	0x1B
-	movwf	SSP1BUF			; Data Byte (Get firmware)
+	movwf	SSP1BUF						; Data Byte (Get firmware)
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x51			; Address byte + Read bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x51						; Address byte + Read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
-	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,rx_firmware+0
-	bsf	SSP1CON2,ACKEN		; Master acknowlegde
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	
+
 	; last byte in read from RX circuity always with a NACK!
-	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf	SSP1CON2, RCEN					; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,rx_firmware+1
-	bsf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN		; Master NOT acknowlegde
+	bsf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master NOT acknowledge
 	rcall	WaitMSSP
-	bcf	SSP1CON2,ACKDT		; Reset ACKDT flag
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra 	WaitMSSP ;(and return)
-	
+	bcf		SSP1CON2,ACKDT				; Reset ACKDT flag
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP ;(and return)
+
 
 	global	I2C_get_tankdata
 I2C_get_tankdata:
-    	bsf	SSP1CON2,SEN		; Start condition
+	bsf	SSP1CON2,SEN					; Start condition
 	rcall	WaitMSSP
-    	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movlw	0x1E			; Read buffer2 (48 Bytes)
+	movlw	0x1E						; Read buffer2 (48 Bytes)
 	movwf	SSP1BUF	; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
 
 	; read 48 bytes
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf	SSP1CON2,SEN					; Start condition
 	rcall	WaitMSSP
-	movlw	0x51			; Address byte + read bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x51						; Address byte + read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movlw	.47			; 47 with ACK + 1 w/o ACK
-	movwf	temp1
+	movlw	.47							; 47 with ACK + 1 w/o ACK
+	movwf	i2c_temp2
 	lfsr	FSR2,rx_buffer+0
 I2C_get_tankdata_loop_read:
-	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf	SSP1CON2, RCEN					; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,POSTINC2
-	bcf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN		; Master acknowlegde
+	bcf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	decfsz	temp1,F
-	bra	I2C_get_tankdata_loop_read
+	decfsz	i2c_temp2,F
+	bra		I2C_get_tankdata_loop_read
 
 	; 1 w/o ACK
-    	bsf	SSP1CON2, RCEN		; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movff	SSP1BUF,POSTINC2
-	bsf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN		; Master NOT acknowlegde
+	bsf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master NOT acknowledge
 	rcall	WaitMSSP
-	bcf	SSP1CON2,ACKDT		; Reset ACKDT flag
-	
-	bsf	SSP1CON2,PEN		; Stop condition
-	bra 	WaitMSSP ;(and return)
-	
-    
+	bcf		SSP1CON2,ACKDT				; Reset ACKDT flag
+
+	bsf		SSP1CON2,PEN				; Stop condition
+	bra		WaitMSSP					;(and return)
+
+
 	global	I2C_update_OSTC_rx
-I2C_update_OSTC_rx:		; 992*64byte master loop
-	bcf	i2c_error_flag		; clear error flag
+I2C_update_OSTC_rx:						; 992*64byte master loop
+	bcf		i2c_error_flag				; clear error flag
 	; write 64 bytes
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF			; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	lfsr	FSR2,buffer		; send buffer for verify
+	lfsr	FSR2,buffer					; send buffer for verify
 	movlw	.64
-	movwf	temp1
-I2C_update_OSTC_loop:	    ; 64byte flash page loop
-	movff	up,POSTINC2		; store for verify
+	movwf	i2c_temp2
+I2C_update_OSTC_loop:					; 64byte flash page loop
+	movff	up,POSTINC2					; store for verify
 	movff	up,SSP1BUF
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
 	call	ext_flash_read_block		; Read one byte
-	movwf	up				; prepare for transmit
-	decfsz	temp1,F
-	bra	I2C_update_OSTC_loop
-	bsf	SSP1CON2,PEN		; Stop condition
+	movwf	up							; prepare for transmit
+	decfsz	i2c_temp2,F
+	bra		I2C_update_OSTC_loop
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
 
 	; read 64 bytes
-	bsf	SSP1CON2,SEN		; Start condition
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x51			; Address byte + read bit
-	movwf	SSP1BUF				; control byte
+	movlw	0x51						; Address byte + read bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	lfsr	FSR2,buffer		; send buffer for verify
-	movlw	.63			; 63 with ACK + 1 w/o ACK
-	movwf	temp1
+	lfsr	FSR2,buffer					; send buffer for verify
+	movlw	.63							; 63 with ACK + 1 w/o ACK
+	movwf	i2c_temp2
 I2C_update_OSTC_loop_read:
-	bsf	SSP1CON2, RCEN			; Enable recieve mode
+	bsf		SSP1CON2, RCEN				; Enable receive mode
 	rcall	WaitMSSP
 	movf	SSP1BUF,W
-	cpfseq	POSTINC2	    ; compare readback with original
-	bsf	i2c_error_flag	    ; Not equal, set flag
-	bcf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN      ; Master acknowlegde
+	cpfseq	POSTINC2					; compare read-back with original
+	bsf		i2c_error_flag				; Not equal, set flag
+	bcf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master acknowledge
 	rcall	WaitMSSP
-	decfsz	temp1,F
-	bra	I2C_update_OSTC_loop_read
+	decfsz	i2c_temp2,F
+	bra		I2C_update_OSTC_loop_read
 
 	; 1 w/o ACK
-    	bsf	SSP1CON2, RCEN			; Enable recieve mode
+	bsf	SSP1CON2, RCEN					; Enable receive mode
 	rcall	WaitMSSP
 	movf	SSP1BUF,W
-	cpfseq	POSTINC2	    ; compare readback with original
-	bsf	i2c_error_flag	    ; Not equal, set flag
-	bsf	SSP1CON2,ACKDT
-	bsf	SSP1CON2,ACKEN			; Master NOT acknowlegde
+	cpfseq	POSTINC2					; compare read-back with original
+	bsf		i2c_error_flag				; Not equal, set flag
+	bsf		SSP1CON2,ACKDT
+	bsf		SSP1CON2,ACKEN				; Master NOT acknowledge
 	rcall	WaitMSSP
-	bcf	SSP1CON2,ACKDT		    ; Reset ACKDT flag
-	
-	bsf	SSP1CON2,PEN		; Stop condition
+	bcf		SSP1CON2,ACKDT				; Reset ACKDT flag
+
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
 	WAITMS	.1
-	
-	bsf	SSP1CON2,SEN		; Start condition
+
+	bsf		SSP1CON2,SEN				; Start condition
 	rcall	WaitMSSP
-	movlw	0x50			; Address byte + Write bit
-	movwf	SSP1BUF				; control byte
+	movlw	0x50						; Address byte + Write bit
+	movwf	SSP1BUF						; control byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	movlw	0x1F			; Write command!
-	movwf	SSP1BUF	; Data Byte
+	movlw	0x1F						; Write command!
+	movwf	SSP1BUF						; Data Byte
 	rcall	WaitMSSP
 	rcall	I2C_WaitforACK
-	bsf	SSP1CON2,PEN		; Stop condition
+	bsf		SSP1CON2,PEN				; Stop condition
 	rcall	WaitMSSP
-	WAITMS	.5			; Required waiting time
-	
+	WAITMS	.5							; Required waiting time
+
 	btfss	i2c_error_flag
-        retlw	.0			; All ok
-	retlw	.255			; an error occured
-    END
\ No newline at end of file
+	retlw	.0							; All ok
+	retlw	.255						; an error occurred
+
+	END