diff src/ms5541.asm @ 623:c40025d8e750

3.03 beta released
author heinrichsweikamp
date Mon, 03 Jun 2019 14:01:48 +0200
parents ca4556fb60b9
children 4cd81bdbf15c
line wrap: on
line diff
--- a/src/ms5541.asm	Wed Apr 10 10:51:07 2019 +0200
+++ b/src/ms5541.asm	Mon Jun 03 14:01:48 2019 +0200
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File ms5541.asm														V2.98c
+;   File ms5541.asm                           combined next generation V3.0.3b
 ;
 ;   Sensor subroutines
 ;
@@ -9,47 +9,53 @@
 ; HISTORY
 ;  2011-08-03 : [mH] moving from OSTC code
 
-#include	"hwos.inc"					; Mandatory header
-#include	"math.inc"					; Math routines
+#include "hwos.inc"						; Mandatory header
+#include "math.inc"						; Math routines
 
-ms5541		CODE
+
+ms5541	CODE
 
 ;=============================================================================
-; Expose internal variables, to ease debug:
+; Expose internal variables to ease debug
 	global	D1, D2
 	global	C1, C2, C3, C4, C5, C6
-	global	xdT, xdT2, OFF, SENS, amb_pressure_avg, temperature_avg
+	global	xdT, xdT2, OFF, SENS, pressure_abs_avg, temperature_avg
 
 ;=============================================================================
-	global calculate_compensation
+
+	global calculate_compensation		; called from ISR and from sleep mode, returns in bank isr_data
 calculate_compensation:
-	; xdT = D2 - C5	(s16 range -11.400 .. +12.350)
-	movf	C5+0,W						; Get Value to be subtracted
-	subwf	D2+0,W			 			; Do the Low Byte
+	banksel	isr_backup					; select bank ISR data
+
+	;---- pressure sensor compensation
+
+	; xdT = D2 - C5 (s16 range -11.400 .. +12.350)
+	movf	C5+0,W						; get value to be subtracted
+	subwf	D2+0,W			 			; do the low  byte
 	movwf	xdT+0
-	movf	C5+1,W						; Then the high byte.
+	movf	C5+1,W						; do the high byte
 	subwfb	D2+1,W
 	movwf	xdT+1
 
-	; Second order temperature calculation
-	; xdT/128 is in range -89..+96, hence signed 8bit. dT/128 = (2*dT)/256
-	rlcf	xdT+0,W						; put hit bit in carry.
-	rlcf	xdT+1,W						; inject in high byte.
-	movwf	isr_xA+0					; and put result in low byte.
+	; second order temperature calculation
+
+	; xdT/128 is in range -89..+96, hence signed 8 bit. dT/128 = (2*dT)/256
+	rlcf	xdT+0,W						; put hit bit in carry
+	rlcf	xdT+1,W						; inject in high byte
+	movwf	isr_xA+0					; and put result in low byte
 	clrf	isr_xA+1
-	btfsc	xdT+1,7						; If dT < 0
-	setf	isr_xA+1					; then signextend to -1
-	movff	isr_xA+0,isr_xB+0			; copy A to B
-	movff	isr_xA+1,isr_xB+1
+	btfsc	xdT+1,7						; dT < 0 ?
+	setf	isr_xA+1					; YES - sign extend to -1
+	MOVII	isr_xA,isr_xB				; copy A to B
 	call	isr_signed_mult16x16		; dT*dT --> xC (32 bits)
 
-	; dT >= 0: divide by 8, ie. 3 shifts rights.
-	; dT <  0: divide by 2, ie. 1 shifts rights.
+	; dT >= 0: divide by 8, i.e. 3 shifts rights
+	; dT <  0: divide by 2, i.e. 1 shifts rights
 	movlw	.3
-	btfss	xdT+1,7						 ; Was dT negative ?
+	btfss	xdT+1,7						 ; was dT negative ?
 	movlw	.1
 calc_loop_1:
-	bcf		STATUS,C						; dT^2 is positive, so injected zeros.
+	bcf		STATUS,C					; dT^2 is positive, so injected zeros
 	rrcf	isr_xC+1,F
 	rrcf	isr_xC+0,F
 	decfsz	WREG
