MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;********************************************************************* 00002 ; FIT (GD1) 瞬間燃費計 00003 ; (c)るきへな 2001-2002 00004 ;********************************************************************* 00005 ; 00006 ; 開発開始 2001/12/22 00007 ; 配線決定 2001/12/23 00008 ; ケース組み込み 2001/12/24 00009 ; 中途半端だけどリリース 2002/01/08 00010 ; 割算ルーチン修正 2002/01/14 00011 ; MPASM化など 2002/02/01 00012 ; 信号間燃費など 2002/02/02 00013 ; 4MHz に変更 2002/05/18 00014 ; 表示を大幅に変更 2002/06/06 00015 ; タイムアウトタイマ調整 2002/07/12 00016 ; 掛け算のバグ修正 2002/07/12 00017 ; 00018 ; 使用環境 00019 ; PIC PIC16F84-10/P 00020 ; 液晶 M1632,M1672,SC1602B等 00021 ; クロック 4.0MHz 00022 ; アセンブラ MPASM 00023 ; 00024 ; ピンアサイン: 00025 ; 00026 ; PIC LCD FIT etc. 00027 ; -------------------------------------------------------------------- 00028 ; GND DB0 00029 ; GND DB1 00030 ; GND DB2 00031 ; GND DB3 00032 ; RA0(17) DB4 LED_0 (電流制限抵抗を介してLED_COMへ) 00033 ; RA1(18) DB5 LED_1 (電流制限抵抗を介してLED_COMへ) 00034 ; RA2(17) DB6 LED_2 (電流制限抵抗を介してLED_COMへ) 00035 ; RA3(18) DB7 LED_3 (電流制限抵抗を介してLED_COMへ) 00036 ; RA4(17) LED_COM (LED_0-3 のコモン。計25mAに気をつけよう) 00037 00038 ; GND // R/~W 00039 00040 ; RB0() Switch 1 00041 ; RB1() RS 00042 ; RB2() E(ENABLE) 00043 ; RB3() R/~W //Switch 2 00044 ; RB4() ndr(C7)赤/青 00045 ; RB5() ndn(C15)白 00046 ; RB6() speed(E25)青/黄 00047 ; RB7() fup(E5)緑/白 00048 ; 00049 ; ☆ 電源・クリスタル・コントラスト調整VR等の配線は省略 00050 ; ☆ 対車両IFは、RCフィルタ(R:75,C:0.1u)を通して信号線へ。プルアップはPIC内蔵を使用。 00051 ; ☆ 車両への接続のピンアサインは流動的です。本体プログラム参照のこと。 00052 ; ☆ LED は液晶バスを使っていないときにドライブする。ダイナミック点灯の応用。 00053 ; ☆ でも LED は使ってません。(デバッグ用かも) MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00054 ; ☆ 変速比計計画のなごりコードが残ってます。 00055 00056 list p=pic16f84 00057 include 00001 LIST 00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc. 00136 LIST 00058 00059 include "ramdef.asm" 00001 ; ------------------------------------------------------------------- 00002 ; ファイル名 ramdef.asm は「RAM定義」の意 00003 ; ------------------------------------------------------------------- 00004 2007 3FF2 00005 __config B'11111111110010' 00006 00007 ; @@@config のコメント書かなきゃ 00008 00009 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00010 ; RAM 定義 00011 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00012 0000000C 00013 ram set 0ch 0000000C 00014 timer_cn equ ram ; タイマカウンタ 0000000F 00015 ram set ram+3 0000000F 00016 odometer_cn equ ram ; 走行距離カウンタ 00000012 00017 ram set ram+3 00000012 00018 fuel_cn equ ram ; 燃料パルスカウンタ 00000015 00019 ram set ram+3 00000015 00020 ndr_cn equ ram ; ドライブプーリースピード パルスカウンタ 00000017 00021 ram set ram+2 00000017 00022 ndn_cn equ ram ; ドリブンプーリースピード パルスカウンタ 00000019 00023 ram set ram+2 00024 00000019 00025 timer_cn2 equ ram ; タイマカウンタ(信号間) 0000001C 00026 ram set ram+3 0000001C 00027 odometer_cn2 equ ram ; 走行距離カウンタ(信号間) 0000001F 00028 ram set ram+3 0000001F 00029 fuel_cn2 equ ram ; 燃料パルスカウンタ(信号間) 00000022 00030 ram set ram+3 00031 00000022 00032 speed_tm_la equ ram ; スピード・時間 00000024 00033 ram set ram+2 00000024 00034 speed_tm_lb equ ram ; スピード・時間 00000026 00035 ram set ram+2 00000026 00036 speed_tm equ ram ; スピード・時間 00000028 00037 ram set ram+2 00000028 00038 speed_flow equ ram ; スピード・0km/hチェック 00000029 00039 ram set ram+1 00040 00000029 00041 fuel_tm_la equ ram ; 燃料パルス・時間 0000002B 00042 ram set ram+2 0000002B 00043 fuel_tm_lb equ ram ; 燃料パルス・時間 0000002D 00044 ram set ram+2 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0000002D 00045 fuel_tm equ ram ; 燃料パルス・時間 0000002F 00046 ram set ram+2 0000002F 00047 fuel_flow equ ram ; 燃料パルス・fuel cut チェック 00000030 00048 ram set ram+1 00049 00000030 00050 w_save equ ram ; 割込 退避用 00000031 00051 ram set ram+1 00000031 00052 status_save equ ram ; 割込 退避用 00000032 00053 ram set ram+1 00054 00000032 00055 ra_save equ ram ; 通常時のPORTA 00000033 00056 ram set ram+1 00057 00000033 00058 rb_now equ ram ; 割込時のrb(割り込み期間だけ保存) 00000034 00059 ram set ram+1 00000034 00060 rb_temp equ ram ; 割込時のrb(処理ワーク) 00061 ;ram set ram+1 00000034 00062 rb_save equ ram ; 割込時のrb(次回まで保存) 00000035 00063 ram set ram+1 00064 00000035 00065 lcd_data_temp equ ram ; LCDデータ(テンポラリ用) 00000036 00066 ram set ram+1 00067 00000036 00068 src1 equ ram ; 計算用 引数 00000039 00069 ram set ram+3 00000039 00070 src2 equ ram ; 計算用 引数 0000003C 00071 ram set ram+3 0000003C 00072 result equ ram ; 計算用 戻り値 ※掛け算の結果で1バイト余計に使って mod に食いこみます 0000003F 00073 ram set ram+3 0000003F 00074 mod equ ram ; 計算用 戻り値 00000042 00075 ram set ram+3 00000042 00076 flag equ ram 00077 ;flag,0 : print 時に固定小数点(10倍)だとして表示します。 00078 ;flag,1 : お休み中 00079 ;flag,2 : 前回値表示中フラグ 00080 ;flag,3 : /0 error 00000043 00081 ram set ram+1 00000043 00082 dec equ ram ; 10進格納場所(5バイト) 00000048 00083 ram set ram+5 00000048 00084 dec_top equ ram 00000048 00085 calc_cn equ ram ; カウンタのワーク 00000049 00086 ram set ram+1 00000049 00087 calc_cn2 equ ram ; カウンタのワーク 0000004A 00088 ram set ram+1 0000004A 00089 mode equ ram ; 表示モード 0000004B 00090 ram set ram+1 00091 00092 ; LSTファイルを見て、50H までがRAM容量の限界。 00093 00094 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00095 ; 定数定義 00096 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00097 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00098 ; LCD の RS ピン 00099 #define RS PORTB,1 00100 ; LCD の RS ピン 00101 #define E PORTB,2 00102 ; ステータス表示 (@@@予定) 00103 #define LED_COM PORTA,4 00104 00105 ;分係数 00106 ;10*1000*1000/4/128/256*60 = 4577.636719 = 0x11E2 00107 ; 4*1000*1000/4/ 64/256*60 = 3662.109375 = 0x0E4E 00108 #define TIMMINFACT_H 0x0e 00109 #define TIMMINFACT_L 0x4e 00110 00111 ;秒係数 00112 ;10*1000*1000/4/128/256*256 = 19531.25 = 0x4C4B 00113 ; 4*1000*1000/4/ 64/256*256 = 15625 = 0x3D09 00114 #define TIMSECFACT_H 0x3d 00115 #define TIMSECFACT_L 0x09 00116 00117 ;速度係数 00118 ;10*1000*1000/4/128/(2.54*1000/3600) = 27682.087 = 0x6C22 00119 ; 4*1000*1000/4/ 64/(2.54*1000/3600) = 22145.669 = 0x5682 00120 #define SPEEDFACT_H 0x56 00121 #define SPEEDFACT_L 0x82 00122 00123 ;燃料/時間 係数 00124 ;10*1000*1000/4/128/(637*4/1000)*60 = 459919.54 = 0x70490 00125 ; 4*1000*1000/4/ 64/(637*4/1000)*60 = 367935.64 = 0x59D40 00126 #define FUELFACT_H 0x05 00127 #define FUELFACT_M 0x9d 00128 #define FUELFACT_L 0x40 00129 00130 00131 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00132 ; タイムアウト判断時間 00133 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00134 00135 ; 1秒≒61 (@ 4MHz) 00136 00137 ; 停止判断時間 00138 #define SPEED_FLOW_MAX D'160' 00139 00140 ; 燃料停止判断時間 (エンジン停止) 00141 #define FUEL_ST_FLOW_MAX D'254' 00142 00143 ; 燃料停止判断時間 (フューエルカット) 00144 #define FUEL_FC_FLOW_MAX D'150' 00145 00146 00147 ; 4時間止まっていたらオールリセット 00148 ; 4*3600*61 = 878906 = D693A 00149 ; いや、でも面倒だから最上位バイトだけチェックしよう。 00150 ; 0x0cffff = 3:53 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00151 ; 0x0dffff = 4:10 00152 ; ちなみに4時間ってのはベンツのマネ。(参考 http://www.cds.co.jp/ff/r2302.htm) 00153 #define RESET_FLOW_MAX 0x0d 00154 00060 0000 00061 org 0 00062 00063 ; 3ワード分勿体無いので命令を置くゾ 00064 0000 1683 00065 bsf STATUS,RP0 ;セレクトページ1 00066 00067 ;[OPTIONレジスタの設定] 00068 ;7 RBPU   0 :PORTBのPullUp = 0:あり 1:なし 00069 ;6 INTEDGE  1 :INT割込み信号のエッジ = 0:立ち下がり 1:立ち上がり 00070 ;5 TOCS 0 :TMR0ソース選択 = 0:RA4ピン 1:内部 00071 ;4 TOSE 0 :TMR0のカウントエッジ = 0:立ち上がり 1:立ち下がり 00072 ;3 PSA 0 :プリスケーラ割当 = 0:TMR0 1:WDT 00073 ;2 PS0〜2 5 :プリスケーラ値 = (TMR0)0:2 1:4 2:8 3:16 4:32 5:64 6:128 7:256 00074 ; PS0〜2 :プリスケーラ値 = (WDT )0:1 1:2 2:4 3:8 4:16 5:32 6:64 7:128 0001 3045 00075 movlw B'01000101' 0002 0081 00076 movwf OPTION_REG-0x80 ;OPTION REG に書き込み 00077 0003 2879 00078 goto start 00079 0004 00080 org 4 00081 include "interrupt.asm" 00001 ; //////////////////////////////////////////////////////////////////// 00002 ; 割り込み処理。 00003 ; //////////////////////////////////////////////////////////////////// 0004 00004 interrupt 0004 00B0 00005 movwf w_save ;レジスタ退避(定石) 0005 0E03 00006 swapf STATUS,w 0006 00B1 00007 movwf status_save 00008 00009 ;;;;;;;;;;;;;;;; T0IF (タイマ) 0007 1D0B 00010 btfss INTCON,T0IF ; T0IF (タイマ) はどうよ 0008 281F 00011 goto skip_t0if ; T0IF の処理はしない 00012 00013 ;int_t0if 0009 305F 00014 movlw SPEED_FLOW_MAX ^ 0ffh 000A 0728 00015 addwf speed_flow,0 000B 1C03 00016 btfss STATUS,C ; 0km/h と判断したら inc しない 000C 0AA8 00017 incf speed_flow,F ; xx sec パルスが無ければ 0km/h 00018 000D 3001 00019 movlw FUEL_ST_FLOW_MAX ^ 0ffh 000E 072F 00020 addwf fuel_flow,0 000F 1C03 00021 btfss STATUS,C ; fuel cut と判断したら inc しない 0010 0AAF 00022 incf fuel_flow,F ; xx sec パルスが無ければ fuel cut 00023 0011 1942 00024 btfsc flag,2 ; 前回値表示中フラグON? 0012 2818 00025 goto int_t0if_1 ; on なら inc せず。 00026 0013 0A99 00027 incf timer_cn2+0,F ; タイマ(信号間) inc MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0014 1903 00028 btfsc STATUS,Z 0015 0A9A 00029 incf timer_cn2+1,F 0016 1903 00030 btfsc STATUS,Z 0017 0A9B 00031 incf timer_cn2+2,F 0018 00032 int_t0if_1 0018 18C2 00033 btfsc flag,1 ; お休み中はタイマを inc しない 0019 281F 00034 goto skip_t0if 00035 001A 0A8C 00036 incf timer_cn+0,F ; タイマ inc 001B 1903 00037 btfsc STATUS,Z 001C 0A8D 00038 incf timer_cn+1,F 001D 1903 00039 btfsc STATUS,Z 001E 0A8E 00040 incf timer_cn+2,F 00041 001F 00042 skip_t0if 00043 00044 ;;;;;;;;;;;;;;;; INTF (RB0/INT) 001F 1C8B 00045 btfss INTCON,INTF ; INTF (RB0/INT) はどうよ 0020 2821 00046 goto skip_rb0 ; INTF の処理はしない 00047 ;int_rb0 00048 ;とりあえずリセットボタンとして機能する(暫定仕様) 00049 ;clrf fuel_cn+0 00050 ;clrf fuel_cn+1 00051 ;clrf fuel_cn+2 00052 ;clrf odometer_cn+0 00053 ;clrf odometer_cn+1 00054 ;clrf odometer_cn+2 00055 0021 00056 skip_rb0 00057 00058 ;;;;;;;;;;;;;;;; RBIF (RB4-7) 0021 1C0B 00059 btfss INTCON,RBIF ; RBIF (RB4-7) はどうよ 0022 2871 00060 goto skip_rbif 00061 00062 ; 以下 rbif の処理 0023 0806 00063 movf PORTB,W ; 現在の rb をゲット 0024 00B3 00064 movwf rb_now 0025 0634 00065 xorwf rb_save,W ; 変化があったもの 0026 0533 00066 andwf rb_now,W ; かつ、現在 1 のもの 0027 00B4 00067 movwf rb_temp ; 計算tempにコピ 00068 00069 ;;;;;;;;;;;;;;;; RB4 0028 1E34 00070 btfss rb_temp,4 ; rb4 はどうよ 0029 282D 00071 goto skip_rb4 ; rb4 の処理はしない 00072 00073 ;int_rb4 002A 0A95 00074 incf ndr_cn+0,F ; ドライブプーリー inc 002B 1903 00075 btfsc STATUS,Z 002C 0A96 00076 incf ndr_cn+1,F 00077 00078 ;とりあえずリセットボタンとして機能する(暫定仕様) 00079 ;clrf fuel_cn+0 00080 ;clrf fuel_cn+1 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00081 ;clrf fuel_cn+2 00082 ;clrf odometer_cn+0 00083 ;clrf odometer_cn+1 00084 ;clrf odometer_cn+2 00085 002D 00086 skip_rb4 00087 00088 ;;;;;;;;;;;;;;;; RB5 002D 1EB4 00089 btfss rb_temp,5 ; rb5 はどうよ 002E 2832 00090 goto skip_rb5 ; rb5 の処理はしない 00091 00092 ;int_rb5 002F 0A97 00093 incf ndn_cn+0,F ; ドリブンプーリー inc 0030 1903 00094 btfsc STATUS,Z 0031 0A98 00095 incf ndn_cn+1,F 00096 00097 ;とりあえずリセットボタンとして機能する(暫定仕様) 00098 ;clrf fuel_cn+0 00099 ;clrf fuel_cn+1 00100 ;clrf fuel_cn+2 00101 ;clrf odometer_cn+0 00102 ;clrf odometer_cn+1 00103 ;clrf odometer_cn+2 00104 0032 00105 skip_rb5 00106 00107 ;;;;;;;;;;;;;;;; RB6 0032 1F34 00108 btfss rb_temp,6 ; rb6 はどうよ 0033 2857 00109 goto skip_rb6 ; rb6 の処理はしない 00110 0034 00111 int_rb6 0034 0A8F 00112 incf odometer_cn+0,F ; 車速パルス inc 0035 1903 00113 btfsc STATUS,Z 0036 0A90 00114 incf odometer_cn+1,F 0037 1903 00115 btfsc STATUS,Z 0038 0A91 00116 incf odometer_cn+2,F 00117 0039 0A9C 00118 incf odometer_cn2+0,F ; 車速パルス2 inc 003A 1903 00119 btfsc STATUS,Z 003B 0A9D 00120 incf odometer_cn2+1,F 003C 1903 00121 btfsc STATUS,Z 003D 0A9E 00122 incf odometer_cn2+2,F 00123 003E 0822 00124 movf speed_tm_la+0,W ; 前回タイマ値記憶 003F 00A4 00125 movwf speed_tm_lb+0 0040 0823 00126 movf speed_tm_la+1,W 0041 00A5 00127 movwf speed_tm_lb+1 00128 0042 0801 00129 movf TMR0,W ; 今回タイマ値記憶 0043 00A2 00130 movwf speed_tm_la+0 0044 080C 00131 movf timer_cn,W 0045 00A3 00132 movwf speed_tm_la+1 00133 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0046 305F 00134 movlw SPEED_FLOW_MAX ^ 0ffh 0047 0728 00135 addwf speed_flow,0 0048 1803 00136 btfsc STATUS,C 0049 284C 00137 goto cn2_reset ; 停止状態から動き出したとき 00138 ; call にすると、スタックオーバーフローするゾ! 00139 004A 01A8 00140 clrf speed_flow ; 0km/h チェックフラグクリア 004B 2857 00141 goto skip_rb6 00142 004C 00143 cn2_reset 004C 1142 00144 bcf flag,2 ; 前回値表示中フラグOFF 00145 ; いつもOFFにして冗長な感じだが、ON だったら OFF なんて判断するほうがなんか冗長 00146 004D 019C 00147 clrf odometer_cn2+0 ; 車速パルス2 004E 019D 00148 clrf odometer_cn2+1 004F 019E 00149 clrf odometer_cn2+2 0050 019F 00150 clrf fuel_cn2+0 ; 燃料パルス2 0051 01A0 00151 clrf fuel_cn2+1 0052 01A1 00152 clrf fuel_cn2+2 0053 0199 00153 clrf timer_cn2+0 ; タイマ(信号間) 0054 019A 00154 clrf timer_cn2+1 0055 019B 00155 clrf timer_cn2+2 00156 0056 01A8 00157 clrf speed_flow ; 0km/h チェックフラグクリア 00158 0057 00159 skip_rb6 00160 00161 ;;;;;;;;;;;;;;;; RB7 0057 1FB4 00162 btfss rb_temp,7 ; rb7 はどうよ 0058 286F 00163 goto skip_rb7 ; rb7 の処理はしない 00164 0059 00165 int_rb7 0059 0A92 00166 incf fuel_cn+0,F ; 燃料パルス inc 005A 1903 00167 btfsc STATUS,Z 005B 0A93 00168 incf fuel_cn+1,F 005C 1903 00169 btfsc STATUS,Z 005D 0A94 00170 incf fuel_cn+2,F 00171 005E 1942 00172 btfsc flag,2 ; 前回値表示中フラグON? 005F 2865 00173 goto int_rb7_1 ; on なら inc せず。 00174 0060 0A9F 00175 incf fuel_cn2+0,F ; 燃料パルス2 inc 0061 1903 00176 btfsc STATUS,Z 0062 0AA0 00177 incf fuel_cn2+1,F 0063 1903 00178 btfsc STATUS,Z 0064 0AA1 00179 incf fuel_cn2+2,F 00180 0065 00181 int_rb7_1 00182 0065 0829 00183 movf fuel_tm_la+0,W ; 前回タイマ値記憶 0066 00AB 00184 movwf fuel_tm_lb+0 0067 082A 00185 movf fuel_tm_la+1,W 0068 00AC 00186 movwf fuel_tm_lb+1 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00187 0069 0801 00188 movf TMR0,W ; 今回タイマ値記憶 006A 00A9 00189 movwf fuel_tm_la+0 006B 080C 00190 movf timer_cn,W 006C 00AA 00191 movwf fuel_tm_la+1 00192 006D 3001 00193 movlw 1 006E 00AF 00194 movwf fuel_flow ; fuel cut チェックフラグクリア 00195 006F 00196 skip_rb7 00197 00198 ;;;;;;;;;;;;;;;; RB(4-7) おわり 00199 006F 0833 00200 movf rb_now,W ; 次回のために現在の rb を保存 0070 00B4 00201 movwf rb_save ; ★ rb から直接ゲットすると、既に変化している恐れあり。 00202 0071 00203 skip_rbif 00204 0071 0E31 00205 swapf status_save,W ; Swap nibbles in STATUS_TEMP register 00206 ; and place result into W 0072 0083 00207 movwf STATUS ; Move W into STATUS register (sets bank to original state) 0073 0EB0 00208 swapf w_save, F ; Swap nibbles in w_save and place result in w_save 0074 0E30 00209 swapf w_save, W ; Swap nibbles in w_save and place result into W 0075 110B 00210 bcf INTCON,T0IF 0076 108B 00211 bcf INTCON,INTF 0077 100B 00212 bcf INTCON,RBIF 0078 0009 00213 retfie ; 割り込み処理終わり 00082 0079 00083 start 00084 00085 ;call init_pic ; call return も勿体無い。 00086 include "init_pic.asm" 00001 ; //////////////////////////////////////////////////////////////////// 00002 ; PIC 初期化 00003 ; //////////////////////////////////////////////////////////////////// 0079 00004 init_pic 00005 ; 以下3ワード分は割り込みベクタ(org 4)の前に書いたYO! 00006 ;bsf STATUS,RP0 ;セレクトページ1 00007 ;movlw B'bbbbbbbb' 00008 ;movwf OPTION_REG-0x80 ;OPTION REG に書き込み 00009 0079 3000 00010 movlw B'00000000' ; RA? は全部OUT 007A 0085 00011 movwf TRISA-0x80 00012 007B 30F1 00013 movlw B'11110001' ; RB1-RB3ピンをOUT 007C 0086 00014 movwf TRISB-0x80 00015 007D 1283 00016 bcf STATUS,RP0 ;セレクトページ0 00017 007E 0185 00018 clrf PORTA 007F 0186 00019 clrf PORTB 00020 00021 ; RAM初期化 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00022 ; 0c 〜 3f クリア 0080 300C 00023 movlw 0x0c 0081 0084 00024 movwf FSR 0082 00025 ram_init_loop1 0082 0180 00026 clrf INDF 0083 0A84 00027 incf FSR,F 0084 1F04 00028 btfss FSR,6 0085 2882 00029 goto ram_init_loop1 00030 ; 続いて 40 〜 4f クリア 0086 00031 ram_init_loop2 0086 0180 00032 clrf INDF 0087 0A84 00033 incf FSR,F 0088 1E04 00034 btfss FSR,4 0089 2886 00035 goto ram_init_loop2 00036 008A 30FF 00037 movlw 0xff 008B 00B4 00038 movwf rb_save 00039 00040 ;;;;;return 00041 ; call return も勿体無い。 00087 008C 22B0 00088 call init_lcd 00089 ; ↑コレも include 化しようと思ったが別のところでも呼んでいるので、 00090 ; include 化するとバグリます。 00091 008D 30F8 00092 movlw B'11111000' ; 割り込みレジスタ初期設定 008E 008B 00093 movwf INTCON 00094 00095 include "mainloop.asm" 00001 ; //////////////////////////////////////////////////////////////////// 00002 ; メインループ 00003 ; //////////////////////////////////////////////////////////////////// 00004 008F 00005 mainloop 00006 00007 ; //////////////////////////////////////////////////////////////////// 00008 ; 各種計算 00009 ; //////////////////////////////////////////////////////////////////// 008F 00010 calccalc 008F 118B 00011 bcf INTCON,RBIE ; rb割込禁止 00012 00013 ; 車速パルス間隔計算 0090 0822 00014 movf speed_tm_la+0,W 0091 00A6 00015 movwf speed_tm+0 0092 0823 00016 movf speed_tm_la+1,W 0093 00A7 00017 movwf speed_tm+1 0094 0824 00018 movf speed_tm_lb+0,W 0095 02A6 00019 subwf speed_tm+0,F 0096 1C03 00020 btfss STATUS,C 0097 03A7 00021 decf speed_tm+1,F 0098 0825 00022 movf speed_tm_lb+1,W 0099 02A7 00023 subwf speed_tm+1,F 00024 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00025 ; 燃料パルス間隔計算 009A 0829 00026 movf fuel_tm_la+0,W 009B 00AD 00027 movwf fuel_tm+0 009C 082A 00028 movf fuel_tm_la+1,W 009D 00AE 00029 movwf fuel_tm+1 009E 082B 00030 movf fuel_tm_lb+0,W 009F 02AD 00031 subwf fuel_tm+0,F 00A0 1C03 00032 btfss STATUS,C 00A1 03AE 00033 decf fuel_tm+1,F 00A2 082C 00034 movf fuel_tm_lb+1,W 00A3 02AE 00035 subwf fuel_tm+1,F 00036 00A4 158B 00037 bsf INTCON,RBIE ; rb割込許可 00038 00039 ;;;;; 各種計算終わり 00040 00041 ; LED 00A5 080D 00042 movf timer_cn+1,W 00A6 390F 00043 andlw B'00001111' 00A7 00B2 00044 movwf ra_save 00A8 0085 00045 movwf PORTA 00046 00A9 20F8 00047 call print ; ////////////// 表示! 00048 00AA 00049 loop1 00AA 1D8C 00050 btfss timer_cn,3 00AB 28AA 00051 goto loop1 ; wait 00052 00AC 00053 loop2 00AC 198C 00054 btfsc timer_cn,3 00AD 28AC 00055 goto loop2 ; wait 00056 00AE 3001 00057 movlw FUEL_ST_FLOW_MAX ^ 0ffh 00AF 072F 00058 addwf fuel_flow,0 00B0 1C03 00059 btfss STATUS,C ; fuel cut と判断したら skip 00B1 28F7 00060 goto stopcheck_end ; fuel cut でなければ 通常処理へ 00061 00B2 305F 00062 movlw SPEED_FLOW_MAX ^ 0ffh 00B3 0728 00063 addwf speed_flow,0 00B4 1C03 00064 btfss STATUS,C 00B5 28F7 00065 goto stopcheck_end ; 0km/h と判断されたら お休み 00066 ; //////////////////////////////////////////////////////////////////// 00067 ; お休み中・・・ 00068 ; //////////////////////////////////////////////////////////////////// 00069 ;sleeping 00B6 1086 00070 bcf RS 00B7 3000 00071 movlw 0 00B8 0185 00072 clrf PORTA 00073 00B9 1506 00074 bsf E ; Eピンを'H' (長時間やると、液晶OFF) 00075 00BA 1683 00076 bsf STATUS,RP0 ;セレクトページ1 00077 ;movlw B'11111111' ; 全部IN (9mA) MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00078 ;movlw B'11111011' ; Eを出力 (15mA) 00BB 30F5 00079 movlw B'11110101' ; RS,R/~W を出力 (4mA) 00BC 0086 00080 movwf TRISB-0x80 00BD 1283 00081 bcf STATUS,RP0 ;セレクトページ0 00082 00BE 14C2 00083 bsf flag,1 ; お休み中フラグON 00084 00BF 0199 00085 clrf timer_cn2+0 ; タイマ(信号間) 00C0 019A 00086 clrf timer_cn2+1 00C1 019B 00087 clrf timer_cn2+2 00088 00089 ; パルスがこない間、無限ループ --> 00C2 00090 sleep_loop 00C2 3001 00091 movlw FUEL_ST_FLOW_MAX ^ 0ffh 00C3 072F 00092 addwf fuel_flow,0 00C4 1803 00093 btfsc STATUS,C 00C5 28C2 00094 goto sleep_loop ; fuel cut と判断されたら 00095 ; パルスがこない間、無限ループ <-- 00096 00097 ; 一定時間停車していた? 00C6 300D 00098 movlw RESET_FLOW_MAX 00C7 021B 00099 subwf timer_cn2+2,W 00C8 1C03 00100 btfss STATUS,C 00C9 28E7 00101 goto reset_flow_check_1 ; 一定時間に満たないので信号間だけリセット 00102 00103 ; 前回値を信号間の方にコピってからリセット 00CA 1542 00104 bsf flag,2 ; 前回値表示中フラグON 00105 00106 ; コピ 00CB 080C 00107 movf timer_cn+0,W 00CC 0099 00108 movwf timer_cn2+0 00CD 080D 00109 movf timer_cn+1,W 00CE 009A 00110 movwf timer_cn2+1 00CF 080E 00111 movf timer_cn+2,W 00D0 009B 00112 movwf timer_cn2+2 00113 00D1 080F 00114 movf odometer_cn+0,W 00D2 009C 00115 movwf odometer_cn2+0 00D3 0810 00116 movf odometer_cn+1,W 00D4 009D 00117 movwf odometer_cn2+1 00D5 0811 00118 movf odometer_cn+2,W 00D6 009E 00119 movwf odometer_cn2+2 00120 00D7 0812 00121 movf fuel_cn+0,W 00D8 009F 00122 movwf fuel_cn2+0 00D9 0813 00123 movf fuel_cn+1,W 00DA 00A0 00124 movwf fuel_cn2+1 00DB 0814 00125 movf fuel_cn+2,W 00DC 00A1 00126 movwf fuel_cn2+2 00127 00128 ; リセ 00DD 018C 00129 clrf timer_cn+0 00DE 018D 00130 clrf timer_cn+1 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00DF 018E 00131 clrf timer_cn+2 00E0 018F 00132 clrf odometer_cn+0 00E1 0190 00133 clrf odometer_cn+1 00E2 0191 00134 clrf odometer_cn+2 00E3 0192 00135 clrf fuel_cn+0 00E4 0193 00136 clrf fuel_cn+1 00E5 0194 00137 clrf fuel_cn+2 00E6 28F0 00138 goto reset_flow_check_end 00139 00E7 00140 reset_flow_check_1 ; 一定時間に満たないので信号間だけリセット 00E7 0199 00141 clrf timer_cn2+0 00E8 019A 00142 clrf timer_cn2+1 00E9 019B 00143 clrf timer_cn2+2 00EA 019C 00144 clrf odometer_cn2+0 00EB 019D 00145 clrf odometer_cn2+1 00EC 019E 00146 clrf odometer_cn2+2 00ED 019F 00147 clrf fuel_cn2+0 00EE 01A0 00148 clrf fuel_cn2+1 00EF 01A1 00149 clrf fuel_cn2+2 00150 00F0 00151 reset_flow_check_end 00152 00F0 1683 00153 bsf STATUS,RP0 ;セレクトページ1 00F1 30F1 00154 movlw B'11110001' ; RB1-RB3ピンをOUT 00F2 0086 00155 movwf TRISB-0x80 00F3 1283 00156 bcf STATUS,RP0 ;セレクトページ0 00157 00F4 1106 00158 bcf E ; Eピンを'L' (長時間やると、液晶ON) 00F5 22B0 00159 call init_lcd ; 液晶初期化 00F6 10C2 00160 bcf flag,1 ; お休み中フラグOFF 00161 00F7 00162 stopcheck_end 00163 00F7 288F 00164 goto mainloop ; 無限ループ ////////////// ループ、ココまで /////////// 00165 00096 00097 include "print.asm" 00001 ; ------------------------------------------------------------------- 00002 ; 表示 00003 ; ------------------------------------------------------------------- 00004 00005 ; 瞬間系 信号間 起動から 00006 ; ---------------------------- 00007 ; 説明 燃費 燃費 燃費 00008 ; 速度 平均速度 平均速度 00009 ; 燃料 距離 距離 00010 ; 時間 時間 00011 ; ---------------------------- 00012 ; 実際の 000 00.0 00.0 00013 ; サンプル 000 000.0 000.0 00014 ; 000.00 000.00 00015 ; 000 000:00 000:00 00016 ; -------------------- MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00017 ; 桁 01234567890123456789 00018 00F8 00019 print 00020 00021 ; カーソルを1行目に移動 00F8 1086 00022 bcf RS ; RS='L' 00F9 3080 00023 movlw B'10000000' 00FA 229A 00024 call write_lcd_data 00FB 1486 00025 bsf RS ; RS=1 : 以後のコマンドは文字表示 00026 00FC 1942 00027 btfsc flag,2 ; 前回値表示中フラグON? 00FD 2903 00028 goto print_1 ; ON なら prev表示 00029 ; OFF なら 通常表示 00030 00FE 2159 00031 call fu_print ; 瞬間燃費表示 00032 00FF 3020 00033 movlw ' ' 0100 229A 00034 call write_lcd_data 0101 229A 00035 call write_lcd_data 0102 290D 00036 goto print_2 00037 0103 00038 print_1 ; ON なら prev 表示 0103 3070 00039 movlw 'p' 0104 229A 00040 call write_lcd_data 0105 3072 00041 movlw 'r' 0106 229A 00042 call write_lcd_data 0107 3065 00043 movlw 'e' 0108 229A 00044 call write_lcd_data 0109 3076 00045 movlw 'v' 010A 229A 00046 call write_lcd_data 010B 3020 00047 movlw ' ' 010C 229A 00048 call write_lcd_data 00049 010D 00050 print_2 010D 21A6 00051 call futs_print ; 区間燃費表示(信号間) 00052 010E 3020 00053 movlw ' ' 010F 229A 00054 call write_lcd_data 0110 229A 00055 call write_lcd_data 0111 229A 00056 call write_lcd_data 00057 0112 2190 00058 call fut_print ; 区間燃費表示 00059 00060 ; カーソルを2行目に移動 0113 1086 00061 bcf RS ; RS='L' 0114 30C0 00062 movlw B'11000000' 0115 229A 00063 call write_lcd_data 0116 1486 00064 bsf RS ; RS=1 : 以後のコマンドは文字表示 00065 0117 2138 00066 call speed_print ; 速度表示 00067 0118 3020 00068 movlw ' ' 0119 229A 00069 call write_lcd_data MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00070 011A 2246 00071 call avgsps_print ; 平均速度表示(信号間) 00072 011B 3020 00073 movlw ' ' 011C 229A 00074 call write_lcd_data 011D 229A 00075 call write_lcd_data 00076 011E 2212 00077 call avgsp_print ; 平均速度表示 00078 00079 00080 ; カーソルを3行目に移動 011F 1086 00081 bcf RS ; RS='L' 0120 3094 00082 movlw B'10010100' 0121 229A 00083 call write_lcd_data 0122 1486 00084 bsf RS ; RS=1 : 以後のコマンドは文字表示 00085 0123 3020 00086 movlw ' ' 0124 229A 00087 call write_lcd_data 0125 229A 00088 call write_lcd_data 0126 229A 00089 call write_lcd_data 0127 229A 00090 call write_lcd_data 00091 0128 21F0 00092 call odds_print ; 走行距離表示(信号間) 00093 0129 3020 00094 movlw ' ' 012A 229A 00095 call write_lcd_data 00096 012B 21E7 00097 call odd_print ; 走行距離表示 00098 00099 ; カーソルを4行目に移動 012C 1086 00100 bcf RS ; RS='L' 012D 30D4 00101 movlw B'11010100' 012E 229A 00102 call write_lcd_data 012F 1486 00103 bsf RS ; RS=1 : 以後のコマンドは文字表示 00104 0130 2150 00105 call fu_print_time ; 燃費cc/min表示 00106 0131 3020 00107 movlw ' ' 0132 229A 00108 call write_lcd_data 00109 0133 21C5 00110 call times_print ; 時間表示(信号間) 00111 0134 3020 00112 movlw ' ' 0135 229A 00113 call write_lcd_data 00114 0136 21BC 00115 call time_print ; 時間表示 00116 00117 ;call spcout_print ; 車速パルスカウント表示 00118 ;call fuelcout_print ; 燃料パルスカウント表示 00119 0137 0008 00120 return 00121 00122 ;■瞬間系 --> MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00123 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00124 ; 速度表示 0138 00125 speed_print 0138 305F 00126 movlw SPEED_FLOW_MAX ^ 0ffh 0139 0728 00127 addwf speed_flow,0 013A 1803 00128 btfsc STATUS,C 013B 2949 00129 goto sp_print_0 ; 0km/h と判断されたら、計算しない 00130 00131 ; 速度計算(通常走行時) 013C 0827 00132 movf speed_tm+1,W 013D 00BA 00133 movwf src2+1 013E 0826 00134 movf speed_tm+0,W 013F 00B9 00135 movwf src2+0 0140 3056 00136 movlw SPEEDFACT_H ;係数 0141 00B7 00137 movwf src1+1 0142 3082 00138 movlw SPEEDFACT_L ;係数 0143 00B6 00139 movwf src1+0 0144 2327 00140 call div16 00141 0145 22CE 00142 call bin16tobcd 00143 0146 1042 00144 bcf flag,0 0147 228F 00145 call print_dec3 00146 ;movlw 'k' 00147 ;call write_lcd_data 00148 ;movlw 'm' 00149 ;call write_lcd_data 00150 ;movlw '/' 00151 ;call write_lcd_data 00152 ;movlw 'h' 00153 ;call write_lcd_data 00154 0148 294F 00155 goto sp_print_e 0149 00156 sp_print_0 00157 ; idle 0149 3020 00158 movlw ' ' 014A 229A 00159 call write_lcd_data 014B 3020 00160 movlw ' ' 014C 229A 00161 call write_lcd_data 014D 3030 00162 movlw '0' 014E 229A 00163 call write_lcd_data 00164 ;movlw 'e' 00165 ;call write_lcd_data 00166 ;movlw ' ' 00167 ;call write_lcd_data 00168 ;call write_lcd_data 00169 ;call write_lcd_data 014F 00170 sp_print_e 014F 0008 00171 return 00172 00173 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00174 ; 瞬間燃費表示 (000cc/m or f-c) 0150 00175 fu_print_time MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0150 305F 00176 movlw SPEED_FLOW_MAX ^ 0ffh 0151 0728 00177 addwf speed_flow,0 0152 1803 00178 btfsc STATUS,C 0153 296E 00179 goto fu_print_ccpmin ; 停止中は必ず cc/min 表示 00180 0154 3069 00181 movlw FUEL_FC_FLOW_MAX ^ 0ffh 0155 072F 00182 addwf fuel_flow,0 0156 1803 00183 btfsc STATUS,C 0157 297E 00184 goto fu_print_fc ; 走行中で fuel cut と判断されたら f-c 00185 0158 296E 00186 goto fu_print_ccpmin ; 通常時? は cc/min 表示 00187 00188 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00189 ; 瞬間燃費表示 (000km/l or stp or f-c) 0159 00190 fu_print 0159 305F 00191 movlw SPEED_FLOW_MAX ^ 0ffh 015A 0728 00192 addwf speed_flow,0 015B 1803 00193 btfsc STATUS,C 015C 2989 00194 goto fu_print_stop ; 0km/h と判断されたら 00195 015D 3069 00196 movlw FUEL_FC_FLOW_MAX ^ 0ffh 015E 072F 00197 addwf fuel_flow,0 015F 1803 00198 btfsc STATUS,C 0160 297E 00199 goto fu_print_fc ; fuel cut と判断されたら 00200 00201 ; 瞬間燃費計算 00202 0161 082E 00203 movf fuel_tm+1,W 0162 00B7 00204 movwf src1+1 0163 082D 00205 movf fuel_tm+0,W 0164 00B6 00206 movwf src1+0 0165 0827 00207 movf speed_tm+1,W 0166 00BA 00208 movwf src2+1 0167 0826 00209 movf speed_tm+0,W 0168 00B9 00210 movwf src2+0 0169 2327 00211 call div16 00212 016A 22CE 00213 call bin16tobcd 00214 016B 1042 00215 bcf flag,0 016C 228F 00216 call print_dec3 00217 ;movlw 'k' 00218 ;call write_lcd_data 00219 ;movlw 'm' 00220 ;call write_lcd_data 00221 ;movlw '/' 00222 ;call write_lcd_data 00223 ;movlw 'l' 00224 ;call write_lcd_data 016D 298F 00225 goto fu_print_e 016E 00226 fu_print_ccpmin 00227 ; cc/min 表示 016E 3005 00228 movlw FUELFACT_H ;係数 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 016F 00B8 00229 movwf src1+2 0170 309D 00230 movlw FUELFACT_M ;係数 0171 00B7 00231 movwf src1+1 0172 3040 00232 movlw FUELFACT_L ;係数 0173 00B6 00233 movwf src1+0 00234 00235 ;movlw 0 0174 01BB 00236 clrf src2+2 0175 082E 00237 movf fuel_tm+1,W 0176 00BA 00238 movwf src2+1 0177 082D 00239 movf fuel_tm+0,W 0178 00B9 00240 movwf src2+0 0179 236A 00241 call div24 00242 017A 22CE 00243 call bin16tobcd 00244 017B 1042 00245 bcf flag,0 017C 228F 00246 call print_dec3 00247 00248 ;movlw 'c' 00249 ;call write_lcd_data 00250 ;movlw 'c' 00251 ;call write_lcd_data 00252 ;movlw '/' 00253 ;call write_lcd_data 00254 ;movlw 'm' 00255 ;call write_lcd_data 017D 298F 00256 goto fu_print_e 017E 00257 fu_print_fc 017E 305F 00258 movlw SPEED_FLOW_MAX ^ 0ffh 017F 0728 00259 addwf speed_flow,0 0180 1803 00260 btfsc STATUS,C 0181 2989 00261 goto fu_print_stop ; 0km/h と判断されたら 00262 00263 ; f-c 表示 0182 3066 00264 movlw 'f' 0183 229A 00265 call write_lcd_data 0184 302D 00266 movlw '-' 0185 229A 00267 call write_lcd_data 0186 3063 00268 movlw 'c' 0187 229A 00269 call write_lcd_data 00270 ;movlw ' ' 00271 ;call write_lcd_data 00272 ;call write_lcd_data 00273 ;call write_lcd_data 00274 ;call write_lcd_data 0188 298F 00275 goto fu_print_e 0189 00276 fu_print_stop 00277 ; stop 表示 0189 302D 00278 movlw '-' 018A 229A 00279 call write_lcd_data 018B 302D 00280 movlw '-' 018C 229A 00281 call write_lcd_data MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00282 ;movlw '-' 00283 ;call write_lcd_data 018D 302D 00284 movlw '-' 018E 229A 00285 call write_lcd_data 00286 ;movlw ' ' 00287 ;call write_lcd_data 00288 ;call write_lcd_data 00289 ;call write_lcd_data 00290 ;goto fu_print_e 018F 00291 fu_print_e 018F 0008 00292 return 00293 00294 ;■瞬間系 <-- 00295 00296 00297 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00298 ; 区間燃費表示 0190 00299 fut_print 00300 ; 区間燃費計算 0190 118B 00301 bcf INTCON,RBIE ; rb割込禁止 0191 0811 00302 movf odometer_cn+2,W 0192 00BB 00303 movwf src2+2 0193 0810 00304 movf odometer_cn+1,W 0194 00BA 00305 movwf src2+1 0195 080F 00306 movf odometer_cn+0,W 0196 00B9 00307 movwf src2+0 0197 158B 00308 bsf INTCON,RBIE ; rb割込許可 0198 22EF 00309 call mul10_24 00310 0199 118B 00311 bcf INTCON,RBIE ; rb割込禁止 019A 0814 00312 movf fuel_cn+2,W 019B 00BB 00313 movwf src2+2 019C 0813 00314 movf fuel_cn+1,W 019D 00BA 00315 movwf src2+1 019E 0812 00316 movf fuel_cn+0,W 019F 00B9 00317 movwf src2+0 01A0 158B 00318 bsf INTCON,RBIE ; rb割込許可 01A1 236A 00319 call div24 00320 00321 ; 区間燃費表示 01A2 22CE 00322 call bin16tobcd 00323 01A3 1442 00324 bsf flag,0 01A4 228F 00325 call print_dec3 00326 ;movlw 'k' 00327 ;call write_lcd_data 00328 ;movlw 'm' 00329 ;call write_lcd_data 00330 ;movlw '/' 00331 ;call write_lcd_data 00332 ;movlw 'l' 00333 ;call write_lcd_data 01A5 0008 00334 return MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00335 00336 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00337 ; 区間燃費(信号間)表示 01A6 00338 futs_print 00339 ; 区間燃費計算 01A6 118B 00340 bcf INTCON,RBIE ; rb割込禁止 01A7 081E 00341 movf odometer_cn2+2,W 01A8 00BB 00342 movwf src2+2 01A9 081D 00343 movf odometer_cn2+1,W 01AA 00BA 00344 movwf src2+1 01AB 081C 00345 movf odometer_cn2+0,W 01AC 00B9 00346 movwf src2+0 01AD 158B 00347 bsf INTCON,RBIE ; rb割込許可 01AE 22EF 00348 call mul10_24 00349 01AF 118B 00350 bcf INTCON,RBIE ; rb割込禁止 01B0 0821 00351 movf fuel_cn2+2,W 01B1 00BB 00352 movwf src2+2 01B2 0820 00353 movf fuel_cn2+1,W 01B3 00BA 00354 movwf src2+1 01B4 081F 00355 movf fuel_cn2+0,W 01B5 00B9 00356 movwf src2+0 01B6 158B 00357 bsf INTCON,RBIE ; rb割込許可 01B7 236A 00358 call div24 00359 00360 ; 区間燃費表示 01B8 22CE 00361 call bin16tobcd 00362 01B9 1442 00363 bsf flag,0 01BA 228F 00364 call print_dec3 00365 ;movlw 'k' 00366 ;call write_lcd_data 00367 ;movlw 'm' 00368 ;call write_lcd_data 00369 ;movlw '/' 00370 ;call write_lcd_data 00371 ;movlw 'l' 00372 ;call write_lcd_data 01BB 0008 00373 return 00374 00375 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00376 ; 時間表示 01BC 00377 time_print 01BC 118B 00378 bcf INTCON,RBIE ; rb割込禁止 00379 01BD 080E 00380 movf timer_cn+2,W 01BE 00B8 00381 movwf src1+2 01BF 080D 00382 movf timer_cn+1,W 01C0 00B7 00383 movwf src1+1 01C1 080C 00384 movf timer_cn+0,W 01C2 00B6 00385 movwf src1+0 00386 01C3 158B 00387 bsf INTCON,RBIE ; rb割込許可 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00388 01C4 29CD 00389 goto time_print_1 00390 00391 ;;;;;;;;;;;;;;;;;;;;;; 00392 ; 時間(信号間)表示 01C5 00393 times_print 01C5 118B 00394 bcf INTCON,RBIE ; rb割込禁止 00395 01C6 081B 00396 movf timer_cn2+2,W 01C7 00B8 00397 movwf src1+2 01C8 081A 00398 movf timer_cn2+1,W 01C9 00B7 00399 movwf src1+1 01CA 0819 00400 movf timer_cn2+0,W 01CB 00B6 00401 movwf src1+0 00402 01CC 158B 00403 bsf INTCON,RBIE ; rb割込許可 00404 00405 ;goto time_print_1 00406 01CD 00407 time_print_1 00408 00409 ;movlw 0 01CD 01BB 00410 clrf src2+2 01CE 300E 00411 movlw TIMMINFACT_H ; 係数 01CF 00BA 00412 movwf src2+1 01D0 304E 00413 movlw TIMMINFACT_L ; 係数 01D1 00B9 00414 movwf src2+0 01D2 236A 00415 call div24 00416 01D3 22CE 00417 call bin16tobcd 00418 01D4 1042 00419 bcf flag,0 01D5 228F 00420 call print_dec3 00421 01D6 303A 00422 movlw ':' 01D7 229A 00423 call write_lcd_data 00424 00425 ; 余りから秒を計算! 01D8 0840 00426 movf mod+1,W 01D9 00B8 00427 movwf src1+2 01DA 083F 00428 movf mod+0,W 01DB 00B7 00429 movwf src1+1 00430 ;movlw 0 01DC 01B6 00431 clrf src1+0 00432 00433 ;movlw 0 01DD 01BB 00434 clrf src2+2 01DE 303D 00435 movlw TIMSECFACT_H ; 係数 01DF 00BA 00436 movwf src2+1 01E0 3009 00437 movlw TIMSECFACT_L ; 係数 01E1 00B9 00438 movwf src2+0 00439 01E2 236A 00440 call div24 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00441 01E3 22CE 00442 call bin16tobcd 00443 01E4 1042 00444 bcf flag,0 01E5 2291 00445 call print_dec2 ; 秒2桁表示 00446 01E6 0008 00447 return 00448 00449 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00450 ; 走行距離表示 (0000.00km) 01E7 00451 odd_print 01E7 118B 00452 bcf INTCON,RBIE ; rb割込禁止 00453 01E8 0811 00454 movf odometer_cn+2,W 01E9 00B8 00455 movwf src1+2 01EA 0810 00456 movf odometer_cn+1,W 01EB 00B7 00457 movwf src1+1 01EC 080F 00458 movf odometer_cn+0,W 01ED 00B6 00459 movwf src1+0 00460 01EE 158B 00461 bsf INTCON,RBIE ; rb割込許可 00462 01EF 29F8 00463 goto odd_print_1 00464 00465 ;;;;;;;;;;;;;;;;;;;;;; 00466 ; 走行距離(信号間)表示 (0000.00km) 01F0 00467 odds_print 01F0 118B 00468 bcf INTCON,RBIE ; rb割込禁止 00469 01F1 081E 00470 movf odometer_cn2+2,W 01F2 00B8 00471 movwf src1+2 01F3 081D 00472 movf odometer_cn2+1,W 01F4 00B7 00473 movwf src1+1 01F5 081C 00474 movf odometer_cn2+0,W 01F6 00B6 00475 movwf src1+0 00476 01F7 158B 00477 bsf INTCON,RBIE ; rb割込許可 00478 00479 ;goto odd_print_1 00480 01F8 00481 odd_print_1 00482 ;movlw 0 01F8 01BB 00483 clrf src2+2 01F9 3009 00484 movlw 0x9 ;637*4 = 2548 = 0x9f4 01FA 00BA 00485 movwf src2+1 01FB 30F4 00486 movlw 0xf4 ;637*4 = 2548 = 0x9f4 01FC 00B9 00487 movwf src2+0 00488 01FD 236A 00489 call div24 00490 01FE 22CE 00491 call bin16tobcd 00492 01FF 1042 00493 bcf flag,0 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0200 228F 00494 call print_dec3 ; まずは整数部3桁 00495 0201 302E 00496 movlw '.' 0202 229A 00497 call write_lcd_data 00498 00499 ; 余りから小数2桁を計算! 0203 0840 00500 movf mod+1,W 0204 00B8 00501 movwf src1+2 0205 083F 00502 movf mod+0,W 0206 00B7 00503 movwf src1+1 00504 ;movlw 0 0207 01B6 00505 clrf src1+0 00506 00507 ;movlw 0 0208 01BB 00508 clrf src2+2 0209 3019 00509 movlw 0x19 ;637*4*256/100=0x197b 020A 00BA 00510 movwf src2+1 020B 307B 00511 movlw 0x7b ;637*4*256/100=0x197b 020C 00B9 00512 movwf src2+0 00513 020D 236A 00514 call div24 00515 020E 22CE 00516 call bin16tobcd 00517 020F 1042 00518 bcf flag,0 0210 2291 00519 call print_dec2 ; 小数2桁表示 00520 00521 ;movlw 'k' 00522 ;call write_lcd_data 00523 ;movlw 'm' 00524 ;call write_lcd_data 00525 0211 0008 00526 return 00527 00528 00529 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00530 ; 平均速度表示 (000km) 00531 ; 00532 ; 平均速度 = 距離パルス数 ÷ 時間 × 86.235 00533 ; 距離パルス数 ÷ (時間 ÷ 86) 00534 ; 86.23491464=1/(0.637*4)*3600/64*1000/256 00535 00536 ; 小数第一位まで表示したいので・・・ 00537 ; 平均速度 = 距離パルス数 ÷ 時間 × 862.35 00538 00539 ; 2^24/862 = 19463 = 4C07h 00540 ; 距離が 4000h 未満までは 00541 ; 平均速度 = (距離パルス数 × 862)÷ 時間 00542 ; それ以降は 00543 ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) 00544 0212 00545 avgsp_print 00546 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 24 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0212 118B 00547 bcf INTCON,RBIE ; rb割込禁止 00548 0213 0811 00549 movf odometer_cn+2,W 0214 00B8 00550 movwf src1+2 0215 0810 00551 movf odometer_cn+1,W 0216 00B7 00552 movwf src1+1 0217 080F 00553 movf odometer_cn+0,W 0218 00B6 00554 movwf src1+0 00555 0219 158B 00556 bsf INTCON,RBIE ; rb割込許可 00557 00558 ; 862=35Eh 021A 01BB 00559 clrf src2+2 021B 3003 00560 movlw 3 021C 00BA 00561 movwf src2+1 021D 3052 00562 movlw 52 021E 00B9 00563 movwf src2+0 00564 021F 0838 00565 movf src1+2,W 0220 1D03 00566 btfss STATUS,Z 0221 2A26 00567 goto avgsp_pr_big 00568 0222 3040 00569 movlw 40 0223 0237 00570 subwf src1+1,0 0224 1C03 00571 btfss STATUS,C ;if(src1+1>=40) skip 0225 2A3A 00572 goto avgsp_pr_sml ;if(src1+1<40) goto sml 00573 0226 00574 avgsp_pr_big 00575 ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) 00576 0226 118B 00577 bcf INTCON,RBIE ; rb割込禁止 00578 0227 080E 00579 movf timer_cn+2,W 0228 00B8 00580 movwf src1+2 0229 080D 00581 movf timer_cn+1,W 022A 00B7 00582 movwf src1+1 022B 080C 00583 movf timer_cn+0,W 022C 00B6 00584 movwf src1+0 00585 022D 158B 00586 bsf INTCON,RBIE ; rb割込許可 00587 00588 ; src2 に 862 読み込み済み 00589 022E 236A 00590 call div24 00591 022F 2284 00592 call restosrc2 00593 0230 118B 00594 bcf INTCON,RBIE ; rb割込禁止 00595 0231 0811 00596 movf odometer_cn+2,W 0232 00B8 00597 movwf src1+2 0233 0810 00598 movf odometer_cn+1,W 0234 00B7 00599 movwf src1+1 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 25 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0235 080F 00600 movf odometer_cn+0,W 0236 00B6 00601 movwf src1+0 00602 0237 158B 00603 bsf INTCON,RBIE ; rb割込許可 00604 0238 236A 00605 call div24 00606 0239 2A79 00607 goto avgsp_pr_pr 00608 023A 00609 avgsp_pr_sml 00610 ; 平均速度 = (距離パルス数 × 862)÷ 時間 00611 ; src1 に odometer_cn 読み込み済み 00612 ; src2 に 862 読み込み済み 00613 023A 230F 00614 call mul161632 00615 023B 227D 00616 call restosrc1 00617 023C 118B 00618 bcf INTCON,RBIE ; rb割込禁止 00619 023D 080E 00620 movf timer_cn+2,W 023E 00BB 00621 movwf src2+2 023F 080D 00622 movf timer_cn+1,W 0240 00BA 00623 movwf src2+1 0241 080C 00624 movf timer_cn+0,W 0242 00B9 00625 movwf src2+0 00626 0243 158B 00627 bsf INTCON,RBIE ; rb割込許可 00628 0244 236A 00629 call div24 00630 0245 2A79 00631 goto avgsp_pr_pr 00632 00633 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00634 ; 平均速度(信号間)表示 (000km) 00635 ; 00636 ; 距離パルス数 ÷ 時間 × 86.235 = 平均速度 00637 ; 距離パルス数 ÷ (時間 ÷ 86) 00638 ; 86.23491464=1/(0.637*4)*3600/64*1000/256 0246 00639 avgsps_print 00640 0246 118B 00641 bcf INTCON,RBIE ; rb割込禁止 00642 0247 081E 00643 movf odometer_cn2+2,W 0248 00B8 00644 movwf src1+2 0249 081D 00645 movf odometer_cn2+1,W 024A 00B7 00646 movwf src1+1 024B 081C 00647 movf odometer_cn2+0,W 024C 00B6 00648 movwf src1+0 00649 024D 158B 00650 bsf INTCON,RBIE ; rb割込許可 00651 00652 ; 862=35Eh MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 26 LOC OBJECT CODE LINE SOURCE TEXT VALUE 024E 01BB 00653 clrf src2+2 024F 3003 00654 movlw 3 0250 00BA 00655 movwf src2+1 0251 3052 00656 movlw 52 0252 00B9 00657 movwf src2+0 00658 0253 0838 00659 movf src1+2,W 0254 1D03 00660 btfss STATUS,Z 0255 2A5A 00661 goto avgsps_pr_big 00662 0256 3040 00663 movlw 40 0257 0237 00664 subwf src1+1,0 0258 1C03 00665 btfss STATUS,C ;if(src1+1>=40) skip 0259 2A6E 00666 goto avgsps_pr_sml ;if(src1+1<40) goto sml 00667 025A 00668 avgsps_pr_big 00669 ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) 00670 025A 118B 00671 bcf INTCON,RBIE ; rb割込禁止 00672 025B 081B 00673 movf timer_cn2+2,W 025C 00B8 00674 movwf src1+2 025D 081A 00675 movf timer_cn2+1,W 025E 00B7 00676 movwf src1+1 025F 0819 00677 movf timer_cn2+0,W 0260 00B6 00678 movwf src1+0 00679 0261 158B 00680 bsf INTCON,RBIE ; rb割込許可 00681 00682 ; src2 に 862 読み込み済み 00683 0262 236A 00684 call div24 00685 0263 2284 00686 call restosrc2 00687 0264 118B 00688 bcf INTCON,RBIE ; rb割込禁止 00689 0265 081E 00690 movf odometer_cn2+2,W 0266 00B8 00691 movwf src1+2 0267 081D 00692 movf odometer_cn2+1,W 0268 00B7 00693 movwf src1+1 0269 081C 00694 movf odometer_cn2+0,W 026A 00B6 00695 movwf src1+0 00696 026B 158B 00697 bsf INTCON,RBIE ; rb割込許可 00698 026C 236A 00699 call div24 00700 026D 2A79 00701 goto avgsp_pr_pr 00702 026E 00703 avgsps_pr_sml 00704 ; 平均速度 = (距離パルス数 × 862)÷ 時間 00705 ; src1 に odometer_cn 読み込み済み MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 27 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00706 ; src2 に 862 読み込み済み 00707 00708 026E 230F 00709 call mul161632 00710 026F 227D 00711 call restosrc1 00712 0270 118B 00713 bcf INTCON,RBIE ; rb割込禁止 00714 0271 081B 00715 movf timer_cn2+2,W 0272 00BB 00716 movwf src2+2 0273 081A 00717 movf timer_cn2+1,W 0274 00BA 00718 movwf src2+1 0275 0819 00719 movf timer_cn2+0,W 0276 00B9 00720 movwf src2+0 00721 0277 158B 00722 bsf INTCON,RBIE ; rb割込許可 00723 0278 236A 00724 call div24 00725 00726 ;goto avgsp_pr_pr 00727 0279 00728 avgsp_pr_pr 0279 22CE 00729 call bin16tobcd 00730 027A 1442 00731 bsf flag,0 027B 228D 00732 call print_dec4 00733 027C 0008 00734 return 00735 027D 00736 restosrc1 027D 083E 00737 movf result+2,W 027E 00B8 00738 movwf src1+2 027F 083D 00739 movf result+1,W 0280 00B7 00740 movwf src1+1 0281 083C 00741 movf result+0,W 0282 00B6 00742 movwf src1+0 0283 0008 00743 return 00744 0284 00745 restosrc2 0284 083E 00746 movf result+2,W 0285 00BB 00747 movwf src2+2 0286 083D 00748 movf result+1,W 0287 00BA 00749 movwf src2+1 0288 083C 00750 movf result+0,W 0289 00B9 00751 movwf src2+0 028A 0008 00752 return 00753 00754 00755 ;■ デバッグ系 --> 00756 ;;;;;;include "debugprint.asm" 00757 ;■ デバッグ系 <-- 00098 include "lcd.asm" MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 28 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; ------------------------------------------------------------------- 00002 ; dec をLCDに表示 00003 ; 呼び出しアドレスにより、適当な桁から表示できま。 00004 ; flag,0 を立てておくと、固定小数点(10倍)だとして表示します。 00005 ; ------------------------------------------------------------------- 028B 00006 print_dec5 028B 0843 00007 movf dec+0,W 028C 229A 00008 call write_lcd_data 028D 00009 print_dec4 028D 0844 00010 movf dec+1,W 028E 229A 00011 call write_lcd_data 028F 00012 print_dec3 028F 0845 00013 movf dec+2,W 0290 229A 00014 call write_lcd_data 0291 00015 print_dec2 0291 0846 00016 movf dec+3,W 0292 229A 00017 call write_lcd_data 00018 00019 ; 小数点表示 0293 1C42 00020 btfss flag,0 0294 2A97 00021 goto print_dec1 0295 302E 00022 movlw '.' 0296 229A 00023 call write_lcd_data 0297 00024 print_dec1 0297 0847 00025 movf dec+4,W 0298 229A 00026 call write_lcd_data 00027 0299 0008 00028 return 00029 00030 ; ------------------------------------------------------------------- 00031 ; 液晶ライト 00032 ; IN W キャラクタ or コマンド 00033 ; 破壊 lcd_data_temp 00034 ; ------------------------------------------------------------------- 029A 00035 write_lcd_data 029A 00B5 00036 movwf lcd_data_temp 029B 0E35 00037 swapf lcd_data_temp,W ; まず上位データを 029C 22A1 00038 call write_lcd_raw ; 出力 00039 029D 0835 00040 movf lcd_data_temp,W ; 次に下位データを 029E 22A1 00041 call write_lcd_raw ; 出力 029F 0835 00042 movf lcd_data_temp,W ; 連続表示に備えて。 02A0 0008 00043 return 00044 00045 ; ------------------------------------------------------------------- 00046 ; 液晶ライト(生) 00047 ; IN W キャラクタ or コマンド 00048 ; 破壊 W 00049 ; ------------------------------------------------------------------- 02A1 00050 write_lcd_raw 00051 ;bsf LED_COM ; LED コモン 消灯 (「ますく」で代用) 02A1 390F 00052 andlw B'00001111' ; ますく 02A2 3810 00053 iorlw B'00010000' ; ますく MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 29 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02A3 0085 00054 movwf PORTA ; RAポートへ出力 02A4 0000 00055 nop ; ちょこっとwait 02A5 1506 00056 bsf E ; Eピンを'H' 02A6 0000 00057 nop ; ちょこっとLOVE 02A7 1106 00058 bcf E ; Eピンを'L' 02A8 0000 00059 nop ; ぷっち以下略 00060 02A9 0832 00061 movf ra_save,W ; RA の出力を元に戻す 02AA 0085 00062 movwf PORTA 00063 02AB 3028 00064 movlw D'40' ; wait 02AC 00C8 00065 movwf calc_cn 00066 02AD 1205 00067 bcf LED_COM ; LED コモン 点灯 00068 02AE 23D4 00069 call wait_us 00070 02AF 0008 00071 return 00072 00073 00099 include "init_lcd.asm" 00001 ; ------------------------------------------------------------------- 00002 ; 液晶初期化 00003 ; ------------------------------------------------------------------- 02B0 00004 init_lcd 00005 ;movlw D'15' 02B0 3064 00006 movlw D'100' ; 寒いと失敗するので伸ばしてみた。人間には検知できない時間だと思われ。 02B1 00C8 00007 movwf calc_cn ; wait 15ms 02B2 23C7 00008 call wait_ms 00009 02B3 1086 00010 bcf RS ; RS='L' 02B4 3003 00011 movlw B'00000011' 02B5 22A1 00012 call write_lcd_raw 02B6 3005 00013 movlw D'5' 02B7 00C8 00014 movwf calc_cn ; wait 4.1ms 02B8 23C7 00015 call wait_ms 00016 02B9 3003 00017 movlw B'00000011' 02BA 22A1 00018 call write_lcd_raw 02BB 3064 00019 movlw D'100' 02BC 00C8 00020 movwf calc_cn ; wait 100us 02BD 23D4 00021 call wait_us 00022 02BE 3000 00023 movlw B'00000000' 02BF 22A1 00024 call write_lcd_raw 00025 02C0 3002 00026 movlw B'00000010' 02C1 22A1 00027 call write_lcd_raw ; 0 0 0010 (4bit) 00028 02C2 3028 00029 movlw B'00101000' ; duty,font set9 02C3 229A 00030 call write_lcd_data 00031 02C4 3001 00032 movlw B'00000001' ; クリアコマンド MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 30 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02C5 229A 00033 call write_lcd_data 02C6 3002 00034 movlw D'2' 02C7 00C8 00035 movwf calc_cn 02C8 23C7 00036 call wait_ms 00037 02C9 3006 00038 movlw B'00000110' ; entry mode set 02CA 229A 00039 call write_lcd_data 00040 02CB 300C 00041 movlw B'00001100' ; display on,cursor off 02CC 229A 00042 call write_lcd_data 00043 02CD 0008 00044 return 00100 include "math.asm" 00001 00002 ; ------------------------------------------------------------------- 00003 ; 16ビットバイナリ→10進変換サブルーチン 00004 ; 1997 by M.Ochiai 00005 ; ------------------------------------------------------------------- 00006 ; in src1 16ビットデータ 00007 ; (src1+1:src1+0) 00008 ; out dec 00009 ; (dec+4:dec+3:...:dec+0) 00010 ; dec+0が最下位桁でdec+4が最上位桁です。 00011 ; 00012 ; 変換後src1は破壊されます。(必要なら、コールする前に待避して下さい) 00013 ; 00014 ; sample: 00015 ; src1 = 00:00:04:D2 h 00016 ; dec = 00:00:00:00:00:00:01:02:03:04 00017 02CE 00018 bin16tobcd 02CE 3048 00019 movlw dec_top ; 格納場所初期値 02CF 0084 00020 movwf FSR 02D0 22DC 00021 call devideby10 ; 最下位変換 02D1 22DC 00022 call devideby10 02D2 22DC 00023 call devideby10 02D3 22DC 00024 call devideby10 02D4 22DC 00025 call devideby10 ; 最上位変換 00026 02D5 3030 00027 movlw '0' 02D6 07C3 00028 addwf dec+0,F 02D7 07C4 00029 addwf dec+1,F 02D8 07C5 00030 addwf dec+2,F 02D9 07C6 00031 addwf dec+3,F 02DA 07C7 00032 addwf dec+4,F 00033 02DB 0008 00034 return 00035 00036 ; 00037 ; ÷10サブルーチン 00038 ; 10で除算します 00039 ; 02DC 00040 devideby10 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 31 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02DC 3010 00041 movlw D'16' ; 16ビットくり返し 02DD 00C8 00042 movwf calc_cn 00043 02DE 01BE 00044 clrf result+2 02DF 00045 devideby10_0 02DF 1003 00046 bcf STATUS,C 02E0 0DBC 00047 rlf result+0,F 02E1 0DBD 00048 rlf result+1,F 02E2 0DBE 00049 rlf result+2,F 00050 02E3 300A 00051 movlw D'10' 02E4 023E 00052 subwf result+2,W 02E5 1803 00053 btfsc STATUS,C 02E6 00BE 00054 movwf result+2 02E7 1803 00055 btfsc STATUS,C 02E8 0ABC 00056 incf result+0,F 00057 02E9 0BC8 00058 decfsz calc_cn,F 02EA 2ADF 00059 goto devideby10_0 00060 02EB 0384 00061 decf FSR,F 02EC 083E 00062 movf result+2,W ; 余り 02ED 0080 00063 movwf INDF 02EE 0008 00064 return 00065 00066 ;--------------------------------------------------------------------- 02EF 00067 mul10_24 00068 ; 24bit 10倍ルーチン 00069 ; 呼び出し側の都合により、src2 が入力で、src1 が出力です。 00070 02EF 083B 00071 movf src2+2,W 02F0 00B8 00072 movwf src1+2 02F1 083A 00073 movf src2+1,W 02F2 00B7 00074 movwf src1+1 02F3 0839 00075 movf src2+0,W ; src2 => src1 02F4 00B6 00076 movwf src1+0 00077 02F5 1003 00078 bcf STATUS,C ; src1 を 2倍 02F6 0DB6 00079 rlf src1+0,F 02F7 0DB7 00080 rlf src1+1,F 02F8 0DB8 00081 rlf src1+2,F 00082 02F9 1003 00083 bcf STATUS,C ; src1 を さらに2倍 で4倍 02FA 0DB6 00084 rlf src1+0,F 02FB 0DB7 00085 rlf src1+1,F 02FC 0DB8 00086 rlf src1+2,F 00087 00088 ; src1 に src2 を足して 5倍 02FD 0839 00089 movf src2+0,W ;下位バイトの加算 02FE 07B6 00090 addwf src1+0,F 02FF 3001 00091 movlw 1 0300 1803 00092 btfsc STATUS,C 0301 07B7 00093 addwf src1+1,F MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 32 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0302 1803 00094 btfsc STATUS,C 0303 07B8 00095 addwf src1+2,F 00096 0304 083A 00097 movf src2+1,W ;中位バイトの加算 0305 07B7 00098 addwf src1+1,F 0306 1803 00099 btfsc STATUS,C 0307 0AB8 00100 incf src1+2,F 00101 0308 083B 00102 movf src2+2,W ;上位バイトの加算 0309 07B8 00103 addwf src1+2,F 00104 030A 1003 00105 bcf STATUS,C ; src1 を さらに2倍 で10倍 030B 0DB6 00106 rlf src1+0,F 030C 0DB7 00107 rlf src1+1,F 030D 0DB8 00108 rlf src1+2,F 00109 030E 0008 00110 return 00111 00112 ;********************************************************************* 00113 ;--------------------------------------------------------------------- 00114 030F 00115 mul161632 ;16×16ビット=32ビットの乗算 00116 ;参考 http://www.sikasenbey.or.jp/~enaga/pic/mul1322.txt 00117 ;被乗数、乗数とも保存される 00118 ;ルーチン名 : mul161632 00119 00120 ;-------------------- mul161632 での使用変数 00121 00122 ;src1 2 ;被乗数 (変化せず戻る) 00123 ;src2 2 ;乗数 (変化せず戻る) 00124 ;result 4 ;答え  (答えが返る)(1バイト分 mod を借りていることに注意) 00125 ;calc_cn 1 ;内部ループ用 00126 ;diverr 1 ;割る数が0であった場合に1をセットして戻る 00127 00128 ;-------------------- mul161632 の主ルーチン 00129 030F 0839 00130 movf src2+0,W ;乗数を答え下位(ワーク)にコピーする 0310 00BC 00131 movwf result+0 0311 083A 00132 movf src2+1,W 0312 00BD 00133 movwf result+1 00134 0313 01BE 00135 clrf result+2 ;答用変数をクリアしておく 0314 01BF 00136 clrf result+3 ;〃 00137 0315 3010 00138 movlw 10h ;10h=16 0316 00C8 00139 movwf calc_cn ;calc_cn に 16 を代入 0317 00140 mul161632_1 0317 1003 00141 bcf 3,0 ;キャリフラグのクリア 0318 1C3C 00142 btfss result+0,0 ;最下位ビットが 0 なら 0319 2B20 00143 goto mul161632_2 ; →足さない 031A 0836 00144 movf src1+0,w ;src1(下位) を w にコピー 031B 07BE 00145 addwf result+2,1 ;答(下位)に加える 031C 1803 00146 btfsc 3,0 ;キャリフラグが 0 なら次の命令をスキップ MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 33 LOC OBJECT CODE LINE SOURCE TEXT VALUE 031D 0ABF 00147 incf result+3,1 ;繰り上がりの処理 00148 031E 0837 00149 movf src1+1,0 ;src1(上位) を w にコピー 031F 07BF 00150 addwf result+3,1 ;答に加える(キャリフラグが次のシフトに必要) 00151 0320 00152 mul161632_2 0320 0CBF 00153 rrf result+3,1 ;答を1ビット右に送る(被乗数を倍する) 0321 0CBE 00154 rrf result+2,1 ; 〜 0322 0CBD 00155 rrf result+1,1 ; 〜 0323 0CBC 00156 rrf result+0,1 ; 〜 下位 00157 0324 0BC8 00158 decfsz calc_cn,1 ;ビット数分の繰り返し 0325 2B17 00159 goto mul161632_1 00160 0326 0008 00161 return 00162 00163 ;--------------------------------------------------------------------- 00164 ;********************************************************************* 00165 00166 00167 ;********************************************************************* 00168 ;--------------------------------------------------------------------- 00169 0327 00170 div16 ;16ビットの割り算ルーチン 00171 ;参考 http://www.sikasenbey.or.jp/~enaga/pic/pic.html 00172 00173 ;-------------------- div16 での使用変数 00174 00175 ;src1 2 ;割られる数 (終了時には0になって戻る) 00176 ;src2 2 ;割る数 (変化せず戻る) 00177 ;result 2 ;答え    (答えが返る) 00178 ;mod 2 ;余り    (余りが返る、内部ワークにも使用) 00179 ;calc_cn 1 ;内部ループ用 00180 ;calc_cn2 1 ;内部ループ用 00181 ;diverr 1 ;割る数が0であった場合に1をセットして戻る 00182 00183 ;-------------------- 主ルーチン 00184 0327 3010 00185 movlw D'16' 0328 00C8 00186 movwf calc_cn 0329 0839 00187 movf src2+0,W ;割る数下位をワークにコピー 032A 00BF 00188 movwf mod+0 032B 083A 00189 movf src2+1,W ;割る数上位をワークにコピー 032C 00C0 00190 movwf mod+1 032D 01BC 00191 clrf result+0 ;答え用変数のクリア 032E 01BD 00192 clrf result+1 032F 1003 00193 bcf STATUS,C 0330 00194 di1601 0330 0DBF 00195 rlf mod+0,F ;左シフトする 0331 0DC0 00196 rlf mod+1,F 0332 1803 00197 btfsc STATUS,C ;キャリフラグを見る 0333 2B3A 00198 goto di1602 ;割る数の上位ビット位置検索 0334 0BC8 00199 decfsz calc_cn,F MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 34 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0335 2B30 00200 goto di1601 0336 15C2 00201 bsf flag,3 ;割る数が0である。エラーコードをセット 0337 01BF 00202 clrf mod+0 ;ワーク用変数のクリア 0338 01C0 00203 clrf mod+1 0339 0008 00204 return ;戻る 033A 00205 di1602 033A 01BF 00206 clrf mod+0 ;ワーク用変数のクリア 033B 01C0 00207 clrf mod+1 033C 3010 00208 movlw D'16' 033D 00C9 00209 movwf calc_cn2 033E 0848 00210 movf calc_cn,W 033F 02C9 00211 subwf calc_cn2,F ;残り、実ループの回数 0340 00212 di1603 0340 1003 00213 bcf STATUS,C ;キャリフラグを0に 0341 0DB6 00214 rlf src1+0,F 0342 0DB7 00215 rlf src1+1,F 0343 0DBF 00216 rlf mod+0,F 0344 0DC0 00217 rlf mod+1,F 0345 0BC8 00218 decfsz calc_cn,F ;割られる数を初期位置までシフト 0346 2B40 00219 goto di1603 0347 00220 di1604 ;現位置での減算が可能かチェック 0347 083A 00221 movf src2+1,W 0348 0240 00222 subwf mod+1,W 0349 1C03 00223 btfss STATUS,C 034A 2B5B 00224 goto di1606 034B 0840 00225 movf mod+1,W 034C 023A 00226 subwf src2+1,W 034D 1C03 00227 btfss STATUS,C 034E 2B53 00228 goto di1605 034F 0839 00229 movf src2+0,W 0350 023F 00230 subwf mod+0,W 0351 1C03 00231 btfss STATUS,C 0352 2B5B 00232 goto di1606 0353 00233 di1605 0353 0839 00234 movf src2+0,W 0354 02BF 00235 subwf mod+0,F ;ワークから下位を引く 0355 1C03 00236 btfss STATUS,C ;キャリフラグが 1(正)なら次をスキップ 0356 03C0 00237 decf mod+1,F ;上位 -1 0357 083A 00238 movf src2+1,W 0358 02C0 00239 subwf mod+1,F ;ワークから上位を引く 0359 1403 00240 bsf STATUS,C ;キャリフラグを1に 035A 2B5C 00241 goto di1607 035B 00242 di1606 035B 1003 00243 bcf STATUS,C ;キャリフラグを0に 035C 00244 di1607 035C 0DBC 00245 rlf result+0,F ;キャリフラグの内容を答えにシフト 035D 0DBD 00246 rlf result+1,F 035E 08C9 00247 movf calc_cn2,F ;calc_cn2 が 0 か検査 035F 1903 00248 btfsc STATUS,Z 0360 2B68 00249 goto di1608 ;最下位まで処理したなら終了 0361 03C9 00250 decf calc_cn2,F ;ビット位置を1つ下げる(右へ) 0362 1003 00251 bcf STATUS,C ;キャリフラグを0に 0363 0DB6 00252 rlf src1+0,F ;ワークへ1ビット左シフト MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 35 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0364 0DB7 00253 rlf src1+1,F 0365 0DBF 00254 rlf mod+0,F 0366 0DC0 00255 rlf mod+1,F 0367 2B47 00256 goto di1604 0368 00257 di1608 0368 11C2 00258 bcf flag,3 ;正常終了 00259 0369 0008 00260 return 00261 00262 ;--------------------------------------------------------------------- 00263 00264 ;********************************************************************* 00265 ;--------------------------------------------------------------------- 00266 036A 00267 div24 ;24÷24ビット=24ビットの割り算ルーチン 00268 ;秋月 PA (PICアセンブラ) 用 00269 ;src1+3 ÷ src1+3 = 結果 result+3 余り mod+3 00270 ;演算後、式の左項(割られる数)は壊れる 00271 ;割る数が0(エラー)なら diverr に1を代入して戻る 00272 ;エラーの場合、引き数は変化しない 00273 ;正常終了の場合は diverr=0 で戻る 00274 ;24ビットで扱える数の最大は 16777216 (1677万7216) 00275 00276 ;-------------------- div24 での使用変数 00277 00278 ;src1 ds 3 ;割られる数 (終了時には0になって戻る) 00279 ;src2 ds 3 ;割る数 (変化せず戻る) 00280 ;result ds 3 ;答え    (答えが返る) 00281 ;mod ds 3 ;余り    (余りが返る、内部ワークにも使用) 00282 ;calc_cn ds 1 ;内部ループ用 00283 ;calc_cn2 ds 1 ;内部ループ用 00284 ;diverr ds 1 ;割る数が0であった場合に1をセットして戻る 00285 00286 ;-------------------- 主ルーチン 00287 036A 3018 00288 movlw D'24' 036B 00C8 00289 movwf calc_cn 036C 0839 00290 movf src2+0,W ;割る数をワークにコピー 036D 00BF 00291 movwf mod+0 036E 083A 00292 movf src2+1,W 036F 00C0 00293 movwf mod+1 0370 083B 00294 movf src2+2,W 0371 00C1 00295 movwf mod+2 0372 1003 00296 bcf STATUS,C 0373 01BC 00297 clrf result+0 ;答えのクリア 0374 01BD 00298 clrf result+1 0375 01BE 00299 clrf result+2 0376 00300 di2401 0376 0DBF 00301 rlf mod+0,F ;左シフトする 0377 0DC0 00302 rlf mod+1,F 0378 0DC1 00303 rlf mod+2,F 0379 1803 00304 btfsc STATUS,C 037A 2B82 00305 goto di2402 ;割る数の上位ビットが見付かったなら di3202 へ MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 36 LOC OBJECT CODE LINE SOURCE TEXT VALUE 037B 0BC8 00306 decfsz calc_cn,F 037C 2B76 00307 goto di2401 037D 15C2 00308 bsf flag,3 ;割る数が0である、エラーコードをセット 037E 01BF 00309 clrf mod+0 ;ワークのクリア(ワークには余りが残る) 037F 01C0 00310 clrf mod+1 0380 01C1 00311 clrf mod+2 0381 0008 00312 return ;戻る 0382 00313 di2402 0382 01BF 00314 clrf mod+0 ;ワークのクリア(ワークには余りが残る) 0383 01C0 00315 clrf mod+1 0384 01C1 00316 clrf mod+2 0385 3018 00317 movlw D'24' 0386 00C9 00318 movwf calc_cn2 0387 0848 00319 movf calc_cn,W 0388 02C9 00320 subwf calc_cn2,F ;残り、実ループの回数 0389 00321 di2403 0389 1003 00322 bcf STATUS,C ;キャリフラグを0に 038A 0DB6 00323 rlf src1+0,F ;有効位置までシフトする 038B 0DB7 00324 rlf src1+1,F 038C 0DB8 00325 rlf src1+2,F 038D 0DBF 00326 rlf mod+0,F ;押し出されたビットをワークに 038E 0DC0 00327 rlf mod+1,F 038F 0DC1 00328 rlf mod+2,F 0390 0BC8 00329 decfsz calc_cn,F ;割られる数を初期位置までシフト 0391 2B89 00330 goto di2403 0392 00331 di2404 0392 083B 00332 movf src2+2,W 0393 0241 00333 subwf mod+2,W 0394 1903 00334 btfsc STATUS,Z 0395 2B99 00335 goto di2406 0396 1803 00336 btfsc STATUS,C 0397 2BA6 00337 goto di2410 00338 ;btfss STATUS,C 0398 2BB5 00339 goto di2411 0399 00340 di2406 0399 083A 00341 movf src2+1,0 039A 0240 00342 subwf mod+1,0 039B 1903 00343 btfsc STATUS,Z 039C 2BA0 00344 goto di2407 039D 1803 00345 btfsc STATUS,C 039E 2BA6 00346 goto di2410 00347 ;btfss STATUS,C 039F 2BB5 00348 goto di2411 03A0 00349 di2407 03A0 0839 00350 movf src2+0,W 03A1 023F 00351 subwf mod+0,W 03A2 1903 00352 btfsc STATUS,Z 03A3 2BA6 00353 goto di2410 03A4 1C03 00354 btfss STATUS,C 03A5 2BB5 00355 goto di2411 03A6 00356 di2410 03A6 0839 00357 movf src2+0,W 03A7 02BF 00358 subwf mod+0,F ;ワークから下位を引く MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 37 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03A8 3001 00359 movlw 1 ;ワークには余りが残る 03A9 1C03 00360 btfss STATUS,C 03AA 02C0 00361 subwf mod+1,F 03AB 1C03 00362 btfss STATUS,C 03AC 02C1 00363 subwf mod+2,F 03AD 083A 00364 movf src2+1,W 03AE 02C0 00365 subwf mod+1,F ;ワークから2位を引く 03AF 1C03 00366 btfss STATUS,C 03B0 03C1 00367 decf mod+2,F ;上位 -1 03B1 083B 00368 movf src2+2,W 03B2 02C1 00369 subwf mod+2,F ;ワークから上位を引く 03B3 1403 00370 bsf STATUS,C ;キャリフラグを1に 03B4 2BB6 00371 goto di2412 00372 03B5 00373 di2411 03B5 1003 00374 bcf STATUS,C ;キャリフラグを0に 03B6 00375 di2412 03B6 0DBC 00376 rlf result+0,F ;キャリフラグの内容を答えにシフトしてゆく 03B7 0DBD 00377 rlf result+1,F 03B8 0DBE 00378 rlf result+2,F 03B9 08C9 00379 movf calc_cn2,F ;calc_cn2 が 0 か検査 03BA 1903 00380 btfsc STATUS,Z 03BB 2BC5 00381 goto di2413 ;最下位まで処理したなら終了 03BC 03C9 00382 decf calc_cn2,F ;ビット位置を1つ下げる(右へ) 03BD 1003 00383 bcf STATUS,C ;キャリフラグを0に 03BE 0DB6 00384 rlf src1+0,F ;ワークへ1ビット左シフト 03BF 0DB7 00385 rlf src1+1,F 03C0 0DB8 00386 rlf src1+2,F 03C1 0DBF 00387 rlf mod+0,F 03C2 0DC0 00388 rlf mod+1,F 03C3 0DC1 00389 rlf mod+2,F 03C4 2B92 00390 goto di2404 03C5 00391 di2413 03C5 11C2 00392 bcf flag,3 ;正常終了 03C6 0008 00393 return 00394 ;--------------------------------------------------------------------- 00395 ;********************************************************************* 00101 include "pic.asm" 00001 00002 ; //////////////////////////////////////////////////////////////////// 00003 ; //////////////////////////////////////////////////////////////////// 00004 ; msオーダーのウェイト 00005 ; //////////////////////////////////////////////////////////////////// 03C7 00006 wait_ms 03C7 00007 wait_ms0 03C7 01C9 00008 clrf calc_cn2 03C8 00009 wait_ms1 03C8 0000 00010 nop 03C9 0000 00011 nop 03CA 0000 00012 nop 03CB 0000 00013 nop 03CC 0000 00014 nop 03CD 0000 00015 nop MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 38 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03CE 0000 00016 nop 03CF 0BC9 00017 decfsz calc_cn2,F 03D0 2BC8 00018 goto wait_ms1 03D1 0BC8 00019 decfsz calc_cn,F 03D2 2BC7 00020 goto wait_ms0 03D3 0008 00021 return 00022 00023 ; //////////////////////////////////////////////////////////////////// 00024 ; μsオーダーのウェイト 00025 ; //////////////////////////////////////////////////////////////////// 03D4 00026 wait_us 03D4 00027 wait_us0 03D4 0BC8 00028 decfsz calc_cn,F 03D5 2BD4 00029 goto wait_us0 03D6 0008 00030 return 00031 00102 00103 00104 end MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 39 SYMBOL TABLE LABEL VALUE C 00000000 DC 00000001 E PORTB,2 EEADR 00000009 EECON1 00000088 EECON2 00000089 EEDATA 00000008 EEIE 00000006 EEIF 00000004 F 00000001 FSR 00000004 FUELFACT_H 0x05 FUELFACT_L 0x40 FUELFACT_M 0x9d FUEL_FC_FLOW_MAX D'150' FUEL_ST_FLOW_MAX D'254' GIE 00000007 INDF 00000000 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IRP 00000007 LED_COM PORTA,4 NOT_PD 00000003 NOT_RBPU 00000007 NOT_TO 00000004 OPTION_REG 00000081 PCL 00000002 PCLATH 0000000A PORTA 00000005 PORTB 00000006 PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 RBIE 00000003 RBIF 00000000 RD 00000000 RESET_FLOW_MAX 0x0d RP0 00000005 RP1 00000006 RS PORTB,1 SPEEDFACT_H 0x56 SPEEDFACT_L 0x82 SPEED_FLOW_MAX D'160' STATUS 00000003 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 TIMMINFACT_H 0x0e TIMMINFACT_L 0x4e MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 40 SYMBOL TABLE LABEL VALUE TIMSECFACT_H 0x3d TIMSECFACT_L 0x09 TMR0 00000001 TRISA 00000085 TRISB 00000086 W 00000000 WR 00000001 WREN 00000002 WRERR 00000003 Z 00000002 _CP_OFF 00003FFF _CP_ON 0000000F _HS_OSC 00003FFE _LP_OSC 00003FFC _PWRTE_OFF 00003FFF _PWRTE_ON 00003FF7 _RC_OSC 00003FFF _WDT_OFF 00003FFB _WDT_ON 00003FFF _XT_OSC 00003FFD __16F84 00000001 avgsp_pr_big 00000226 avgsp_pr_pr 00000279 avgsp_pr_sml 0000023A avgsp_print 00000212 avgsps_pr_big 0000025A avgsps_pr_sml 0000026E avgsps_print 00000246 bin16tobcd 000002CE calc_cn 00000048 calc_cn2 00000049 calccalc 0000008F cn2_reset 0000004C dec 00000043 dec_top 00000048 devideby10 000002DC devideby10_0 000002DF di1601 00000330 di1602 0000033A di1603 00000340 di1604 00000347 di1605 00000353 di1606 0000035B di1607 0000035C di1608 00000368 di2401 00000376 di2402 00000382 di2403 00000389 di2404 00000392 di2406 00000399 di2407 000003A0 di2410 000003A6 di2411 000003B5 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 41 SYMBOL TABLE LABEL VALUE di2412 000003B6 di2413 000003C5 div16 00000327 div24 0000036A flag 00000042 fu_print 00000159 fu_print_ccpmin 0000016E fu_print_e 0000018F fu_print_fc 0000017E fu_print_stop 00000189 fu_print_time 00000150 fuel_cn 00000012 fuel_cn2 0000001F fuel_flow 0000002F fuel_tm 0000002D fuel_tm_la 00000029 fuel_tm_lb 0000002B fut_print 00000190 futs_print 000001A6 init_lcd 000002B0 init_pic 00000079 int_rb6 00000034 int_rb7 00000059 int_rb7_1 00000065 int_t0if_1 00000018 interrupt 00000004 lcd_data_temp 00000035 loop1 000000AA loop2 000000AC mainloop 0000008F mod 0000003F mode 0000004A mul10_24 000002EF mul161632 0000030F mul161632_1 00000317 mul161632_2 00000320 ndn_cn 00000017 ndr_cn 00000015 odd_print 000001E7 odd_print_1 000001F8 odds_print 000001F0 odometer_cn 0000000F odometer_cn2 0000001C print 000000F8 print_1 00000103 print_2 0000010D print_dec1 00000297 print_dec2 00000291 print_dec3 0000028F print_dec4 0000028D print_dec5 0000028B ra_save 00000032 ram 0000004B MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 42 SYMBOL TABLE LABEL VALUE ram_init_loop1 00000082 ram_init_loop2 00000086 rb_now 00000033 rb_save 00000034 rb_temp 00000034 reset_flow_check_1 000000E7 reset_flow_check_end 000000F0 restosrc1 0000027D restosrc2 00000284 result 0000003C skip_rb0 00000021 skip_rb4 0000002D skip_rb5 00000032 skip_rb6 00000057 skip_rb7 0000006F skip_rbif 00000071 skip_t0if 0000001F sleep_loop 000000C2 sp_print_0 00000149 sp_print_e 0000014F speed_flow 00000028 speed_print 00000138 speed_tm 00000026 speed_tm_la 00000022 speed_tm_lb 00000024 src1 00000036 src2 00000039 start 00000079 status_save 00000031 stopcheck_end 000000F7 time_print 000001BC time_print_1 000001CD timer_cn 0000000C timer_cn2 00000019 times_print 000001C5 w_save 00000030 wait_ms 000003C7 wait_ms0 000003C7 wait_ms1 000003C8 wait_us 000003D4 wait_us0 000003D4 write_lcd_data 0000029A write_lcd_raw 000002A1 MPASM 03.00 Released FITMETER.ASM 1-13-2003 6:00:48 PAGE 43 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 03C0 : XXXXXXXXXXXXXXXX XXXXXXX--------- ---------------- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 983 Program Memory Words Free: 41 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 0 suppressed