MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 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 5:23:17 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 5:23:17 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 5:23:17 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 5:23:17 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 5:23:17 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 5:23:17 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 5:23:17 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 5:23:17 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 5:23:17 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 22C8 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 5:23:17 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 5:23:17 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 5:23:17 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 22C8 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 5:23:17 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 22B2 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 215D 00031 call fu_print ; 瞬間燃費表示 00032 00FF 3020 00033 movlw ' ' 0100 22B2 00034 call write_lcd_data 0101 22B2 00035 call write_lcd_data 0102 290D 00036 goto print_2 00037 0103 00038 print_1 ; ON なら prev 表示 0103 3070 00039 movlw 'p' 0104 22B2 00040 call write_lcd_data 0105 3072 00041 movlw 'r' 0106 22B2 00042 call write_lcd_data 0107 3065 00043 movlw 'e' 0108 22B2 00044 call write_lcd_data 0109 3076 00045 movlw 'v' 010A 22B2 00046 call write_lcd_data 010B 3020 00047 movlw ' ' 010C 22B2 00048 call write_lcd_data 00049 010D 00050 print_2 010D 21B6 00051 call futs_print ; 区間燃費表示(信号間) 00052 010E 3020 00053 movlw ' ' 010F 22B2 00054 call write_lcd_data 0110 22B2 00055 call write_lcd_data 0111 22B2 00056 call write_lcd_data 00057 0112 219C 00058 call fut_print ; 区間燃費表示 00059 00060 ; カーソルを2行目に移動 0113 1086 00061 bcf RS ; RS='L' 0114 30C0 00062 movlw B'11000000' 0115 22B2 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 22B2 00069 call write_lcd_data MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00070 011A 227B 00071 call avgsps_print ; 平均速度表示(信号間) 00072 011B 3020 00073 movlw ' ' 011C 22B2 00074 call write_lcd_data 011D 22B2 00075 call write_lcd_data 00076 011E 2236 00077 call avgsp_print ; 平均速度表示 00078 00079 00080 ; カーソルを3行目に移動 011F 1086 00081 bcf RS ; RS='L' 0120 3094 00082 movlw B'10010100' 0121 22B2 00083 call write_lcd_data 0122 1486 00084 bsf RS ; RS=1 : 以後のコマンドは文字表示 00085 0123 3020 00086 movlw ' ' 0124 22B2 00087 call write_lcd_data 0125 22B2 00088 call write_lcd_data 0126 22B2 00089 call write_lcd_data 0127 22B2 00090 call write_lcd_data 00091 0128 220C 00092 call odds_print ; 走行距離表示(信号間) 00093 0129 3020 00094 movlw ' ' 012A 22B2 00095 call write_lcd_data 00096 012B 2203 00097 call odd_print ; 走行距離表示 00098 00099 ; カーソルを4行目に移動 012C 1086 00100 bcf RS ; RS='L' 012D 30D4 00101 movlw B'11010100' 012E 22B2 00102 call write_lcd_data 012F 1486 00103 bsf RS ; RS=1 : 以後のコマンドは文字表示 00104 0130 2154 00105 call fu_print_time ; 燃費cc/min表示 00106 0131 3020 00107 movlw ' ' 0132 22B2 00108 call write_lcd_data 00109 0133 21D9 00110 call times_print ; 時間表示(信号間) 00111 0134 3020 00112 movlw ' ' 0135 22B2 00113 call write_lcd_data 00114 0136 21D0 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 5:23:17 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 294D 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 233F 00140 call div16 00141 0145 083D 00142 movf result+1,W 0146 00B7 00143 movwf src1+1 0147 083C 00144 movf result+0,W 0148 00B6 00145 movwf src1+0 0149 22E6 00146 call bin16tobcd 00147 014A 1042 00148 bcf flag,0 014B 22A7 00149 call print_dec3 00150 ;movlw 'k' 00151 ;call write_lcd_data 00152 ;movlw 'm' 00153 ;call write_lcd_data 00154 ;movlw '/' 00155 ;call write_lcd_data 00156 ;movlw 'h' 00157 ;call write_lcd_data 00158 014C 2953 00159 goto sp_print_e 014D 00160 sp_print_0 00161 ; idle 014D 3020 00162 movlw ' ' 014E 22B2 00163 call write_lcd_data 014F 3020 00164 movlw ' ' 0150 22B2 00165 call write_lcd_data 0151 3030 00166 movlw '0' 0152 22B2 00167 call write_lcd_data 00168 ;movlw 'e' 00169 ;call write_lcd_data 00170 ;movlw ' ' 00171 ;call write_lcd_data 00172 ;call write_lcd_data 00173 ;call write_lcd_data 0153 00174 sp_print_e 0153 0008 00175 return MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00176 00177 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00178 ; 瞬間燃費表示 (000cc/m or f-c) 0154 00179 fu_print_time 0154 305F 00180 movlw SPEED_FLOW_MAX ^ 0ffh 0155 0728 00181 addwf speed_flow,0 0156 1803 00182 btfsc STATUS,C 0157 2976 00183 goto fu_print_ccpmin ; 停止中は必ず cc/min 表示 00184 0158 3069 00185 movlw FUEL_FC_FLOW_MAX ^ 0ffh 0159 072F 00186 addwf fuel_flow,0 015A 1803 00187 btfsc STATUS,C 015B 298A 00188 goto fu_print_fc ; 走行中で fuel cut と判断されたら f-c 00189 015C 2976 00190 goto fu_print_ccpmin ; 通常時? は cc/min 表示 00191 00192 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00193 ; 瞬間燃費表示 (000km/l or stp or f-c) 015D 00194 fu_print 015D 305F 00195 movlw SPEED_FLOW_MAX ^ 0ffh 015E 0728 00196 addwf speed_flow,0 015F 1803 00197 btfsc STATUS,C 0160 2995 00198 goto fu_print_stop ; 0km/h と判断されたら 00199 0161 3069 00200 movlw FUEL_FC_FLOW_MAX ^ 0ffh 0162 072F 00201 addwf fuel_flow,0 0163 1803 00202 btfsc STATUS,C 0164 298A 00203 goto fu_print_fc ; fuel cut と判断されたら 00204 00205 ; 瞬間燃費計算 00206 0165 082E 00207 movf fuel_tm+1,W 0166 00B7 00208 movwf src1+1 0167 082D 00209 movf fuel_tm+0,W 0168 00B6 00210 movwf src1+0 0169 0827 00211 movf speed_tm+1,W 016A 00BA 00212 movwf src2+1 016B 0826 00213 movf speed_tm+0,W 016C 00B9 00214 movwf src2+0 016D 233F 00215 call div16 00216 016E 083D 00217 movf result+1,W 016F 00B7 00218 movwf src1+1 0170 083C 00219 movf result+0,W 0171 00B6 00220 movwf src1+0 0172 22E6 00221 call bin16tobcd 00222 0173 1042 00223 bcf flag,0 0174 22A7 00224 call print_dec3 00225 ;movlw 'k' 00226 ;call write_lcd_data 00227 ;movlw 'm' 00228 ;call write_lcd_data MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00229 ;movlw '/' 00230 ;call write_lcd_data 00231 ;movlw 'l' 00232 ;call write_lcd_data 0175 299B 00233 goto fu_print_e 0176 00234 fu_print_ccpmin 00235 ; cc/min 表示 0176 3005 00236 movlw FUELFACT_H ;係数 0177 00B8 00237 movwf src1+2 0178 309D 00238 movlw FUELFACT_M ;係数 0179 00B7 00239 movwf src1+1 017A 3040 00240 movlw FUELFACT_L ;係数 017B 00B6 00241 movwf src1+0 00242 00243 ;movlw 0 017C 01BB 00244 clrf src2+2 017D 082E 00245 movf fuel_tm+1,W 017E 00BA 00246 movwf src2+1 017F 082D 00247 movf fuel_tm+0,W 0180 00B9 00248 movwf src2+0 0181 2382 00249 call div24 00250 0182 083D 00251 movf result+1,W 0183 00B7 00252 movwf src1+1 0184 083C 00253 movf result+0,W 0185 00B6 00254 movwf src1+0 0186 22E6 00255 call bin16tobcd 00256 0187 1042 00257 bcf flag,0 0188 22A7 00258 call print_dec3 00259 00260 ;movlw 'c' 00261 ;call write_lcd_data 00262 ;movlw 'c' 00263 ;call write_lcd_data 00264 ;movlw '/' 00265 ;call write_lcd_data 00266 ;movlw 'm' 00267 ;call write_lcd_data 0189 299B 00268 goto fu_print_e 018A 00269 fu_print_fc 018A 305F 00270 movlw SPEED_FLOW_MAX ^ 0ffh 018B 0728 00271 addwf speed_flow,0 018C 1803 00272 btfsc STATUS,C 018D 2995 00273 goto fu_print_stop ; 0km/h と判断されたら 00274 00275 ; f-c 表示 018E 3066 00276 movlw 'f' 018F 22B2 00277 call write_lcd_data 0190 302D 00278 movlw '-' 0191 22B2 00279 call write_lcd_data 0192 3063 00280 movlw 'c' 0193 22B2 00281 call write_lcd_data MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00282 ;movlw ' ' 00283 ;call write_lcd_data 00284 ;call write_lcd_data 00285 ;call write_lcd_data 00286 ;call write_lcd_data 0194 299B 00287 goto fu_print_e 0195 00288 fu_print_stop 00289 ; stop 表示 0195 302D 00290 movlw '-' 0196 22B2 00291 call write_lcd_data 0197 302D 00292 movlw '-' 0198 22B2 00293 call write_lcd_data 00294 ;movlw '-' 00295 ;call write_lcd_data 0199 302D 00296 movlw '-' 019A 22B2 00297 call write_lcd_data 00298 ;movlw ' ' 00299 ;call write_lcd_data 00300 ;call write_lcd_data 00301 ;call write_lcd_data 00302 ;goto fu_print_e 019B 00303 fu_print_e 019B 0008 00304 return 00305 00306 ;■瞬間系 <-- 00307 00308 00309 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00310 ; 区間燃費表示 019C 00311 fut_print 00312 ; 区間燃費計算 019C 118B 00313 bcf INTCON,RBIE ; rb割込禁止 019D 0811 00314 movf odometer_cn+2,W 019E 00BB 00315 movwf src2+2 019F 0810 00316 movf odometer_cn+1,W 01A0 00BA 00317 movwf src2+1 01A1 080F 00318 movf odometer_cn+0,W 01A2 00B9 00319 movwf src2+0 01A3 158B 00320 bsf INTCON,RBIE ; rb割込許可 01A4 2307 00321 call mul10_24 00322 01A5 118B 00323 bcf INTCON,RBIE ; rb割込禁止 01A6 0814 00324 movf fuel_cn+2,W 01A7 00BB 00325 movwf src2+2 01A8 0813 00326 movf fuel_cn+1,W 01A9 00BA 00327 movwf src2+1 01AA 0812 00328 movf fuel_cn+0,W 01AB 00B9 00329 movwf src2+0 01AC 158B 00330 bsf INTCON,RBIE ; rb割込許可 01AD 2382 00331 call div24 00332 00333 ; 区間燃費表示 01AE 083D 00334 movf result+1,W MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01AF 00B7 00335 movwf src1+1 01B0 083C 00336 movf result+0,W 01B1 00B6 00337 movwf src1+0 01B2 22E6 00338 call bin16tobcd 00339 01B3 1442 00340 bsf flag,0 01B4 22A7 00341 call print_dec3 00342 ;movlw 'k' 00343 ;call write_lcd_data 00344 ;movlw 'm' 00345 ;call write_lcd_data 00346 ;movlw '/' 00347 ;call write_lcd_data 00348 ;movlw 'l' 00349 ;call write_lcd_data 01B5 0008 00350 return 00351 00352 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00353 ; 区間燃費(信号間)表示 01B6 00354 futs_print 00355 ; 区間燃費計算 01B6 118B 00356 bcf INTCON,RBIE ; rb割込禁止 01B7 081E 00357 movf odometer_cn2+2,W 01B8 00BB 00358 movwf src2+2 01B9 081D 00359 movf odometer_cn2+1,W 01BA 00BA 00360 movwf src2+1 01BB 081C 00361 movf odometer_cn2+0,W 01BC 00B9 00362 movwf src2+0 01BD 158B 00363 bsf INTCON,RBIE ; rb割込許可 01BE 2307 00364 call mul10_24 00365 01BF 118B 00366 bcf INTCON,RBIE ; rb割込禁止 01C0 0821 00367 movf fuel_cn2+2,W 01C1 00BB 00368 movwf src2+2 01C2 0820 00369 movf fuel_cn2+1,W 01C3 00BA 00370 movwf src2+1 01C4 081F 00371 movf fuel_cn2+0,W 01C5 00B9 00372 movwf src2+0 01C6 158B 00373 bsf INTCON,RBIE ; rb割込許可 01C7 2382 00374 call div24 00375 00376 ; 区間燃費表示 01C8 083D 00377 movf result+1,W 01C9 00B7 00378 movwf src1+1 01CA 083C 00379 movf result+0,W 01CB 00B6 00380 movwf src1+0 01CC 22E6 00381 call bin16tobcd 00382 01CD 1442 00383 bsf flag,0 01CE 22A7 00384 call print_dec3 00385 ;movlw 'k' 00386 ;call write_lcd_data 00387 ;movlw 'm' MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00388 ;call write_lcd_data 00389 ;movlw '/' 00390 ;call write_lcd_data 00391 ;movlw 'l' 00392 ;call write_lcd_data 01CF 0008 00393 return 00394 00395 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00396 ; 時間表示 01D0 00397 time_print 01D0 118B 00398 bcf INTCON,RBIE ; rb割込禁止 00399 01D1 080E 00400 movf timer_cn+2,W 01D2 00B8 00401 movwf src1+2 01D3 080D 00402 movf timer_cn+1,W 01D4 00B7 00403 movwf src1+1 01D5 080C 00404 movf timer_cn+0,W 01D6 00B6 00405 movwf src1+0 00406 01D7 158B 00407 bsf INTCON,RBIE ; rb割込許可 00408 01D8 29E1 00409 goto time_print_1 00410 00411 ;;;;;;;;;;;;;;;;;;;;;; 00412 ; 時間(信号間)表示 01D9 00413 times_print 01D9 118B 00414 bcf INTCON,RBIE ; rb割込禁止 00415 01DA 081B 00416 movf timer_cn2+2,W 01DB 00B8 00417 movwf src1+2 01DC 081A 00418 movf timer_cn2+1,W 01DD 00B7 00419 movwf src1+1 01DE 0819 00420 movf timer_cn2+0,W 01DF 00B6 00421 movwf src1+0 00422 01E0 158B 00423 bsf INTCON,RBIE ; rb割込許可 00424 00425 ;goto time_print_1 00426 01E1 00427 time_print_1 00428 00429 ;movlw 0 01E1 01BB 00430 clrf src2+2 01E2 300E 00431 movlw TIMMINFACT_H ; 係数 01E3 00BA 00432 movwf src2+1 01E4 304E 00433 movlw TIMMINFACT_L ; 係数 01E5 00B9 00434 movwf src2+0 01E6 2382 00435 call div24 00436 01E7 083D 00437 movf result+1,W 01E8 00B7 00438 movwf src1+1 01E9 083C 00439 movf result+0,W 01EA 00B6 00440 movwf src1+0 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01EB 22E6 00441 call bin16tobcd 00442 01EC 1042 00443 bcf flag,0 01ED 22A7 00444 call print_dec3 00445 01EE 303A 00446 movlw ':' 01EF 22B2 00447 call write_lcd_data 00448 00449 ; 余りから秒を計算! 01F0 0840 00450 movf mod+1,W 01F1 00B8 00451 movwf src1+2 01F2 083F 00452 movf mod+0,W 01F3 00B7 00453 movwf src1+1 00454 ;movlw 0 01F4 01B6 00455 clrf src1+0 00456 00457 ;movlw 0 01F5 01BB 00458 clrf src2+2 01F6 303D 00459 movlw TIMSECFACT_H ; 係数 01F7 00BA 00460 movwf src2+1 01F8 3009 00461 movlw TIMSECFACT_L ; 係数 01F9 00B9 00462 movwf src2+0 00463 01FA 2382 00464 call div24 00465 01FB 083D 00466 movf result+1,W 01FC 00B7 00467 movwf src1+1 01FD 083C 00468 movf result+0,W 01FE 00B6 00469 movwf src1+0 01FF 22E6 00470 call bin16tobcd 00471 0200 1042 00472 bcf flag,0 0201 22A9 00473 call print_dec2 ; 秒2桁表示 00474 0202 0008 00475 return 00476 00477 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00478 ; 走行距離表示 (0000.00km) 0203 00479 odd_print 0203 118B 00480 bcf INTCON,RBIE ; rb割込禁止 00481 0204 0811 00482 movf odometer_cn+2,W 0205 00B8 00483 movwf src1+2 0206 0810 00484 movf odometer_cn+1,W 0207 00B7 00485 movwf src1+1 0208 080F 00486 movf odometer_cn+0,W 0209 00B6 00487 movwf src1+0 00488 020A 158B 00489 bsf INTCON,RBIE ; rb割込許可 00490 020B 2A14 00491 goto odd_print_1 00492 00493 ;;;;;;;;;;;;;;;;;;;;;; MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00494 ; 走行距離(信号間)表示 (0000.00km) 020C 00495 odds_print 020C 118B 00496 bcf INTCON,RBIE ; rb割込禁止 00497 020D 081E 00498 movf odometer_cn2+2,W 020E 00B8 00499 movwf src1+2 020F 081D 00500 movf odometer_cn2+1,W 0210 00B7 00501 movwf src1+1 0211 081C 00502 movf odometer_cn2+0,W 0212 00B6 00503 movwf src1+0 00504 0213 158B 00505 bsf INTCON,RBIE ; rb割込許可 00506 00507 ;goto odd_print_1 00508 0214 00509 odd_print_1 00510 ;movlw 0 0214 01BB 00511 clrf src2+2 0215 3009 00512 movlw 0x9 ;637*4 = 2548 = 0x9f4 0216 00BA 00513 movwf src2+1 0217 30F4 00514 movlw 0xf4 ;637*4 = 2548 = 0x9f4 0218 00B9 00515 movwf src2+0 00516 0219 2382 00517 call div24 00518 021A 083D 00519 movf result+1,W 021B 00B7 00520 movwf src1+1 021C 083C 00521 movf result+0,W 021D 00B6 00522 movwf src1+0 021E 22E6 00523 call bin16tobcd 00524 021F 1042 00525 bcf flag,0 0220 22A7 00526 call print_dec3 ; まずは整数部3桁 00527 0221 302E 00528 movlw '.' 0222 22B2 00529 call write_lcd_data 00530 00531 ; 余りから小数2桁を計算! 0223 0840 00532 movf mod+1,W 0224 00B8 00533 movwf src1+2 0225 083F 00534 movf mod+0,W 0226 00B7 00535 movwf src1+1 00536 ;movlw 0 0227 01B6 00537 clrf src1+0 00538 00539 ;movlw 0 0228 01BB 00540 clrf src2+2 0229 3019 00541 movlw 0x19 ;637*4*256/100=0x197b 022A 00BA 00542 movwf src2+1 022B 307B 00543 movlw 0x7b ;637*4*256/100=0x197b 022C 00B9 00544 movwf src2+0 00545 022D 2382 00546 call div24 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 24 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00547 022E 083D 00548 movf result+1,W 022F 00B7 00549 movwf src1+1 0230 083C 00550 movf result+0,W 0231 00B6 00551 movwf src1+0 0232 22E6 00552 call bin16tobcd 00553 0233 1042 00554 bcf flag,0 0234 22A9 00555 call print_dec2 ; 小数2桁表示 00556 00557 ;movlw 'k' 00558 ;call write_lcd_data 00559 ;movlw 'm' 00560 ;call write_lcd_data 00561 0235 0008 00562 return 00563 00564 00565 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00566 ; 平均速度表示 (000km) 00567 ; 00568 ; 平均速度 = 距離パルス数 ÷ 時間 × 86.235 00569 ; 距離パルス数 ÷ (時間 ÷ 86) 00570 ; 86.23491464=1/(0.637*4)*3600/64*1000/256 00571 00572 ; 小数第一位まで表示したいので・・・ 00573 ; 平均速度 = 距離パルス数 ÷ 時間 × 862.35 00574 00575 ; 2^24/862 = 19463 = 4C07h 00576 ; 距離が 4000h 未満までは 00577 ; 平均速度 = (距離パルス数 × 862)÷ 時間 00578 ; それ以降は 00579 ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) 00580 0236 00581 avgsp_print 00582 0236 118B 00583 bcf INTCON,RBIE ; rb割込禁止 00584 0237 0811 00585 movf odometer_cn+2,W 0238 00B8 00586 movwf src1+2 0239 0810 00587 movf odometer_cn+1,W 023A 00B7 00588 movwf src1+1 023B 080F 00589 movf odometer_cn+0,W 023C 00B6 00590 movwf src1+0 00591 023D 158B 00592 bsf INTCON,RBIE ; rb割込許可 00593 00594 ; 862=35Eh 023E 01BB 00595 clrf src2+2 023F 3003 00596 movlw 3 0240 00BA 00597 movwf src2+1 0241 3052 00598 movlw 52 0242 00B9 00599 movwf src2+0 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 25 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00600 0243 0838 00601 movf src1+2,W 0244 1903 00602 btfsc STATUS,Z 0245 2A4A 00603 goto avgsp_pr_big 00604 0246 3040 00605 movlw 40 ;if(src1+1>=40) skip 0247 0237 00606 subwf src1+1,0 0248 1C03 00607 btfss STATUS,C 0249 2A63 00608 goto avgsp_pr_sml 00609 024A 00610 avgsp_pr_big 00611 ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) 00612 024A 118B 00613 bcf INTCON,RBIE ; rb割込禁止 00614 024B 080E 00615 movf timer_cn+2,W 024C 00B8 00616 movwf src1+2 024D 080D 00617 movf timer_cn+1,W 024E 00B7 00618 movwf src1+1 024F 080C 00619 movf timer_cn+0,W 0250 00B6 00620 movwf src1+0 00621 0251 158B 00622 bsf INTCON,RBIE ; rb割込許可 00623 00624 ; src2 に 862 読み込み済み 00625 0252 2382 00626 call div24 00627 0253 083E 00628 movf result+2,W 0254 00BB 00629 movwf src2+2 0255 083D 00630 movf result+1,W 0256 00BA 00631 movwf src2+1 0257 083C 00632 movf result+0,W 0258 00B9 00633 movwf src2+0 00634 0259 118B 00635 bcf INTCON,RBIE ; rb割込禁止 00636 025A 0811 00637 movf odometer_cn+2,W 025B 00B8 00638 movwf src1+2 025C 0810 00639 movf odometer_cn+1,W 025D 00B7 00640 movwf src1+1 025E 080F 00641 movf odometer_cn+0,W 025F 00B6 00642 movwf src1+0 00643 0260 158B 00644 bsf INTCON,RBIE ; rb割込許可 00645 0261 2382 00646 call div24 00647 0262 2A73 00648 goto avgsp_pr_pr 00649 0263 00650 avgsp_pr_sml 00651 ; 平均速度 = (距離パルス数 × 862)÷ 時間 00652 ; src1 に odometer_cn 読み込み済み MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 26 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00653 ; src2 に 862 読み込み済み 00654 00655 0263 2327 00656 call mul161632 00657 0264 083E 00658 movf result+2,W 0265 00B8 00659 movwf src1+2 0266 083D 00660 movf result+1,W 0267 00B7 00661 movwf src1+1 0268 083C 00662 movf result+0,W 0269 00B6 00663 movwf src1+0 00664 026A 118B 00665 bcf INTCON,RBIE ; rb割込禁止 00666 026B 080E 00667 movf timer_cn+2,W 026C 00BB 00668 movwf src2+2 026D 080D 00669 movf timer_cn+1,W 026E 00BA 00670 movwf src2+1 026F 080C 00671 movf timer_cn+0,W 0270 00B9 00672 movwf src2+0 00673 0271 158B 00674 bsf INTCON,RBIE ; rb割込許可 00675 0272 2382 00676 call div24 00677 00678 ;goto avgsp_pr_pr 00679 0273 00680 avgsp_pr_pr 0273 083D 00681 movf result+1,W 0274 00B7 00682 movwf src1+1 0275 083C 00683 movf result+0,W 0276 00B6 00684 movwf src1+0 00685 0277 22E6 00686 call bin16tobcd 00687 0278 1442 00688 bsf flag,0 0279 22A5 00689 call print_dec4 00690 027A 0008 00691 return 00692 00693 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 00694 ; 平均速度(信号間)表示 (000km) 00695 ; 00696 ; 距離パルス数 ÷ 時間 × 86.235 = 平均速度 00697 ; 距離パルス数 ÷ (時間 ÷ 86) 00698 ; 86.23491464=1/(0.637*4)*3600/64*1000/256 027B 00699 avgsps_print 027B 118B 00700 bcf INTCON,RBIE ; rb割込禁止 00701 027C 081B 00702 movf timer_cn2+2,W 027D 00B8 00703 movwf src1+2 027E 081A 00704 movf timer_cn2+1,W 027F 00B7 00705 movwf src1+1 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 27 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0280 0819 00706 movf timer_cn2+0,W 0281 00B6 00707 movwf src1+0 00708 0282 158B 00709 bsf INTCON,RBIE ; rb割込許可 00710 0283 01BB 00711 clrf src2+2 0284 01BA 00712 clrf src2+1 0285 3056 00713 movlw D'86' 0286 00B9 00714 movwf src2+0 00715 0287 2382 00716 call div24 00717 0288 083E 00718 movf result+2,W 0289 00BB 00719 movwf src2+2 028A 083D 00720 movf result+1,W 028B 00BA 00721 movwf src2+1 028C 083C 00722 movf result+0,W 028D 00B9 00723 movwf src2+0 00724 028E 118B 00725 bcf INTCON,RBIE ; rb割込禁止 00726 028F 081E 00727 movf odometer_cn2+2,W 0290 00B8 00728 movwf src1+2 0291 081D 00729 movf odometer_cn2+1,W 0292 00B7 00730 movwf src1+1 0293 081C 00731 movf odometer_cn2+0,W 0294 00B6 00732 movwf src1+0 00733 0295 158B 00734 bsf INTCON,RBIE ; rb割込許可 00735 0296 2382 00736 call div24 0297 083D 00737 movf result+1,W 0298 00B7 00738 movwf src1+1 0299 083C 00739 movf result+0,W 029A 00B6 00740 movwf src1+0 00741 029B 22E6 00742 call bin16tobcd 00743 029C 1042 00744 bcf flag,0 029D 22A7 00745 call print_dec3 00746 029E 302E 00747 movlw '.' 029F 22B2 00748 call write_lcd_data 02A0 3030 00749 movlw '0' 02A1 22B2 00750 call write_lcd_data ; ダミー 00751 02A2 0008 00752 return 00753 00754 ;■ デバッグ系 --> 00755 ;;;;;;include "debugprint.asm" 00756 ;■ デバッグ系 <-- 00098 include "lcd.asm" 00001 ; ------------------------------------------------------------------- MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 28 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00002 ; dec をLCDに表示 00003 ; 呼び出しアドレスにより、適当な桁から表示できま。 00004 ; flag,0 を立てておくと、固定小数点(10倍)だとして表示します。 00005 ; ------------------------------------------------------------------- 02A3 00006 print_dec5 02A3 0843 00007 movf dec+0,W 02A4 22B2 00008 call write_lcd_data 02A5 00009 print_dec4 02A5 0844 00010 movf dec+1,W 02A6 22B2 00011 call write_lcd_data 02A7 00012 print_dec3 02A7 0845 00013 movf dec+2,W 02A8 22B2 00014 call write_lcd_data 02A9 00015 print_dec2 02A9 0846 00016 movf dec+3,W 02AA 22B2 00017 call write_lcd_data 00018 00019 ; 小数点表示 02AB 1C42 00020 btfss flag,0 02AC 2AAF 00021 goto print_dec1 02AD 302E 00022 movlw '.' 02AE 22B2 00023 call write_lcd_data 02AF 00024 print_dec1 02AF 0847 00025 movf dec+4,W 02B0 22B2 00026 call write_lcd_data 00027 02B1 0008 00028 return 00029 00030 ; ------------------------------------------------------------------- 00031 ; 液晶ライト 00032 ; IN W キャラクタ or コマンド 00033 ; 破壊 lcd_data_temp 00034 ; ------------------------------------------------------------------- 02B2 00035 write_lcd_data 02B2 00B5 00036 movwf lcd_data_temp 02B3 0E35 00037 swapf lcd_data_temp,W ; まず上位データを 02B4 22B9 00038 call write_lcd_raw ; 出力 00039 02B5 0835 00040 movf lcd_data_temp,W ; 次に下位データを 02B6 22B9 00041 call write_lcd_raw ; 出力 02B7 0835 00042 movf lcd_data_temp,W ; 連続表示に備えて。 02B8 0008 00043 return 00044 00045 ; ------------------------------------------------------------------- 00046 ; 液晶ライト(生) 00047 ; IN W キャラクタ or コマンド 00048 ; 破壊 W 00049 ; ------------------------------------------------------------------- 02B9 00050 write_lcd_raw 00051 ;bsf LED_COM ; LED コモン 消灯 (「ますく」で代用) 02B9 390F 00052 andlw B'00001111' ; ますく 02BA 3810 00053 iorlw B'00010000' ; ますく 02BB 0085 00054 movwf PORTA ; RAポートへ出力 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 29 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02BC 0000 00055 nop ; ちょこっとwait 02BD 1506 00056 bsf E ; Eピンを'H' 02BE 0000 00057 nop ; ちょこっとLOVE 02BF 1106 00058 bcf E ; Eピンを'L' 02C0 0000 00059 nop ; ぷっち以下略 00060 02C1 0832 00061 movf ra_save,W ; RA の出力を元に戻す 02C2 0085 00062 movwf PORTA 00063 02C3 3028 00064 movlw D'40' ; wait 02C4 00C8 00065 movwf calc_cn 00066 02C5 1205 00067 bcf LED_COM ; LED コモン 点灯 00068 02C6 23EC 00069 call wait_us 00070 02C7 0008 00071 return 00072 00073 00099 include "init_lcd.asm" 00001 ; ------------------------------------------------------------------- 00002 ; 液晶初期化 00003 ; ------------------------------------------------------------------- 02C8 00004 init_lcd 00005 ;movlw D'15' 02C8 3064 00006 movlw D'100' ; 寒いと失敗するので伸ばしてみた。人間には検知できない時間だと思われ。 02C9 00C8 00007 movwf calc_cn ; wait 15ms 02CA 23DF 00008 call wait_ms 00009 02CB 1086 00010 bcf RS ; RS='L' 02CC 3003 00011 movlw B'00000011' 02CD 22B9 00012 call write_lcd_raw 02CE 3005 00013 movlw D'5' 02CF 00C8 00014 movwf calc_cn ; wait 4.1ms 02D0 23DF 00015 call wait_ms 00016 02D1 3003 00017 movlw B'00000011' 02D2 22B9 00018 call write_lcd_raw 02D3 3064 00019 movlw D'100' 02D4 00C8 00020 movwf calc_cn ; wait 100us 02D5 23EC 00021 call wait_us 00022 02D6 3000 00023 movlw B'00000000' 02D7 22B9 00024 call write_lcd_raw 00025 02D8 3002 00026 movlw B'00000010' 02D9 22B9 00027 call write_lcd_raw ; 0 0 0010 (4bit) 00028 02DA 3028 00029 movlw B'00101000' ; duty,font set9 02DB 22B2 00030 call write_lcd_data 00031 02DC 3001 00032 movlw B'00000001' ; クリアコマンド 02DD 22B2 00033 call write_lcd_data MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 30 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02DE 3002 00034 movlw D'2' 02DF 00C8 00035 movwf calc_cn 02E0 23DF 00036 call wait_ms 00037 02E1 3006 00038 movlw B'00000110' ; entry mode set 02E2 22B2 00039 call write_lcd_data 00040 02E3 300C 00041 movlw B'00001100' ; display on,cursor off 02E4 22B2 00042 call write_lcd_data 00043 02E5 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 02E6 00018 bin16tobcd 02E6 3048 00019 movlw dec_top ; 格納場所初期値 02E7 0084 00020 movwf FSR 02E8 22F4 00021 call devideby10 ; 最下位変換 02E9 22F4 00022 call devideby10 02EA 22F4 00023 call devideby10 02EB 22F4 00024 call devideby10 02EC 22F4 00025 call devideby10 ; 最上位変換 00026 02ED 3030 00027 movlw '0' 02EE 07C3 00028 addwf dec+0,F 02EF 07C4 00029 addwf dec+1,F 02F0 07C5 00030 addwf dec+2,F 02F1 07C6 00031 addwf dec+3,F 02F2 07C7 00032 addwf dec+4,F 00033 02F3 0008 00034 return 00035 00036 ; 00037 ; ÷10サブルーチン 00038 ; 10で除算します 00039 ; 02F4 00040 devideby10 02F4 3010 00041 movlw D'16' ; 16ビットくり返し MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 31 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02F5 00C8 00042 movwf calc_cn 00043 02F6 01B8 00044 clrf src1+2 02F7 00045 devideby10_0 02F7 1003 00046 bcf STATUS,C 02F8 0DB6 00047 rlf src1+0,F 02F9 0DB7 00048 rlf src1+1,F 02FA 0DB8 00049 rlf src1+2,F 00050 02FB 300A 00051 movlw D'10' 02FC 0238 00052 subwf src1+2,W 02FD 1803 00053 btfsc STATUS,C 02FE 00B8 00054 movwf src1+2 02FF 1803 00055 btfsc STATUS,C 0300 0AB6 00056 incf src1+0,F 00057 0301 0BC8 00058 decfsz calc_cn,F 0302 2AF7 00059 goto devideby10_0 00060 0303 0384 00061 decf FSR,F 0304 0838 00062 movf src1+2,W ; 余り 0305 0080 00063 movwf INDF 0306 0008 00064 return 00065 00066 ;--------------------------------------------------------------------- 0307 00067 mul10_24 00068 ; 24bit 10倍ルーチン 00069 ; 呼び出し側の都合により、src2 が入力で、src1 が出力です。 00070 0307 083B 00071 movf src2+2,W 0308 00B8 00072 movwf src1+2 0309 083A 00073 movf src2+1,W 030A 00B7 00074 movwf src1+1 030B 0839 00075 movf src2+0,W ; src2 => src1 030C 00B6 00076 movwf src1+0 00077 030D 1003 00078 bcf STATUS,C ; src1 を 2倍 030E 0DB6 00079 rlf src1+0,F 030F 0DB7 00080 rlf src1+1,F 0310 0DB8 00081 rlf src1+2,F 00082 0311 1003 00083 bcf STATUS,C ; src1 を さらに2倍 で4倍 0312 0DB6 00084 rlf src1+0,F 0313 0DB7 00085 rlf src1+1,F 0314 0DB8 00086 rlf src1+2,F 00087 00088 ; src1 に src2 を足して 5倍 0315 0839 00089 movf src2+0,W ;下位バイトの加算 0316 07B6 00090 addwf src1+0,F 0317 3001 00091 movlw 1 0318 1803 00092 btfsc STATUS,C 0319 07B7 00093 addwf src1+1,F 031A 1803 00094 btfsc STATUS,C MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 32 LOC OBJECT CODE LINE SOURCE TEXT VALUE 031B 07B8 00095 addwf src1+2,F 00096 031C 083A 00097 movf src2+1,W ;中位バイトの加算 031D 07B7 00098 addwf src1+1,F 031E 1803 00099 btfsc STATUS,C 031F 0AB8 00100 incf src1+2,F 00101 0320 083B 00102 movf src2+2,W ;上位バイトの加算 0321 07B8 00103 addwf src1+2,F 00104 0322 1003 00105 bcf STATUS,C ; src1 を さらに2倍 で10倍 0323 0DB6 00106 rlf src1+0,F 0324 0DB7 00107 rlf src1+1,F 0325 0DB8 00108 rlf src1+2,F 00109 0326 0008 00110 return 00111 00112 ;********************************************************************* 00113 ;--------------------------------------------------------------------- 00114 0327 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 0327 0839 00130 movf src2+0,W ;乗数を答え下位(ワーク)にコピーする 0328 00BC 00131 movwf result+0 0329 083A 00132 movf src2+1,W 032A 00BD 00133 movwf result+1 00134 032B 01BE 00135 clrf result+2 ;答用変数をクリアしておく 032C 01BF 00136 clrf result+3 ;〃 00137 032D 3010 00138 movlw 10h ;10h=16 032E 00C8 00139 movwf calc_cn ;calc_cn に 16 を代入 032F 00140 mul161632_1 032F 1003 00141 bcf 3,0 ;キャリフラグのクリア 0330 1C3C 00142 btfss result+0,0 ;最下位ビットが 0 なら 0331 2B38 00143 goto mul161632_2 ; →足さない 0332 0836 00144 movf src1+0,w ;src1(下位) を w にコピー 0333 07BE 00145 addwf result+2,1 ;答(下位)に加える 0334 1803 00146 btfsc 3,0 ;キャリフラグが 0 なら次の命令をスキップ 0335 0ABF 00147 incf result+3,1 ;繰り上がりの処理 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 33 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00148 0336 0837 00149 movf src1+1,0 ;src1(上位) を w にコピー 0337 07BF 00150 addwf result+3,1 ;答に加える(キャリフラグが次のシフトに必要) 00151 0338 00152 mul161632_2 0338 0CBF 00153 rrf result+3,1 ;答を1ビット右に送る(被乗数を倍する) 0339 0CBE 00154 rrf result+2,1 ; 〜 033A 0CBD 00155 rrf result+1,1 ; 〜 033B 0CBC 00156 rrf result+0,1 ; 〜 下位 00157 033C 0BC8 00158 decfsz calc_cn,1 ;ビット数分の繰り返し 033D 2B2F 00159 goto mul161632_1 00160 033E 0008 00161 return 00162 00163 ;--------------------------------------------------------------------- 00164 ;********************************************************************* 00165 00166 00167 ;********************************************************************* 00168 ;--------------------------------------------------------------------- 00169 033F 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 033F 3010 00185 movlw D'16' 0340 00C8 00186 movwf calc_cn 0341 0839 00187 movf src2+0,W ;割る数下位をワークにコピー 0342 00BF 00188 movwf mod+0 0343 083A 00189 movf src2+1,W ;割る数上位をワークにコピー 0344 00C0 00190 movwf mod+1 0345 01BC 00191 clrf result+0 ;答え用変数のクリア 0346 01BD 00192 clrf result+1 0347 1003 00193 bcf STATUS,C 0348 00194 di1601 0348 0DBF 00195 rlf mod+0,F ;左シフトする 0349 0DC0 00196 rlf mod+1,F 034A 1803 00197 btfsc STATUS,C ;キャリフラグを見る 034B 2B52 00198 goto di1602 ;割る数の上位ビット位置検索 034C 0BC8 00199 decfsz calc_cn,F 034D 2B48 00200 goto di1601 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 34 LOC OBJECT CODE LINE SOURCE TEXT VALUE 034E 15C2 00201 bsf flag,3 ;割る数が0である。エラーコードをセット 034F 01BF 00202 clrf mod+0 ;ワーク用変数のクリア 0350 01C0 00203 clrf mod+1 0351 0008 00204 return ;戻る 0352 00205 di1602 0352 01BF 00206 clrf mod+0 ;ワーク用変数のクリア 0353 01C0 00207 clrf mod+1 0354 3010 00208 movlw D'16' 0355 00C9 00209 movwf calc_cn2 0356 0848 00210 movf calc_cn,W 0357 02C9 00211 subwf calc_cn2,F ;残り、実ループの回数 0358 00212 di1603 0358 1003 00213 bcf STATUS,C ;キャリフラグを0に 0359 0DB6 00214 rlf src1+0,F 035A 0DB7 00215 rlf src1+1,F 035B 0DBF 00216 rlf mod+0,F 035C 0DC0 00217 rlf mod+1,F 035D 0BC8 00218 decfsz calc_cn,F ;割られる数を初期位置までシフト 035E 2B58 00219 goto di1603 035F 00220 di1604 ;現位置での減算が可能かチェック 035F 083A 00221 movf src2+1,W 0360 0240 00222 subwf mod+1,W 0361 1C03 00223 btfss STATUS,C 0362 2B73 00224 goto di1606 0363 0840 00225 movf mod+1,W 0364 023A 00226 subwf src2+1,W 0365 1C03 00227 btfss STATUS,C 0366 2B6B 00228 goto di1605 0367 0839 00229 movf src2+0,W 0368 023F 00230 subwf mod+0,W 0369 1C03 00231 btfss STATUS,C 036A 2B73 00232 goto di1606 036B 00233 di1605 036B 0839 00234 movf src2+0,W 036C 02BF 00235 subwf mod+0,F ;ワークから下位を引く 036D 1C03 00236 btfss STATUS,C ;キャリフラグが 1(正)なら次をスキップ 036E 03C0 00237 decf mod+1,F ;上位 -1 036F 083A 00238 movf src2+1,W 0370 02C0 00239 subwf mod+1,F ;ワークから上位を引く 0371 1403 00240 bsf STATUS,C ;キャリフラグを1に 0372 2B74 00241 goto di1607 0373 00242 di1606 0373 1003 00243 bcf STATUS,C ;キャリフラグを0に 0374 00244 di1607 0374 0DBC 00245 rlf result+0,F ;キャリフラグの内容を答えにシフト 0375 0DBD 00246 rlf result+1,F 0376 08C9 00247 movf calc_cn2,F ;calc_cn2 が 0 か検査 0377 1903 00248 btfsc STATUS,Z 0378 2B80 00249 goto di1608 ;最下位まで処理したなら終了 0379 03C9 00250 decf calc_cn2,F ;ビット位置を1つ下げる(右へ) 037A 1003 00251 bcf STATUS,C ;キャリフラグを0に 037B 0DB6 00252 rlf src1+0,F ;ワークへ1ビット左シフト 037C 0DB7 00253 rlf src1+1,F MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 35 LOC OBJECT CODE LINE SOURCE TEXT VALUE 037D 0DBF 00254 rlf mod+0,F 037E 0DC0 00255 rlf mod+1,F 037F 2B5F 00256 goto di1604 0380 00257 di1608 0380 11C2 00258 bcf flag,3 ;正常終了 00259 0381 0008 00260 return 00261 00262 ;--------------------------------------------------------------------- 00263 00264 ;********************************************************************* 00265 ;--------------------------------------------------------------------- 00266 0382 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 0382 3018 00288 movlw D'24' 0383 00C8 00289 movwf calc_cn 0384 0839 00290 movf src2+0,W ;割る数をワークにコピー 0385 00BF 00291 movwf mod+0 0386 083A 00292 movf src2+1,W 0387 00C0 00293 movwf mod+1 0388 083B 00294 movf src2+2,W 0389 00C1 00295 movwf mod+2 038A 1003 00296 bcf STATUS,C 038B 01BC 00297 clrf result+0 ;答えのクリア 038C 01BD 00298 clrf result+1 038D 01BE 00299 clrf result+2 038E 00300 di2401 038E 0DBF 00301 rlf mod+0,F ;左シフトする 038F 0DC0 00302 rlf mod+1,F 0390 0DC1 00303 rlf mod+2,F 0391 1803 00304 btfsc STATUS,C 0392 2B9A 00305 goto di2402 ;割る数の上位ビットが見付かったなら di3202 へ 0393 0BC8 00306 decfsz calc_cn,F MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 36 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0394 2B8E 00307 goto di2401 0395 15C2 00308 bsf flag,3 ;割る数が0である、エラーコードをセット 0396 01BF 00309 clrf mod+0 ;ワークのクリア(ワークには余りが残る) 0397 01C0 00310 clrf mod+1 0398 01C1 00311 clrf mod+2 0399 0008 00312 return ;戻る 039A 00313 di2402 039A 01BF 00314 clrf mod+0 ;ワークのクリア(ワークには余りが残る) 039B 01C0 00315 clrf mod+1 039C 01C1 00316 clrf mod+2 039D 3018 00317 movlw D'24' 039E 00C9 00318 movwf calc_cn2 039F 0848 00319 movf calc_cn,W 03A0 02C9 00320 subwf calc_cn2,F ;残り、実ループの回数 03A1 00321 di2403 03A1 1003 00322 bcf STATUS,C ;キャリフラグを0に 03A2 0DB6 00323 rlf src1+0,F ;有効位置までシフトする 03A3 0DB7 00324 rlf src1+1,F 03A4 0DB8 00325 rlf src1+2,F 03A5 0DBF 00326 rlf mod+0,F ;押し出されたビットをワークに 03A6 0DC0 00327 rlf mod+1,F 03A7 0DC1 00328 rlf mod+2,F 03A8 0BC8 00329 decfsz calc_cn,F ;割られる数を初期位置までシフト 03A9 2BA1 00330 goto di2403 03AA 00331 di2404 03AA 083B 00332 movf src2+2,W 03AB 0241 00333 subwf mod+2,W 03AC 1903 00334 btfsc STATUS,Z 03AD 2BB1 00335 goto di2406 03AE 1803 00336 btfsc STATUS,C 03AF 2BBE 00337 goto di2410 00338 ;btfss STATUS,C 03B0 2BCD 00339 goto di2411 03B1 00340 di2406 03B1 083A 00341 movf src2+1,0 03B2 0240 00342 subwf mod+1,0 03B3 1903 00343 btfsc STATUS,Z 03B4 2BB8 00344 goto di2407 03B5 1803 00345 btfsc STATUS,C 03B6 2BBE 00346 goto di2410 00347 ;btfss STATUS,C 03B7 2BCD 00348 goto di2411 03B8 00349 di2407 03B8 0839 00350 movf src2+0,W 03B9 023F 00351 subwf mod+0,W 03BA 1903 00352 btfsc STATUS,Z 03BB 2BBE 00353 goto di2410 03BC 1C03 00354 btfss STATUS,C 03BD 2BCD 00355 goto di2411 03BE 00356 di2410 03BE 0839 00357 movf src2+0,W 03BF 02BF 00358 subwf mod+0,F ;ワークから下位を引く 03C0 3001 00359 movlw 1 ;ワークには余りが残る MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 37 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03C1 1C03 00360 btfss STATUS,C 03C2 02C0 00361 subwf mod+1,F 03C3 1C03 00362 btfss STATUS,C 03C4 02C1 00363 subwf mod+2,F 03C5 083A 00364 movf src2+1,W 03C6 02C0 00365 subwf mod+1,F ;ワークから2位を引く 03C7 1C03 00366 btfss STATUS,C 03C8 03C1 00367 decf mod+2,F ;上位 -1 03C9 083B 00368 movf src2+2,W 03CA 02C1 00369 subwf mod+2,F ;ワークから上位を引く 03CB 1403 00370 bsf STATUS,C ;キャリフラグを1に 03CC 2BCE 00371 goto di2412 00372 03CD 00373 di2411 03CD 1003 00374 bcf STATUS,C ;キャリフラグを0に 03CE 00375 di2412 03CE 0DBC 00376 rlf result+0,F ;キャリフラグの内容を答えにシフトしてゆく 03CF 0DBD 00377 rlf result+1,F 03D0 0DBE 00378 rlf result+2,F 03D1 08C9 00379 movf calc_cn2,F ;calc_cn2 が 0 か検査 03D2 1903 00380 btfsc STATUS,Z 03D3 2BDD 00381 goto di2413 ;最下位まで処理したなら終了 03D4 03C9 00382 decf calc_cn2,F ;ビット位置を1つ下げる(右へ) 03D5 1003 00383 bcf STATUS,C ;キャリフラグを0に 03D6 0DB6 00384 rlf src1+0,F ;ワークへ1ビット左シフト 03D7 0DB7 00385 rlf src1+1,F 03D8 0DB8 00386 rlf src1+2,F 03D9 0DBF 00387 rlf mod+0,F 03DA 0DC0 00388 rlf mod+1,F 03DB 0DC1 00389 rlf mod+2,F 03DC 2BAA 00390 goto di2404 03DD 00391 di2413 03DD 11C2 00392 bcf flag,3 ;正常終了 03DE 0008 00393 return 00394 ;--------------------------------------------------------------------- 00395 ;********************************************************************* 00101 include "pic.asm" 00001 00002 ; //////////////////////////////////////////////////////////////////// 00003 ; //////////////////////////////////////////////////////////////////// 00004 ; msオーダーのウェイト 00005 ; //////////////////////////////////////////////////////////////////// 03DF 00006 wait_ms 03DF 00007 wait_ms0 03DF 01C9 00008 clrf calc_cn2 03E0 00009 wait_ms1 03E0 0000 00010 nop 03E1 0000 00011 nop 03E2 0000 00012 nop 03E3 0000 00013 nop 03E4 0000 00014 nop 03E5 0000 00015 nop 03E6 0000 00016 nop MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 38 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03E7 0BC9 00017 decfsz calc_cn2,F 03E8 2BE0 00018 goto wait_ms1 03E9 0BC8 00019 decfsz calc_cn,F 03EA 2BDF 00020 goto wait_ms0 03EB 0008 00021 return 00022 00023 ; //////////////////////////////////////////////////////////////////// 00024 ; μsオーダーのウェイト 00025 ; //////////////////////////////////////////////////////////////////// 03EC 00026 wait_us 03EC 00027 wait_us0 03EC 0BC8 00028 decfsz calc_cn,F 03ED 2BEC 00029 goto wait_us0 03EE 0008 00030 return 00031 00102 00103 00104 end MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 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 5:23:17 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 0000024A avgsp_pr_pr 00000273 avgsp_pr_sml 00000263 avgsp_print 00000236 avgsps_print 0000027B bin16tobcd 000002E6 calc_cn 00000048 calc_cn2 00000049 calccalc 0000008F cn2_reset 0000004C dec 00000043 dec_top 00000048 devideby10 000002F4 devideby10_0 000002F7 di1601 00000348 di1602 00000352 di1603 00000358 di1604 0000035F di1605 0000036B di1606 00000373 di1607 00000374 di1608 00000380 di2401 0000038E di2402 0000039A di2403 000003A1 di2404 000003AA di2406 000003B1 di2407 000003B8 di2410 000003BE di2411 000003CD di2412 000003CE di2413 000003DD MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 41 SYMBOL TABLE LABEL VALUE div16 0000033F div24 00000382 flag 00000042 fu_print 0000015D fu_print_ccpmin 00000176 fu_print_e 0000019B fu_print_fc 0000018A fu_print_stop 00000195 fu_print_time 00000154 fuel_cn 00000012 fuel_cn2 0000001F fuel_flow 0000002F fuel_tm 0000002D fuel_tm_la 00000029 fuel_tm_lb 0000002B fut_print 0000019C futs_print 000001B6 init_lcd 000002C8 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 00000307 mul161632 00000327 mul161632_1 0000032F mul161632_2 00000338 ndn_cn 00000017 ndr_cn 00000015 odd_print 00000203 odd_print_1 00000214 odds_print 0000020C odometer_cn 0000000F odometer_cn2 0000001C print 000000F8 print_1 00000103 print_2 0000010D print_dec1 000002AF print_dec2 000002A9 print_dec3 000002A7 print_dec4 000002A5 print_dec5 000002A3 ra_save 00000032 ram 0000004B ram_init_loop1 00000082 ram_init_loop2 00000086 MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 42 SYMBOL TABLE LABEL VALUE rb_now 00000033 rb_save 00000034 rb_temp 00000034 reset_flow_check_1 000000E7 reset_flow_check_end 000000F0 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 0000014D sp_print_e 00000153 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 000001D0 time_print_1 000001E1 timer_cn 0000000C timer_cn2 00000019 times_print 000001D9 w_save 00000030 wait_ms 000003DF wait_ms0 000003DF wait_ms1 000003E0 wait_us 000003EC wait_us0 000003EC write_lcd_data 000002B2 write_lcd_raw 000002B9 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX MPASM 03.00 Released FITMETER.ASM 1-13-2003 5:23:17 PAGE 43 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 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 XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX- ---------------- 2000 : -------X-------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 1007 Program Memory Words Free: 17 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 0 suppressed