@@ -62,30 +68,27 @@
 	subwfb	xdT+1,W
 	movwf	xdT2+1
 
-	; Calculate OFF = C2 + ((C4-250)*dT2)/2^12 + 10000
-	; (range +9.246 .. +18.887)
-	movff	C4+0,isr_xA+0				; C4 - 250 --> A
-	movff	C4+1,isr_xA+1
-	movff	xdT2+0,isr_xB+0				; dT2 --> B
-	movff	xdT2+1,isr_xB+1
+	; calculate OFF = C2 + ((C4-250)*dT2)/2^12 + 10000 (range +9.246 .. +18.887)
+	MOVII	C4,  isr_xA					; C4 - 250 --> A
+	MOVII	xdT2,isr_xB					; dT2      --> B
 	call	isr_signed_mult16x16
 
-	movlw	.12-.8						; A 12bit shift = 1 byte + 4 bits.
+	movlw	.12-.8						; a 12 bit shift = 1 byte + 4 bits
 	call	isr_shift_C31
 
-	movlw	LOW(.10000)					; Add 10000
+	movlw	LOW(.10000)					; add 10000
 	addwf	isr_xC+1,F
 	movlw	HIGH(.10000)
 	addwfc	isr_xC+2,F
 
-	movf	C2+0,W						; Add C2, and save into OFF
+	movf	C2+0,W						; add C2 and store result in OFF
 	addwf	isr_xC+1,W
 	movwf	OFF+0
 	movf	C2+1,W
 	addwfc	isr_xC+2,W
 	movwf	OFF+1
 
-	; Calculate SENS = C1/2 + ((C3+200)*dT)/2^13 + 3000
+	; calculate SENS = C1/2 + ((C3+200)*dT)/2^13 + 3000
 	movlw	LOW(.200)					; C3+200 --> A
 	addwf	C3+0,W
 	movwf	isr_xA+0
@@ -94,7 +97,7 @@
 	movwf	isr_xA+1
 										; B still contains dT2
 	call	isr_signed_mult16x16		; A*B --> C
-	movlw	.13-.8						; A 13bit shift = 1 byte + 5 bits.
+	movlw	.13-.8						; A 13 bit shift = 1 byte + 5 bits
 	call	isr_shift_C31
 
 	bcf		STATUS,C					; SENS = C1 / 2
@@ -103,17 +106,17 @@
 	rrcf	C1+0,W
 	movwf	SENS+0
 
-	movlw	LOW(.3000)					; Add 3000
+	movlw	LOW(.3000)					; add 3000
 	addwf	isr_xC+1,F
 	movlw	HIGH(.3000)
 	addwfc	isr_xC+2,F
 
-	movf	isr_xC+1,W					; And sum into SENS
+	movf	isr_xC+1,W					; and sum into SENS
 	addwf	SENS+0,F
 	movf	isr_xC+2,W
-	addwfc  SENS+1,F
+	addwfc	SENS+1,F
 
-	; calculate amb_pressure = (sens * (d1-off))/2^12 + 1000
+	; calculate absolute pressure = (sens * (d1-off))/2^12 + 1000
 	movf	OFF+0,W						; d1-off --> a
 	subwf	D1+0,W
 	movwf	isr_xA+0
@@ -121,72 +124,142 @@
 	subwfb	D1+1,W
 	movwf	isr_xA+1
 
-	movff	SENS+0,isr_xB+0				; sens --> b
-	movff	SENS+1,isr_xB+1
+	MOVII	SENS,isr_xB					; sens --> b
 	call	isr_signed_mult16x16
-	movlw	.12-.8						; a 12bit shift = 1 byte + 4 bits.
+	movlw	.12-.8						; a 12 bit shift = 1 byte + 4 bits
 	call	isr_shift_C31
 
-	movlw	LOW(.1000)					; add 1000
+	movlw	LOW  .1000					; add 1000
 	addwf	isr_xC+1,F
-	movlw	HIGH(.1000)
+	movlw	HIGH .1000
 	addwfc	isr_xC+2,F
 
