annotate code_part1/OSTC_code_asm_part1/isr.asm @ 842:454ef5c2e6aa default tip

Bugfix: Auto-SP did not show >9m for some 2C hardware versions in German language firmware Make year settings until 2040 possible (This is likely the final release for this model)
author heinrichsweikamp
date Sat, 29 Nov 2025 14:11:07 +0100
parents 2a0e5d884fc3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
402
e565392e0fcc Add a trailing space for nofly and desat
heinrichsweikamp
parents: 398
diff changeset
1
815
2a0e5d884fc3 BUGFIX: Fix licence in German
heinrichsweikamp
parents: 807
diff changeset
2 ; OSTC Mk.2, 2N and 2C - diving computer code
807
c50296c3059e BUGFIX: Divetime had unwanted "." behind the minutes
heinrichsweikamp
parents: 789
diff changeset
3 ; Copyright (C) 2015 HeinrichsWeikamp GbR
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
4
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
5 ; This program is free software: you can redistribute it and/or modify
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
6 ; it under the terms of the GNU General Public License as published by
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
7 ; the Free Software Foundation, either version 3 of the License, or
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
8 ; (at your option) any later version.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
9
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
10 ; This program is distributed in the hope that it will be useful,
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
11 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
12 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
13 ; GNU General Public License for more details.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
14
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
15 ; You should have received a copy of the GNU General Public License
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
16 ; along with this program. If not, see <http://www.gnu.org/licenses/>.
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
17
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
18
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
19 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
20 ; written: 10/30/05
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
21 ; last updated: 05/16/08
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
22 ; known bugs:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
23 ; ToDo:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
24
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
25 ; the timer1 module interrupts every 62.5ms (16x/second)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
26 ; temperature and pressure is averaged over 4 measurements
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
27 ; flag pressure_refresh is set every 500ms
398
ab962c4b19d6 Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents: 392
diff changeset
28 ; and provides accurate pressure (+/-1mbar stable) and temperature (0.1C stable)
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
29
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
30 ;=============================================================================
341
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
31 ; Copy a 16bit value from ISR modified registers to main registers.
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
32 ;
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
33 ; Because the ISR can happend at any time, the read should be redone if bytes
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
34 ; changed inbetween.
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
35 ;
343
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
36 ; Trashes: WREG and TABLAT
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
37 ; NOTE: Destination might be in any bank, so be BANK SAFE.
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
38 ;
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
39 SAFE_2BYTE_COPY MACRO from, to
341
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
40 local retry
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
41 retry:
343
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
42 movff from+1,WREG ; High byte in W.
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
43 movff WREG,to+1 ; and destination.
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
44 movff from+0,to+0 ; Copy low byte.
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
45 movff from+1,TABLAT ; another bank-safe read.
d5240792be51 BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
JeanDo
parents: 341
diff changeset
46 xorwf TABLAT,W ; High byte changed ?
341
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
47 bnz retry
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
48 ENDM
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
49
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
50 ;=============================================================================
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
51 uartint:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
52 btfsc simulatormode_active ; are we in simulatormode?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
53 bra simulator_int ; Yes, reading is depth in m!
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
54
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
55 movff RCREG,uart1_temp
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
56 movlw d'96'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
57 subwf uart1_temp,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
58 dcfsnz uart1_temp,F ; "a"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
59 bsf dump_external_eeprom ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
60 dcfsnz uart1_temp,F ; "b"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
61 bsf uart_settime ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
62 dcfsnz uart1_temp,F ; "c"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
63 bsf simulatormode_active ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
64 dcfsnz uart1_temp,F ; "d"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
65 bsf internal_eeprom_write ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
66 dcfsnz uart1_temp,F ; "e"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
67 bsf uart_send_hash ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
68 dcfsnz uart1_temp,F ; "f"
297
ceedf078b2d8 Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
parents: 283
diff changeset
69 bsf uart_reset_battery_stats ; set flag
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
70 dcfsnz uart1_temp,F ; "g"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
71 bsf uart_send_int_eeprom ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
72 dcfsnz uart1_temp,F ; "h"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
73 bsf uart_reset_decodata ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
74 dcfsnz uart1_temp,F ; "i"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
75 bsf internal_eeprom_write2 ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
76 dcfsnz uart1_temp,F ; "j"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
77 bsf uart_send_int_eeprom2 ; set flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
78 dcfsnz uart1_temp,F ; "k"
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
79 bsf uart_store_tissue_data ; set flag
330
447390289f47 NEW screen_dump serial command (l)
JeanDo
parents: 297
diff changeset
80 dcfsnz uart1_temp,F ; "l"
447390289f47 NEW screen_dump serial command (l)
JeanDo
parents: 297
diff changeset
81 bsf uart_dump_screen ; set flag
578
fbd5e2b75a63 adding access to CF64-CF95
heinrichsweikamp
parents: 573
diff changeset
82 dcfsnz uart1_temp,F ; "m"
fbd5e2b75a63 adding access to CF64-CF95
heinrichsweikamp
parents: 573
diff changeset
83 bsf uart_send_int_eeprom3 ; set flag
fbd5e2b75a63 adding access to CF64-CF95
heinrichsweikamp
parents: 573
diff changeset
84 dcfsnz uart1_temp,F ; "n"
fbd5e2b75a63 adding access to CF64-CF95
heinrichsweikamp
parents: 573
diff changeset
85 bsf internal_eeprom_write3 ; set flag
283
4ec488f046f4 Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents: 266
diff changeset
86 movlw 0xC1
4ec488f046f4 Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents: 266
diff changeset
87 cpfseq RCREG ; 115200Baud Bootloader request?
4ec488f046f4 Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents: 266
diff changeset
88 bra uartint1 ; No
4ec488f046f4 Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents: 266
diff changeset
89 bsf uart_115200_bootloader ; Yes, set Flag
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
90
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
91 uartint1:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
92 movf RCREG,w ; unload RCREG in stand-alone simulator mode
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
93 bcf PIR1,RCIF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
94 bcf RCSTA,CREN ; Clear receiver status
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
95 bsf RCSTA,CREN
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
96 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
97
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
98 simulator_int:
345
8bb7c901743d Added screen dumps in simulator mode too.
JeanDo
parents: 344
diff changeset
99 movlw 'l' ; Received 'l' dump-screen command ?
8bb7c901743d Added screen dumps in simulator mode too.
JeanDo
parents: 344
diff changeset
100 xorwf RCREG,W
8bb7c901743d Added screen dumps in simulator mode too.
JeanDo
parents: 344
diff changeset
101 bnz simulator_int2 ; NO: skip
8bb7c901743d Added screen dumps in simulator mode too.
JeanDo
parents: 344
diff changeset
102 bsf uart_dump_screen ; YES: set flag
8bb7c901743d Added screen dumps in simulator mode too.
JeanDo
parents: 344
diff changeset
103 bra uartint1 ; and this is not a depth...
8bb7c901743d Added screen dumps in simulator mode too.
JeanDo
parents: 344
diff changeset
104
8bb7c901743d Added screen dumps in simulator mode too.
JeanDo
parents: 344
diff changeset
105 simulator_int2:
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
106 btfsc standalone_simulator ; ignore in standalone simulator mode
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
107 bra uartint1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
108
21
73014f788032 1.60 stable rc1
heinrichsweikamp
parents: 13
diff changeset
109 bsf LED_blue
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
110 tstfsz RCREG ; =0x00?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
111 bra simulator_int1 ; No
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
112 incf RCREG,F ; Yes, so force RCREG=1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
113
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
114 simulator_int1:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
115 movf RCREG,w ; depth in m
347
ba0f30f3d560 Ignore depths>130m in PC simulation
heinrichsweikamp
parents: 345
diff changeset
116 movwf PRODL ; Copy
ba0f30f3d560 Ignore depths>130m in PC simulation
heinrichsweikamp
parents: 345
diff changeset
117
ba0f30f3d560 Ignore depths>130m in PC simulation
heinrichsweikamp
parents: 345
diff changeset
118 movlw d'140' ; Limit to 130m
ba0f30f3d560 Ignore depths>130m in PC simulation
heinrichsweikamp
parents: 345
diff changeset
119 cpfslt PRODL ; compare with value in UART
ba0f30f3d560 Ignore depths>130m in PC simulation
heinrichsweikamp
parents: 345
diff changeset
120 movwf PRODL ; Overwrite reading
ba0f30f3d560 Ignore depths>130m in PC simulation
heinrichsweikamp
parents: 345
diff changeset
121
ba0f30f3d560 Ignore depths>130m in PC simulation
heinrichsweikamp
parents: 345
diff changeset
122 movf PRODL,w ; depth in m
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
123 mullw d'100' ; result will be mbar
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
124 movff PRODL,sim_pressure+0 ; stored for pressure overwrite
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
125 movff PRODH,sim_pressure+1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
126 bra uartint1 ; exit uart int
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
127
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
128 ;=============================================================================
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
129
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
130 switch_left_int:
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
131 bcf INTCON,INT0IF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
132
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
133 btfsc T0CON,TMR0ON ; Timer0 running?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
134 bra timer0_restart ; Yes, restart
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
135
266
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
136 ; OSTC 2N has flipped screen and exchanged switches...
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
137 movff win_flags,WREG ; Get into Bank0
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
138 btfss WREG,0
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
139 bsf switch_left ; Set flag, button press is OK
266
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
140 btfsc WREG,0
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
141 bsf switch_right ; Set flag, button press is OK
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
142
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
143 bsf T0CON,TMR0ON ; Start Timer 0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
144 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
145
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
146
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
147 switch_right_int:
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
148 bcf INTCON3,INT1IF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
149
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
150 btfsc T0CON,TMR0ON ; Timer0 running?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
151 bra timer0_restart ; Yes, restart
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
152
266
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
153 ; OSTC 2N has flipped screen and exchanged switches...
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
154 movff win_flags,WREG ; Get into Bank0
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
155 btfsc WREG,0
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
156 bsf switch_left ; Set flag, button press is OK
ba109a7948df OSTC 2N uses exchanged switches...
heinrichsweikamp
parents: 245
diff changeset
157 btfss WREG,0
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
158 bsf switch_right ; Set flag, button press is OK
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
159
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
160 bsf T0CON,TMR0ON ; Start Timer 0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
161 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
162
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
163 timer0_restart:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
164 bcf INTCON,TMR0IF ; Clear flag
715
de413161f00c 256ms switch debounce timer
heinrichsweikamp
parents: 578
diff changeset
165 movlw T0CON_VALUE
de413161f00c 256ms switch debounce timer
heinrichsweikamp
parents: 578
diff changeset
166 movwf T0CON ; Timer0
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
167 clrf TMR0H
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
168 clrf TMR0L
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
169 bsf T0CON,TMR0ON ; Start Timer 0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
170 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
171
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
172 timer0int:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
173 bcf INTCON,TMR0IF ; Clear flag
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
174 bcf T0CON,TMR0ON ; Stop Timer 0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
175 clrf TMR0H
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
176 clrf TMR0L
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
177 return
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
178
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
179 ;=============================================================================
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
180 ;
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
181
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
182 timer1int:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
183 timer1int_debug:
21
73014f788032 1.60 stable rc1
heinrichsweikamp
parents: 13
diff changeset
184 bcf LED_red ; LEDr off (For charge indicator)
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
185
390
a847f416e67e Debugging timer1
heinrichsweikamp
parents: 379
diff changeset
186 btfsc TMR1L,0 ; Wait for low clock cycle
a847f416e67e Debugging timer1
heinrichsweikamp
parents: 379
diff changeset
187 bra $-2
391
ee5e1c65657c Debugging the TMR1...
heinrichsweikamp
parents: 390
diff changeset
188 btfss TMR1L,0 ; Still high?
390
a847f416e67e Debugging timer1
heinrichsweikamp
parents: 379
diff changeset
189 bra $-2 ; max. loop time: 61µs
378
51baf8777b73 testing, removing unused stuff
heinrichsweikamp
parents: 377
diff changeset
190
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
191 movlw 0x08 ; Timer1 int after 62.5ms (=16/second)
391
ee5e1c65657c Debugging the TMR1...
heinrichsweikamp
parents: 390
diff changeset
192 cpfslt TMR1H ; Did we miss a 1/16 second?
ee5e1c65657c Debugging the TMR1...
heinrichsweikamp
parents: 390
diff changeset
193 incf timer1int_counter1,F ; Yes, add extra 1/16 second
ee5e1c65657c Debugging the TMR1...
heinrichsweikamp
parents: 390
diff changeset
194
ee5e1c65657c Debugging the TMR1...
heinrichsweikamp
parents: 390
diff changeset
195 movlw 0x08 ; Timer1 int after 62.5ms (=16/second)
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
196 subwf TMR1H,F
391
ee5e1c65657c Debugging the TMR1...
heinrichsweikamp
parents: 390
diff changeset
197 bcf PIR1,TMR1IF ; Clear flag
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
198
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
199 incf timer1int_counter1,F ; Increase timer1 counter
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
200
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
201 movlw d'15' ; One second 16
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
202 cpfsgt timer1int_counter1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
203 bra sensor_int_pre ; only pressure sensor
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
204 rcall RTCisr ; adjust time, then query pressure sensor
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
205
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
206 sensor_int_pre:
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
207 btfsc sleepmode ; In sleepmode?
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
208 return ; Yes
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
209
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
210 ; Sensor interput do poll the presure/temperature sensor, download results,
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
211 ; compute compensations, and store results in various shared variables.
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
212 ;
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
213 ; Input: interupt (every 62.5msec == 16Hz), sensor,
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
214 ; last_surfpressure:2.
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
215 ;
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
216 ; Output: amb_pressure:2,
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
217 ; temperature:2,
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
218 ; rel_pressure:2,
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
219 ; and the pressure_refresh flag.
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
220 ;
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
221 ; NOTE: averaging (4 successive value, as recommended in the MS5535 datasheet)
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
222 ; is done on private variables, to avoid trashing data while reading it
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
223 ; from the main code.
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
224 ;
341
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
225 ; NOTE: Because there is no atomic 16bits load/stores, we need to check twice
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
226 ; the read data is correct. Ie. SAFE_2BYTE_COPY is mandatory to get
344
797e2ac42d24 MERGE with 1.91 main trunk.
JeanDo
parents: 330 343
diff changeset
227 ; amb_pressure, temperature or rel_pressure
341
2144f19fa1eb BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents: 340
diff changeset
228 ;
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
229 sensor_int:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
230 btfsc no_sensor_int ; No sensor interrupt (because it's addressed during sleep)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
231 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
232
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
233 incf timer1int_counter2,F ; counts to eight for state maschine
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
234
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
235 ; State 1: Clear flags and average registers, get temperature (51us) and start pressure integration (73,5us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
236 ; State 2: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
237 ; State 3: Get temperature (51us) and start pressure integration (73,5us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
238 ; State 4: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
239 ; State 5: Get temperature (51us) and start pressure integration (73,5us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
240 ; State 6: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
241 ; State 7: Get temperature (51us) and start pressure integration (73,5us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
242 ; State 8: Get pressure (51us), start temperature integration (73,5us), calculate temperature compensated pressure (233us) and build average for half-second update of tempperature and pressure
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
243
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
244 movff timer1int_counter2,isr_divB ; isr_divB used as temp here...
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
245 dcfsnz isr_divB,F
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
246 bra sensor_int_state1_plus_restart ; Do State 1
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
247 dcfsnz isr_divB,F
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
248 bra sensor_int_state2 ; Do State 2
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
249 dcfsnz isr_divB,F
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
250 bra sensor_int_state1 ; Do State 3
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
251 dcfsnz isr_divB,F
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
252 bra sensor_int_state2 ; Do State 4
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
253 dcfsnz isr_divB,F
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
254 bra sensor_int_state1 ; Do State 5
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
255 dcfsnz isr_divB,F
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
256 bra sensor_int_state2 ; Do State 6
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
257 dcfsnz isr_divB,F
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
258 bra sensor_int_state1 ; Do State 7
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
259 ; bra sensor_int2_plus_average ; Do State 8
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
260
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
261 ;sensor_int2_plus_average:
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
262 rcall sensor_int_state2
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
263 sensor_int2_plus_average2:
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
264 bcf STATUS,C ; clear carry bit.
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
265 rrcf amb_pressure_avg+1 ; amb_pressure sum / 2
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
266 rrcf amb_pressure_avg+0
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
267 bcf STATUS,C ; clear carry bit, twice.
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
268 rrcf amb_pressure_avg+1 ; amb_pressure sum / 4
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
269 rrcf amb_pressure_avg+0
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
270
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
271 movff amb_pressure_avg+1,amb_pressure+1 ; copy into actual register
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
272 movff amb_pressure_avg+0,amb_pressure+0
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
273
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
274 bcf STATUS,C
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
275 btfsc temperature_avg+1,7 ; Copy sign bit to carry
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
276 bsf STATUS,C
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
277 rrcf temperature_avg+1 ; Signed temperature /2
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
278 rrcf temperature_avg+0
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
279
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
280 bcf STATUS,C
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
281 btfsc temperature_avg+1,7 ; Copy sign bit to carry
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
282 bsf STATUS,C
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
283 rrcf temperature_avg+1 ; Signed temperature /4
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
284 rrcf temperature_avg+0
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
285
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
286 movff temperature_avg+1,temperature+1
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
287 movff temperature_avg+0,temperature+0
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
288
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
289 bsf pressure_refresh ; Set flag! Temp and pressure were updated!
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
290 clrf timer1int_counter2 ; Then reset State counter
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
291
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
292 btfss simulatormode_active ; are we in simulator mode?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
293 bra comp_air_pressure ; no
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
294
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
295 comp_air_pressure0:
398
ab962c4b19d6 Fixing issue 50, correct "Bar" to "bar" in texts and comments
heinrichsweikamp
parents: 392
diff changeset
296 movlw LOW d'1000' ; yes, so simulate 1bar surface pressure
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
297 movwf last_surfpressure+0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
298 movlw HIGH d'1000'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
299 movwf last_surfpressure+1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
300
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
301 comp_air_pressure:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
302 movf last_surfpressure+0,W ; compensate airpressure
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
303 subwf amb_pressure+0,W
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
304 movwf rel_pressure+0 ; rel_pressure stores depth!
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
305
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
306 movf last_surfpressure+1,W
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
307 subwfb amb_pressure+1,W
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
308 movwf rel_pressure+1
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
309 btfss STATUS,N ; result is below zero?
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
310 return
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
311 clrf rel_pressure+0 ; Yes, do not display negative depths
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
312 clrf rel_pressure+1 ; e.g. when surface air pressure dropped during the dive
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
313 return
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
314
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
315 sensor_int_state1_plus_restart:
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
316 clrf amb_pressure_avg+0 ; pressure average registers
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
317 clrf amb_pressure_avg+1
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
318 clrf temperature_avg+0
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
319 clrf temperature_avg+1
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
320
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
321 sensor_int_state1:
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
322 call get_temperature_value ; State 1: Get temperature
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
323 call get_pressure_start ; and start pressure integration.
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
324 return ; Done.
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
325
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
326 sensor_int_state2:
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
327 call get_pressure_value ; State2: Get pressure (51us)
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
328 call get_temperature_start ; and start temperature integration (73,5us)
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
329 goto calculate_compensation ; calculate temperature compensated pressure (233us)
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
330
340
ecbbbd423e86 BUGFIX save negativ temperatures in logbook (bbbug #6)
JeanDo
parents: 297
diff changeset
331 ;=============================================================================
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
332
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
333 RTCisr:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
334 clrf timer1int_counter1 ; counts to 16 (one second / 62.5ms)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
335 bsf onesecupdate ; we have a new second!
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
336
789
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
337 btfsc sleepmode ; are we in sleep mode?
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
338 bra RTCisr0 ; Yes
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
339
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
340 movlw .1
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
341 addwf on_time_seconds+0,F
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
342 movlw .0
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
343 addwfc on_time_seconds+1,F
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
344 addwfc on_time_seconds+2,F ; Increase counter
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
345
380a07e4fc15 work on new battery information output
heinrichsweikamp
parents: 715
diff changeset
346 RTCisr0:
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
347 bcf STATUS,Z ; are we in dive mode?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
348 btfss divemode
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
349 bra RTCisr2 ; No, must be surface or sleepmode
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
350
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
351 incf samplesecs,F ; CF20 diving seconds done
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
352 decf samplesecs_value,W ; holds CF20 value (minus 1 into WREG)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
353 cpfsgt samplesecs
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
354 bra RTCisr1 ; no
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
355
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
356 clrf samplesecs ; clear counter...
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
357 bsf store_sample ; ...and set bit for profile storage
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
358
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
359 RTCisr1:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
360 ; Increase re-setable average depth divetime counter
111
ed7826c740a0 1.74beta rc1
heinrichsweikamp
parents: 49
diff changeset
361 incf average_divesecs+0,F ; increase stopwatch registers
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
362 btfsc STATUS,Z
357
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
363 incf average_divesecs+1,F ; increase stopwatch registers
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
364 ; Increase total divetime (Regardless of CF01)
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
365 incf total_divetime_seconds+0,F ; increase stopwatch registers
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
366 btfsc STATUS,Z
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
367 incf total_divetime_seconds+1,F ; increase stopwatch registers
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
368
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
369 btfss divemode2 ; displayed divetime is running?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
370 bra RTCisr2 ; No (e.g. too shallow)
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
371
357
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
372 ; increase divetime registers (Displayed dive time)
562f1bc79f3c Bugfix: Wake-up into divemode with 1.91alpha
Heinrichsweikamp
parents: 347
diff changeset
373 incf divesecs,F
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
374 movlw d'59'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
375 cpfsgt divesecs
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
376 bra RTCisr1a
238
9581e48a914f Some cleanup in the ISR
heinrichsweikamp
parents: 111
diff changeset
377
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
378 clrf divesecs
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
379 bsf realdive ; this bit is always set (again) if the dive is longer then one minute
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
380
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
381 incf divemins+0,F ; increase divemins
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
382 btfsc STATUS,Z
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
383 incf divemins+1,F ; and now do the realtime clock routine anyway
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
384
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
385 RTCisr1a:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
386 btfss FLAG_apnoe_mode ; Are we in Apnoe mode?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
387 bra RTCisr2 ; No, skip the following
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
388
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
389 incf apnoe_secs,F ; increase descent registers
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
390 movlw d'59'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
391 cpfsgt apnoe_secs
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
392 bra RTCisr2
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
393 clrf apnoe_secs
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
394
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
395 incf apnoe_mins,F ; increase descent mins
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
396 ; Now, do the RTC routine....
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
397 RTCisr2:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
398 incf secs,F ; adjusts seconds, minutes, hours, day, month and year. Checks for a leap year and works until 2099!
356
9ef9b681f38f BUGFIX time_correction_value (CF48) > 60 or < 0.
JeanDo
parents: 347
diff changeset
399 movlw d'60'
359
91352bb698cf Oups... time to sleep !
JeanDo
parents: 356
diff changeset
400 cpfseq secs ; Secs == 60 ?
91352bb698cf Oups... time to sleep !
JeanDo
parents: 356
diff changeset
401 return ; NO : done.
91352bb698cf Oups... time to sleep !
JeanDo
parents: 356
diff changeset
402 clrf secs ; YES: increment minutes instead...
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
403 bsf oneminupdate
497
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
404
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
405 btfss divemode ; In Divemode?
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
406 rcall check_nofly_desat_time ; No, so reduce NoFly and Desat and increase interval
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
407
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
408 incf mins,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
409 movlw d'59'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
410 cpfsgt mins
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
411 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
412 clrf mins
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
413 incf hours,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
414 movlw d'23'
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
415 cpfsgt hours
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
416 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
417 clrf hours
13
3b30cd739782 1.53 beta rc2
heinrichsweikamp
parents: 0
diff changeset
418 incf day,F
392
8e272339fb68 1.91beta RC
heinrichsweikamp
parents: 391
diff changeset
419 movff time_correction_value,secs ; Correct too slow clock
13
3b30cd739782 1.53 beta rc2
heinrichsweikamp
parents: 0
diff changeset
420
0
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
421 check_date:
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
422 movff month,isr_divB ; new month?
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
423 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
424 movlw .31
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
425 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
426 movlw .28
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
427 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
428 movlw .31
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
429 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
430 movlw .30
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
431 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
432 movlw .31
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
433 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
434 movlw .30
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
435 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
436 movlw .31
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
437 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
438 movlw .31
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
439 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
440 movlw .30
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
441 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
442 movlw .31
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
443 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
444 movlw .30
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
445 dcfsnz isr_divB,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
446 movlw .31
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
447 cpfsgt day,1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
448 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
449 movlw .1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
450 movwf day
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
451 incf month,F
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
452 movlw .12
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
453 cpfsgt month,1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
454 return
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
455 movlw .1
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
456 movwf month
96a35aeda5f2 Initial setup
heinrichsweikamp
parents:
diff changeset
457 incf year,F
497
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
458 return
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
459
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
460 check_nofly_desat_time:
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
461 bcf nofly_active ; Clear flag
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
462 movf nofly_time+0,W ; Is nofly null ?
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
463 iorwf nofly_time+1,W
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
464 bz check_nofly_desat_time2 ; yes...
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
465
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
466 bsf nofly_active ; Set flag (again)
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
467 movlw d'1'
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
468 subwf nofly_time+0,F
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
469 movlw d'0'
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
470 subwfb nofly_time+1,F ; reduce by one
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
471
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
472 check_nofly_desat_time2:
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
473 movff desaturation_time_buffer+0,lo
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
474 movff desaturation_time_buffer+1,hi
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
475
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
476 movf lo,W ; Is Desat null ?
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
477 iorwf hi,W
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
478 bz check_nofly_desat_time3 ; yes...
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
479
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
480 movlw d'1'
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
481 subwf lo,F
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
482 movlw d'0'
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
483 subwfb hi,F ; reduce by one...
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
484
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
485 movff lo,desaturation_time_buffer+0 ; ...and copy back
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
486 movff hi,desaturation_time_buffer+1
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
487
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
488 check_nofly_desat_time3:
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
489 ; Now increase interval timer
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
490 movff desaturation_time_buffer+0,lo
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
491 movff desaturation_time_buffer+1,hi
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
492 tstfsz lo ;=0?
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
493 bra calc_surface_interval2 ; No
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
494 tstfsz hi ;=0?
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
495 bra calc_surface_interval2 ; No
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
496 clrf surface_interval+0
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
497 clrf surface_interval+1 ; Clear surface interval timer
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
498 return ; Done.
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
499
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
500 calc_surface_interval2: ; Increase surface interval timer
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
501 movlw d'1'
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
502 addwf surface_interval+0,F
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
503 movlw d'0'
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
504 addwfc surface_interval+1,F
06db5dd9149f show numeric _and_ graphic velocity, move desat, nofly and interval into isr
heinrichsweikamp
parents: 402
diff changeset
505 return ; Done