Mercurial > public > mk2
diff code_part1/OSTC_code_asm_part1/menu_ppO2.asm @ 0:96a35aeda5f2
Initial setup
author | heinrichsweikamp |
---|---|
date | Tue, 12 Jan 2010 15:05:59 +0100 |
parents | |
children | 6a94f96e9cea |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/code_part1/OSTC_code_asm_part1/menu_ppO2.asm Tue Jan 12 15:05:59 2010 +0100 @@ -0,0 +1,285 @@ + +; OSTC - diving computer code +; Copyright (C) 2008 HeinrichsWeikamp GbR + +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. + +; You should have received a copy of the GNU General Public License +; along with this program. If not, see <http://www.gnu.org/licenses/>. + + +; Constant ppO2 Setup menu +; written by: Matthias Heinrichs, info@heinrichsweikamp.com +; written: 08/04/04 +; last updated: 080904 +; known bugs: +; ToDo: + +menu_const_ppO2: + movlw d'1' + movwf menupos + + bcf menubit4 + bcf cursor + bcf sleepmode + clrf decodata+0 ; Here: # of SP + bcf first_FA ; Here: =1: -, =0: + + bcf second_FA ; Here: =1: 1, =0: 10 steps + +menu_const_ppO20: + call PLED_ClearScreen + call PLED_topline_box + + WIN_INVERT .1 ; Init new Wordprocessor + DISPLAYTEXT .111 ; Constant ppO2 Setup + WIN_INVERT .0 ; Init new Wordprocessor + + +menu_const_ppO21: + clrf timeout_counter2 + bcf menubit2 + bcf menubit3 + + WIN_LEFT .20 + WIN_TOP .35 + lfsr FSR2,letter + OUTPUTTEXT .112 ; SP# + movff decodata+0,lo + incf lo,F + bsf leftbind + output_99 + movlw ' ' + movwf POSTINC2 + movlw '(' + movwf POSTINC2 + + OUTPUTTEXT d'192' ; Dil. + movlw ' ' + movwf POSTINC2 + + read_int_eeprom d'33' ; Read byte (stored in EEDATA) + movff EEDATA,active_gas ; Read start gas (1-5) + + decf active_gas,W ; Gas 0-4 + mullw d'4' + movf PRODL,W + addlw d'6' ; = address for O2 ratio + movwf EEADR + call read_eeprom ; Read O2 ratio + movff EEDATA, lo ; O2 ratio + + + bsf leftbind + output_99 + + movlw '/' + movwf POSTINC2 + + decf active_gas,W ; Gas 0-4 + mullw d'4' + movf PRODL,W + addlw d'7' ; = address for He ratio + movwf EEADR + call read_eeprom ; Read He ratio + movff EEDATA,lo ; And copy into hold register + + bsf leftbind + output_99 + movlw ')' + movwf POSTINC2 + call word_processor + + + WIN_LEFT .20 + WIN_TOP .65 + + lfsr FSR2,letter + OUTPUTTEXT .97 ; "Current: " + movf decodata+0,W + addlw d'36' ; offset in eeprom + movwf EEADR + call read_eeprom ; ppO2 value + movff EEDATA,lo + clrf hi + bsf leftbind + output_16dp d'3' + bcf leftbind + movlw 'B' + movwf POSTINC2 + movlw 'a' + movwf POSTINC2 + movlw 'r' + movwf POSTINC2 + movlw ' ' + movwf POSTINC2 + call word_processor + + WIN_LEFT .20 + WIN_TOP .95 + + lfsr FSR2,letter + OUTPUTTEXT d'190' ; ppO2 + + call word_processor + + WIN_LEFT .20 + WIN_TOP .125 + + lfsr FSR2,letter + OUTPUTTEXT d'191' ; ppO2 - + call word_processor + + WIN_LEFT .20 + WIN_TOP .155 + + lfsr FSR2,letter + OUTPUTTEXT .89 ; "Default: " + movlw '1' + movwf POSTINC2 + movlw '.' + movwf POSTINC2 + movlw '0' + movwf POSTINC2 + movlw '0' + movwf POSTINC2 + call word_processor + + DISPLAYTEXT .11 ; Exit + call wait_switches ; Waits until switches are released, resets flag if button stays pressed! + call PLED_menu_cursor + +menu_const_ppO2_loop: + call check_switches_logbook + + btfsc menubit3 + bra menu_const_ppO22 ; move cursor + + btfsc menubit2 + bra do_menu_const_ppO2 ; call submenu + + btfsc divemode + goto restart ; dive started! + + btfsc onesecupdate + call timeout_surfmode + + btfsc onesecupdate + call set_dive_modes + + bcf onesecupdate ; 1 sec. functions done + + btfsc sleepmode + bra exit_menu_const_ppO2 + + bra menu_const_ppO2_loop + +menu_const_ppO22: + incf menupos,F + + movlw d'2' + cpfseq menupos ; =2? + bra menu_const_ppO22a ; No + incf menupos,F ; Skip pos. 2 + +menu_const_ppO22a: + movlw d'7' + cpfseq menupos ; =7? + bra menu_const_ppO23 ; No + movlw d'1' + movwf menupos + +menu_const_ppO23: + clrf timeout_counter2 + call PLED_menu_cursor + + ; debounce switches + call wait_switches ; Waits until switches are released, resets flag if button stays pressed! + bcf menubit3 ; clear flag + bra menu_const_ppO2_loop + +do_menu_const_ppO2: + dcfsnz menupos,F + bra next_ppO2 + dcfsnz menupos,F + bra change_ppo2_plus + dcfsnz menupos,F + bra change_ppo2_plus + dcfsnz menupos,F + bra change_ppo2_minus + dcfsnz menupos,F + bra change_ppo2_reset +exit_menu_const_ppO2: ; exit... + movlw d'2' + movwf menupos + goto more_menu2 + +change_ppo2_plus: + movf decodata+0,W ; read current value + addlw d'36' ; offset in memory + movwf EEADR + call read_eeprom ; Low-value + movff EEDATA,lo + + incf lo,F ; increase depth + movlw d'251' + cpfseq lo + bra change_ppo2_plus2 + movlw d'250' + movwf lo +change_ppo2_plus2: + movff lo,EEDATA ; write result + call write_eeprom ; save result in EEPROM + movlw d'3' + movwf menupos + bra menu_const_ppO21 + +change_ppo2_minus: + movf decodata+0,W ; read current value + addlw d'36' ; offset in memory + movwf EEADR + call read_eeprom ; Low-value + movff EEDATA,lo + + decf lo,F ; decrease depth + movlw d'255' + cpfseq lo + bra change_ppo2_minus2 + movlw d'0' + movwf lo + +change_ppo2_minus2: + movff lo,EEDATA ; write result + call write_eeprom ; save result in EEPROM + + movlw d'4' + movwf menupos + bra menu_const_ppO21 + +change_ppo2_reset: ; reset to 1.00Bar + movf decodata+0,W ; read current value + addlw d'36' ; offset in memory + movwf EEADR + movlw d'100' + movwf EEDATA + call write_eeprom ; save result in EEPROM + movlw d'5' + movwf menupos + bra menu_const_ppO21 + +next_ppO2: + incf decodata+0,F + movlw d'3' + cpfseq decodata+0 ; =3? + bra next_ppO22 + clrf decodata+0 ; yes, so reset to zero +next_ppO22: + movlw d'1' + movwf menupos + bra menu_const_ppO21 \ No newline at end of file