-	; Add opt_pressure_adjust to result (SIGNED!)
-	movff	opt_pressure_adjust,isr_xC+0
+	; add opt_pressure_adjust to result (SIGNED!)
+	movff	opt_pressure_adjust,isr_xC+0; get adjustment value (signed)
+	movf	isr_xC+0,F					; excite flags, opt_pressure_adjust = 0 ?
+	bz		calc_compensation_1			; YES - skip pressure adjustment
+	btfss	isr_xC+0,7					; NO  - opt_pressure_adjust < 0 ?
+	bra		pressure_extra_add			;       NO  - add offset
+	;bra	pressure_extra_sub			;       YES - subtract offset
 
-	btfss	isr_xC+0,7					; < 0 ?
-	bra		pressure_extra_add				; No
-	; Yes
-	comf	isr_xC+0,F
-	incf	isr_xC+0,F
-	; Check for max. of 20mbar
-	movlw	.22
-	cpfslt	isr_xC+0
-	clrf	isr_xC+0
-	; Subtract
-	movf	isr_xC+0,W
-	subwf	isr_xC+1,F
-	movlw	.0
-	subwfb	isr_xC+2,F
-	bra		pressure_extra_common
+pressure_extra_sub:
+	comf	isr_xC+0,F					; complement opt_pressure_adjust
+	incf	isr_xC+0,F					; ...
+	movlw	.22							; check for max. of 20 mbar
+	cpfslt	isr_xC+0					; opt_pressure_adjust < 21 mbar ?
+	clrf	isr_xC+0					; NO - reset opt_pressure_adjust to zero
+	movf	isr_xC+0,W					; get opt_pressure_adjust to WREG
+	subwf	isr_xC+1,F					; pressure value -= opt_pressure_adjust, low  byte
+	movlw	.0							; pressure value -= opt_pressure_adjust, high byte
+	subwfb	isr_xC+2,F					; ...
+	bra		calc_compensation_1			; continue with checking for simulator mode
 
 pressure_extra_add:
-	; Check for max. of 20mbar
-	movlw	.21
-	cpfslt	isr_xC+0
-	clrf	isr_xC+0
-	; Add
-	movf	isr_xC+0,W
-	addwf	isr_xC+1,F
-	movlw	.0
-	addwfc	isr_xC+2,F
+	movlw	.21							; check for max. of 20 mbar
+	cpfslt	isr_xC+0					; opt_pressure_adjust < 21 mbar ?
+	clrf	isr_xC+0					; NO - reset opt_pressure_adjust to zero
+	movf	isr_xC+0,W					; get opt_pressure_adjust to WREG
+	addwf	isr_xC+1,F					; pressure value += opt_pressure_adjust, low  byte
+	movlw	.0							; pressure value += opt_pressure_adjust, high byte
+	addwfc	isr_xC+2,F					; ...
+	;bra	calc_compensation_1			; continue with checking for simulator mode
+
+calc_compensation_1:
+	bcf		sensor_override_active		; clear sensor override active flag by default
+	btfss	sensor_override_request		; sensor override requested?
+	bra		calc_compensation_add_avg	; NO  - keep taking absolute pressure from sensor
+	btfsc	quit_simulatormode			; YES - shall quit simulator mode (the fast way)?
+	bra		calc_compensation_sim_quit	;       YES - force     pressure_rel_sim to zero
+	;bra	calc_compensation_sim		;       NO  - calculate pressure_rel_sim from simulated depth
+
+calc_compensation_sim:					; check if OSTC got submerged
+	movlw	.5							; coding in high byte for 1280
+	cpfsgt	isr_xC+2					; absolute pressure > 1280 mbar, i.e. OSTC submerged?
+	bra		calc_compensation_sim_slave	; NO  - slave pressure_rel_sim to target depth
+	;bra	calc_compensation_sim_quit	; YES - force pressure_rel_sim to zero
 
-pressure_extra_common:
-	banksel	common						; flag2 is in bank 1
-	btfss	simulatormode_active		; are we in simulator mode?
-	bra		calc_compensation_2			; no
+calc_compensation_sim_quit:
+	CLRI	pressure_rel_sim			; set pressure_rel_sim to zero, this paves a restart into surface/dive mode
+	bra		calc_compensation_sim_com	; continue with common part
+
+calc_compensation_sim_slave:
+	movf	simulatormode_depth,W		; copy simulated depth to WREG
+	mullw	.100						; multiply with 100 to turn depth from meters to relative target pressure in mbar
+	; check if shall go up
+	movf	pressure_rel_sim+0,W		; get relative pressure, low  byte
+	subwf	PRODL,W						; WREG = relative target pressure - pressure_rel_sim (low  byte)
+	movf	pressure_rel_sim+1,W		; get relative pressure, high byte
+	subwfb	PRODH,W						; WREG = relative target pressure - pressure_rel_sim (high byte)
+	btfsc	STATUS,N					; result < 0, i.e. pressure_rel_sim > relative target pressure ?
+	bra		calc_compensation_sim_up	; YES - decrease pressure_rel_sim
+	; check if shall go down
+	movf	PRODL,W						; get relative target pressure, low  byte
+	subwf	pressure_rel_sim+0,W		; WREG = pressure_rel_sim - relative target pressure (low  byte)
+	movf	PRODH,W						; get relative target pressure, high byte
+	subwfb	pressure_rel_sim+1,W		; WREG = pressure_rel_sim - relative target pressure (high byte)
+	btfsc	STATUS,N					; result < 0, i.e. relative target pressure > pressure_rel_sim ?
+	bra		calc_compensation_sim_down	; YES - increase pressure_rel_sim
+	; both pressures are equal
+	bra		calc_compensation_sim_com	; NO to both - keep pressure_rel_sim as it is
 
-	banksel	isr_xC+2
-	movlw	.5
-	cpfsgt	isr_xC+2					; > 1280 mbar ?
-	bra		pressure_extra_common2		; No
-	; Yes, reset sim_pressure:2 to 1000mbar (End of sim)
-	movlw	LOW  .1000
-	movwf	sim_pressure+0
-	movlw	HIGH .1000
-	movwf	sim_pressure+1
+calc_compensation_sim_up:
+	movf	PRODL,W									; get relative target pressure, low  byte
+	subwf	pressure_rel_sim+0,W					; WREG  = pressure_rel_sim - relative target pressure (low  byte)
+	movwf	PRODL									; PRODL = pressure_rel_sim - relative target pressure (low  byte)
+	movf	PRODH,W									; get relative target pressure, high byte
+	subwfb	pressure_rel_sim+1,W					; WREG  = pressure_rel_sim - relative target pressure (high byte)
+	tstfsz	WREG									; more than 255 mbar off from target?
+	bra		calc_compensation_sim_up_norm			; YES - go up with normal speed
+	movlw	simulator_ascent_threshold				; NO  - get remaining difference for slowing down ascent
+	cpfslt	PRODL									;     - remaining difference to target < decrement?
+	bra		calc_compensation_sim_up_norm			;       NO  - go up with normal speed
+	;bra	calc_compensation_sim_up_slow			;       YES - go up with slow   speed
+
+calc_compensation_sim_up_slow:
+	DECI	pressure_rel_sim						; subtract slow decrement (1 mbar) from pressure_rel_sim
+	bra		calc_compensation_sim_com				; continue with common part
+
+calc_compensation_sim_up_norm:
+	SUBLI	simulator_ascent_rate,pressure_rel_sim	; subtract normal decrement from pressure_rel_sim
+	bra		calc_compensation_sim_com				; continue with common part
 
-pressure_extra_common2:
-	movff	sim_pressure+0,isr_xC+1		; override readings with simulator values
-	movff	sim_pressure+1,isr_xC+2
+calc_compensation_sim_down:
+	movf	pressure_rel_sim+0,W					; get relative pressure, low  byte
+	subwf	PRODL,F									; PRODL = relative target pressure - pressure_rel_sim (low  byte)
+	movf	pressure_rel_sim+1,W					; get relative pressure, high byte
+	subwfb	PRODH,W									; WREG  = relative target pressure - pressure_rel_sim (high byte)
+	tstfsz	WREG									; more than 255 mbar off from target?
+	bra		calc_compensation_sim_down_norm			; YES - go down with normal speed
+	movlw	simulator_descent_threshold				; NO  - get remaining difference for slowing down descent
+	cpfslt	PRODL									;     - remaining difference to target < increment?
+	bra		calc_compensation_sim_down_norm			;       NO  - go down with normal speed
+	;bra	calc_compensation_sim_down_slow			;       YES - go down with slow   speed
+
+calc_compensation_sim_down_slow:
+	INCI	pressure_rel_sim						; add slow increment (1 mbar) to pressure_rel_sim
+	bra		calc_compensation_sim_com				; continue with common part
 
-calc_compensation_2:
-	banksel	isr_backup
-	movf	isr_xC+1,W					; Then sum_up to pressure averaging buffer.
-	addwf	amb_pressure_avg+0,F
-	movf	isr_xC+2,W
-	addwfc	amb_pressure_avg+1,F
+calc_compensation_sim_down_norm:
+	ADDLI	simulator_descent_rate,pressure_rel_sim	; add normal increment to pressure_rel_sim
+	;bra	calc_compensation_sim_com				; continue with common part
+
+calc_compensation_sim_com:
+	movf	pressure_surf+0,W			; copy surface pressure to WREG, low  byte
+	addwf	pressure_rel_sim+0,W		; add  surface pressure to relative pressure to gain simulated absolute pressure, low  byte
+	movwf	isr_xC+1					; override sensor pressure with simulated pressure, low  byte
+	movf	pressure_surf+1,W			; copy surface pressure to WREG, high byte
+	addwfc	pressure_rel_sim+1,W		; add  surface pressure to relative pressure to gain simulated absolute pressure, high byte
+	movwf	isr_xC+2					; override sensor pressure with simulated pressure, high byte
+	bsf		sensor_override_active		; confirm sensor override is active
+
+calc_compensation_add_avg:
+	; add current absolute pressure to averaging buffer
+	movf	isr_xC+1,W					; copy current absolute pressure to WREG, low  byte
+	addwf	pressure_abs_avg+0,F		; pressure_abs_avg += current pressure,   low  byte
+	movf	isr_xC+2,W					; copy current absolute pressure to WREG, high byte
+	addwfc	pressure_abs_avg+1,F		; pressure_abs_avg += current pressure,   high byte
+
+	;---- temperature sensor compensation
 
 	; calculate temp = 200 + dT*(C6+100)/2^11
 	movlw	LOW(.100)					; C6 + 100 --> A
@@ -196,132 +269,131 @@
 	addwfc	C6+1,W
 	movwf	isr_xA+1
 
-	movff	xdT2+0,isr_xB+0				; dT2 --> B
-	movff	xdT2+1,isr_xB+1
+	MOVII	xdT2,isr_xB					; dT2 --> B
 	call	isr_signed_mult16x16		; A*B
-	movlw	.11-.8						; A 12 bit shift = 1 byte + 3 bits
+	movlw	.11-.8						; a 12 bit shift = 1 byte + 3 bits
 	call	isr_shift_C31
 
-	movlw	LOW(.200)					; Add 200
+	movlw	LOW(.200)					; add 200
 	addwf	isr_xC+1,F
 	movlw	HIGH(.200)
 	addwfc	isr_xC+2,F
 
-	; Add opt_temperature_adjust to result (SIGNED!)
+	; add opt_temperature_adjust to result (SIGNED!)
 	movff	opt_temperature_adjust,isr_xC+0
 
 	btfss	isr_xC+0,7					; < 0 ?
-	bra		temperature_extra_add		; No
-	; Yes
-	comf	isr_xC+0,F
+	bra		temperature_extra_add		; NO
+	comf	isr_xC+0,F					; YES
 	incf	isr_xC+0,F
-	; Check for max. of 2.0°C
-	movlw	.22
+	movlw	.22							; check for max. of 2.0°C
 	cpfslt	isr_xC+0
 	clrf	isr_xC+0
-	; Subtract
-	movf	isr_xC+0,W
+	movf	isr_xC+0,W					; subtract
 	subwf	isr_xC+1,F
 	movlw	.0
 	subwfb	isr_xC+2,F
 	bra		temperature_extra_common
 
 temperature_extra_add:
-	; Check for max. of 2.0°C
-	movlw	.21
+	movlw	.21							; check for max. of 2.0°C
 	cpfslt	isr_xC+0
 	clrf	isr_xC+0
-	; Add
-	movf	isr_xC+0,W
+	movf	isr_xC+0,W					; add
 	addwf	isr_xC+1,F
 	movlw	.0
 	addwfc	isr_xC+2,F
+
 temperature_extra_common:
-
 	movf	isr_xC+1,W
 	addwf	temperature_avg+0,F
 	movf	isr_xC+2,W
 	addwfc	temperature_avg+1,F
 
-	return								; Done.
+	return								; done
 
 ;=============================================================================
-	global	get_pressure_start
+
+	global	get_pressure_start			; called from ISR and sleep mode, needs to be called bank isr_backup
 get_pressure_start:
 	rcall	reset_MS5541
-	movlw	b'10100000'	;+3*high as start and 1+low as stop!
-get_pressure_start2:
-	movwf	isr1_temp
+	movlw	b'10100000'					; +3*high as start and 1+low as stop
+	movwf	dbuffer
 	movlw	d'12'
 	rcall	send_data_MS5541
 	return
 
-	global get_pressure_value
+	global get_pressure_value			; called from ISR and sleep mode, needs to be called bank isr_backup
 get_pressure_value:
-	btfsc	MS5541_miso					; Conversion done?
-	return								; No, Return
+	btfsc	MS5541_miso					; conversion done?
+	return								; NO - done
 	rcall	get_2bytes_MS5541
-	movff	dMSB,D1+1	
+	movff	dMSB,D1+1
 	movff	dLSB,D1+0
 	return
 
 ;=============================================================================
-	global	get_temperature_start
+
+	global	get_temperature_start		; called from ISR and sleep mode, needs to be called in bank isr_backup
 get_temperature_start:
 	rcall	reset_MS5541
-	movlw	b'10010000'	;+3*high as start and 1+low as stop!
-	bra		get_pressure_start2	; continue in "get_pressure"
+	movlw	b'10010000'					; +3*high as start and 1+low as stop
+	movwf	dbuffer
+	movlw	d'12'
+	rcall	send_data_MS5541
+	return
 
-	global	get_temperature_value
+
+	global	get_temperature_value		; called from ISR and sleep mode, needs to be called in bank isr_backup
 get_temperature_value:
-	btfsc	MS5541_miso					; Conversion done?
-	return								; No, Return
+	btfsc	MS5541_miso					; conversion done?
+	return								; NO - done
 	rcall	get_2bytes_MS5541
 	movff	dMSB,D2+1
 	movff	dLSB,D2+0
 	return
 
 ;=============================================================================
-	global	get_calibration_data
+
+	global	get_calibration_data		; called by start, returns in bank common
 get_calibration_data:
-	banksel	common
-	bsf		no_sensor_int				; disable sensor interrupts
-	banksel isr_backup					; Back to Bank0 ISR data
+	banksel	isr_backup					; select bank ISR data
+	bsf		block_sensor_interrupt		; disable sensor interrupts
 
 	rcall	reset_MS5541
-	movlw	b'01010100'					;+3*high as start and 1+low as stop!
-	movwf	isr1_temp
+	movlw	b'01010100'					; +3*high as start and 1+low as stop
+	movwf	dbuffer
 	movlw	d'13'
 	rcall	send_data_MS5541
 	rcall	get_2bytes_MS5541
-	movff	dMSB,ir_s8_buffer+1	
+	movff	dMSB,ir_s8_buffer+1
 	movff	dLSB,ir_s8_buffer+0
 
-	movlw	b'01011000'					;+3*high as start and 1+low as stop!
-	movwf	isr1_temp
+	movlw	b'01011000'					; +3*high as start and 1+low as stop
+	movwf	dbuffer
 	movlw	d'13'
 	rcall	send_data_MS5541
 	rcall	get_2bytes_MS5541
-	movff	dMSB,ir_s8_buffer+3	
+	movff	dMSB,ir_s8_buffer+3
 	movff	dLSB,ir_s8_buffer+2
 
-	movlw	b'01100100'					;+3*high as start and 1+low as stop!
-	movwf	isr1_temp
+	movlw	b'01100100'					; +3*high as start and 1+low as stop
+	movwf	dbuffer
 	movlw	d'13'
 	rcall	send_data_MS5541
 	rcall	get_2bytes_MS5541
-	movff	dMSB,ir_s8_buffer+5	
+	movff	dMSB,ir_s8_buffer+5
 	movff	dLSB,ir_s8_buffer+4
 
-	movlw	b'01101000'					;+3*high as start and 1+low as stop!
-	movwf	isr1_temp
+	movlw	b'01101000'					; +3*high as start and 1+low as stop
+	movwf	dbuffer
 	movlw	d'13'
 	rcall	send_data_MS5541
 	rcall	get_2bytes_MS5541
-	movff	dMSB,ir_s8_buffer+7	
+	movff	dMSB,ir_s8_buffer+7
 	movff	dLSB,ir_s8_buffer+6
 
-; calculate C1 (16Bit)
+	; calculate C1 (16Bit)
 	movff	ir_s8_buffer+1, C1+1
 	bcf		STATUS,C
 	rrcf	C1+1
@@ -343,7 +415,7 @@
 	bcf		STATUS,C
 	rrcf	C1+0
 
-; calculate C2 (16Bit)
+	; calculate C2 (16Bit)
 	movff	ir_s8_buffer+2, C2+0
 	bsf		STATUS,C
 	btfss	ir_s8_buffer+3,0
@@ -390,7 +462,7 @@
 	bcf		STATUS,C
 	rrcf	C2+1
 
-; calculate C3 (16Bit)
+	; calculate C3 (16Bit)
 	movff	ir_s8_buffer+5,C3+0
 	bsf		STATUS,C
 	btfss	ir_s8_buffer+4,7
@@ -406,7 +478,7 @@
 	btfsc	ir_s8_buffer+5,6
 	bsf		C3+1,0
 
-; calculate C4 (16Bit)	
+	; calculate C4 (16Bit)
 	movff	ir_s8_buffer+7,C4+0
 	bsf		STATUS,C
 	btfss	ir_s8_buffer+6,7
@@ -416,7 +488,7 @@
 	btfsc	ir_s8_buffer+7,7
 	bsf		C4+1,0
 
-; C4=C4-250
+	; C4=C4-250
 	movlw	LOW(-.250)					; C4 - 250 --> C4
 	addwf	C4+0,W
 	movwf	C4+0
@@ -424,7 +496,7 @@
 	addwfc	C4+1,W
 	movwf	C4+1
 
-; calculate C5 (16Bit)
+	; calculate C5 (16Bit)
 	movff	ir_s8_buffer+4,C5+0
 	bcf		C5+0,6
 	btfsc	ir_s8_buffer+2,0
@@ -447,38 +519,32 @@
 	clrf	isr_xA+1
 	movlw	d'8'
 	movwf	isr_xA+0
-	movff	C5+0,isr_xB+0
-	movff	C5+1,isr_xB+1
-	call	isr_unsigned_mult16x16		;isr_xA*isr_xB=isr_xC
-	movff	isr_xC+0,C5+0
-	movff	isr_xC+1,C5+1
+	MOVII	C5,isr_xB
+	call	isr_unsigned_mult16x16		; isr_xA*isr_xB=isr_xC
+	MOVII	isr_xC,C5
 	movlw	LOW  d'10000'
 	addwf	C5+0,F
 	movlw	HIGH d'10000'
-	addwfc	C5+1,F	; = 8*C5 + 10000
+	addwfc	C5+1,F						; = 8*C5 + 10000
 
-; calculate C6 (16Bit)
+	; calculate C6 (16Bit)
 	clrf	C6+1
 	movff	ir_s8_buffer+6,C6+0
 	bcf		C6+0,7
 
-	banksel	common
-	bcf		no_sensor_int				; enable sensor interrupts
-	bcf		pressure_refresh 			; Clear flag
-	banksel	isr_backup					; Back to Bank0 ISR data
-
-	clrf	sensor_state_counter		; Then reset State counter
-
-	return
+	clrf	sensor_state_counter		; reset state counter
+	bcf		block_sensor_interrupt		; re-enable sensor interrupts
+	banksel	common						; back to bank common
+	return								; done
 
 ;=============================================================================
 reset_MS5541_one:
 	bsf		MS5541_mosi
-	bra		send_clk_pulse				; Send one high-low sequence on MS5541_clk  -> and return
+	bra		send_clk_pulse				; send one high-low sequence on MS5541_clk and return
 
 reset_MS5541_zero:
 	bcf		MS5541_mosi
-	bra		send_clk_pulse				; Send one high-low sequence on MS5541_clk  -> and return
+	bra		send_clk_pulse				; send one high-low sequence on MS5541_clk and return
 
 reset_MS5541:
 	rcall	reset_MS5541_one			; 0
@@ -504,26 +570,25 @@
 	rcall	reset_MS5541_zero			; 20
 	return
 
+
 get_2bytes_MS5541:
 	movlw	d'8'
 	movwf	clock_count
 	rcall	recieve_loop
-	movff	isr1_temp,dMSB
-
+	movff	dbuffer,dMSB
 	movlw	d'8'
 	movwf	clock_count
 	rcall	recieve_loop
-	movff	isr1_temp,dLSB
-	bra		send_clk_pulse				; Send one high-low sequence on MS5541_clk  -> and return
-	;return
+	movff	dbuffer,dLSB
+	bra		send_clk_pulse				; send one high-low sequence on MS5541_clk and return
 
 recieve_loop:
-	rcall   send_clk_pulse				; Send one high-low sequence on MS5541_clk
-	btfss	MS5541_miso	;MSB first
+	rcall	send_clk_pulse				; send one high-low sequence on MS5541_clk
+	btfss	MS5541_miso					; MSB first
 	bcf		STATUS,C
-	btfsc	MS5541_miso	;MSB first
+	btfsc	MS5541_miso					; MSB first
 	bsf		STATUS,C
-	rlcf	isr1_temp,F
+	rlcf	dbuffer,F
 	decfsz	clock_count,F
 	bra		recieve_loop
 	return
@@ -543,33 +608,30 @@
 	nop
 	return
 
+
 send_data_MS5541:
-	movwf	clock_count	 ; From WREG
-	; send three startbits first
+	movwf	clock_count					; from WREG
+	; send three start bits first
 	bcf		MS5541_clk
 	nop
 	nop
 	bsf		MS5541_mosi
 	movlw	d'3'
 	subwf	clock_count,F				; total bit counter
-	rcall   send_clk_pulse				; Send one high-low sequence on MS5541_clk
-	rcall   send_clk_pulse				; Send one high-low sequence on MS5541_clk
-	rcall   send_clk_pulse				; Send one high-low sequence on MS5541_clk
-	; now send 8 bytes from isr_temp1 and fill-up with zeros
-send_data_MS5541_2:
+	rcall	send_clk_pulse				; send one high-low sequence on MS5541_clk
+	rcall	send_clk_pulse				; send one high-low sequence on MS5541_clk
+	rcall	send_clk_pulse				; send one high-low sequence on MS5541_clk
+send_data_MS5541_loop:					; now send 8 bits from dbuffer and fill-up with zeros
 	bcf		MS5541_clk
 	nop
 	nop
-
-	btfss	isr1_temp,7					; MSB first
+	btfss	dbuffer,7					; MSB first
 	bcf		MS5541_mosi
-	btfsc	isr1_temp,7					; MSB first
+	btfsc	dbuffer,7					; MSB first
 	bsf		MS5541_mosi
-
 	bsf		MS5541_clk
-
 	bcf		STATUS,C
-	rlcf	isr1_temp,F
+	rlcf	dbuffer,F
 	nop
 	nop
 ;	nop
@@ -577,9 +639,8 @@
 ;	nop
 ;	nop
 ;	bcf		MS5541_clk
-
 	decfsz	clock_count,F
-	bra		send_data_MS5541_2
+	bra		send_data_MS5541_loop
 	bcf		MS5541_clk
 	return